我在连接到装有MySQL服务器的AWS EC2服务器时遇到问题。
这是我对mysqli_connect
的回复
p@xxx.com [~/app]# php checkmysqlremote.php
Error: Unable to connect to MySQL.
Debugging errno: 2002
Debugging error: Connection refused
这是我的netstat -tuplen
在包含MySQL服务器的EC2服务器上
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 999 20299 1378 / mysqld
如您所见,它正确地绑定到0.0.0.0
地址。
我为EC2启用了入站规则3306 port
。
在进行请求握手的服务器上,我跑了:
curl -s example.com:3306 >/dev/null && echo Success. || echo Fail.
产生了Fail.
我也在本地服务器实例上运行它,并以Success.
我还在服务器上运行nmap
进行握手,
nmap -p 3306 example.com
Nmap scan report for example.com (1.1.1.1)
Host is up (0.048s latency).
PORT STATE SERVICE
3306/tcp filtered mysql
Nmap done: 1 IP address (1 host up) scanned in 2.03 seconds
最后,我尝试在iptables中添加以下规则:
iptables -A INPUT -i eth0 -s "example.com" -p tcp --destination-port 3306 -j ACCEPT
和
sudo iptables -I INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
我现在不知道该怎么办。
更新
我尝试从远程服务器ping通EC2服务器,但它未返回任何信息。在这一点上,我认为问题出在EC2。
答案 0 :(得分:1)
尝试将下面的GRANT添加到您的用户中:
GRANT ALL PRIVILEGES ON *.* TO 'user'@'ipadress'
答案 1 :(得分:0)
类似端口的声音可能无法正确转发?可以尝试的一件事是在实例前面放置一个Amazon Elastic Load Balancer。然后,您可以转发端口3306进行MySQL连接。