此问题与以下问题有关:
我正在本地计算机上配置新的MySQL(5.1)服务器。我需要提供对数据库的远程访问。我做了以下步骤:
my.cnf中的评论bind-address
:
# bind-address = 192.168.1.3
授予权限:
GRANT ALL PRIVILEGES ON *.* TO 'nickruiz'@'%' IDENTIFIED BY PASSWORD 'xxxx';
为防火墙配置iptables
sudo iptables -I INPUT -p udp --dport 3306 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 3306 --syn -j ACCEPT
sudo iptables-save
重启mysql服务器sudo /etc/init.d/mysql restart
测试时,我得到以下内容:
LAN:
mysql -h 192.168.1.3 -u nickruiz -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 95
Server version: 5.1.63-0ubuntu0.11.04.1 (Ubuntu)
远程:
mysql -h 1xx.xx.4.136 -u nickruiz -p
ERROR 2003 (HY000): Can't connect to MySQL server on '1xx.xx.4.136' (111)
显然有一些错误导致我无法使用我的全球IP地址。
注意:
有什么想法吗?
更新: telnet似乎没有起作用。
telnet 192.168.1.3 3306
Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.
E
5.1.63-0ubuntu0.11.04.1,0g8!:@pX;]DyY0#\)SIConnection closed by foreign host.
答案 0 :(得分:11)
请通过以下方式检查您的收听端口:
netstat -nat |grep :3306
如果显示
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
多数民众赞成你的远程连接。
但在这种情况下我认为你有
tcp 0 192.168.1.3:3306 0.0.0.0:* LISTEN
多数民众赞成你的远程连接。 您还应该检查您的防火墙(iptables如果你是centos / redhat)
services iptables stop
用于测试或使用:
iptables -A input -p tcp -i eth0 --dport 3306 -m state NEW,ESTABLISHED -j ACCEPT
iptables -A output -p tcp -i eth0 --sport 3306 -m state NEW,ESTABLISHED -j ACCEPT
检查远程连接的授予权限是另一回事:
GRANT ALL ON *.* TO remoteUser@'remoteIpadress' IDENTIFIED BY 'my_password';
答案 1 :(得分:6)
errno 111是ECONNREFUSED,我想路由器的DNAT有问题。
您的ISP也可能正在过滤该端口。
答案 2 :(得分:4)
检查您的远程主机(即您尝试连接的网络托管服务器)是否允许端口3306上的OUTGOING流量。
在这种情况下我看到了(100)错误。我可以从我的PC / Mac连接,但不能从我的网站连接。 MySQL实例可通过互联网访问,但我的托管公司不允许我的网站连接到端口3306上的数据库。
一旦我要求我的托管公司在3306端口上打开我的网络托管帐户以及传出流量,我的网站就可以连接到我的远程数据库了。
答案 3 :(得分:3)
/etc/mysql$ sudo nano my.cnf
对我有用的相关部分:
#skip-networking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = MY_IP
可以使用MY_IP
或ifconfig
找到 curl -L whatismyip.org |grep blue
。
重启mysql以确保加载新配置:
/etc/mysql$ sudo service mysql restart
答案 4 :(得分:0)
如果您使用的系统是CentOS / RedHat,并且rpm是您安装MySQL的方式,则/ etc /文件夹中没有my.cnf,您可以使用: #whereis mysql #cd / usr / share / mysql / cp -f /usr/share/mysql/my-medium.cnf /etc/my.cnf
答案 5 :(得分:0)
我有一个像你一样的问题,我使用wireshark捕获我发送的TCP数据包,我发现当我使用mysql
bin连接远程主机时,它连接远程主机的3307端口,那个& #39; s我在/etc/mysql/my.cnf
中的falut,3307是另一个项目mysql端口,但我更改了my.cnf
[client]部分中的配置,当我使用-P
选项指定3306端口时,没关系。
答案 6 :(得分:0)
我如上所述正确设置了我的绑定地址,但忘了重新启动mysql服务器(或重新启动):) face palm - 这就是我的错误来源!
答案 7 :(得分:0)
我在尝试连接到远程mysql数据库时遇到了同样的问题。
我通过在数据库服务器上打开防火墙来修复它,以允许通过:
sudo ufw allow mysql
答案 8 :(得分:0)
有时当你在密码中有特殊字符时,你需要用''
字符包装它,所以连接到db你可以使用:
mysql -uUSER -p'pa$$w0rd'
我遇到了同样的错误,这个解决方案解决了它。
答案 9 :(得分:0)
我也有同样的错误,我不明白,但是我意识到我的调制解调器使用的端口与mysql相同。好吧,我通过sudo systemctl stop apache2.service
停止了apache2.service并重新启动了xammp sudo /opt/lampp/lampp start
也许,如果您尚未使用mysql的密码1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
,那么您必须传递一个空字符串作为密码
答案 10 :(得分:-1)