无法连接到远程MySQL服务器,错误代码为61。

46

当我尝试使用命令行mysql -h <远程IP> -u 任意现有用户 -p或其他MySQL客户端(如phpmyadmin)连接远程MySQL服务器时,它无法工作,并且错误提示为:

ERROR 2003 (HY000) Can't connect to MySQL server on '<remote-ip>' (61)

但是,当我尝试使用ssh <remote-ip>连接MySQL,并通过mysql -u root -p本地连接时,没有问题。

这是用户表的一部分(SELECT User, Host FROM mysql.user;):

+------------------+----------------+
| User             | Host           |
+------------------+----------------+
| root             | %              |
| other_users      | <remote-ip>    |
| root             | localhost      |
+------------------+----------------+

这里是 iptables:

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination         
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0           

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination         
1    RH-Firewall-1-INPUT  all  --  0.0.0.0/0            0.0.0.0/0           

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination         

Chain RH-Firewall-1-INPUT (2 references)
num  target     prot opt source               destination         
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           icmp type 255 
3    ACCEPT     esp  --  0.0.0.0/0            0.0.0.0/0           
4    ACCEPT     ah   --  0.0.0.0/0            0.0.0.0/0           
5    ACCEPT     udp  --  0.0.0.0/0            224.0.0.251         udp dpt:5353 
6    ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           udp dpt:631 
7    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           tcp dpt:631 
8    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED 
9    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22 
10   REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited 
11   ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:3306 

那么,问题是什么?

请查看我的帖子,这里面可能对你有所帮助:https://dev59.com/nFbUa4cB1Zd3GeqPDO6i#22637763 - Yoosaf Abdulla
8个回答

83

使用netstat检查您的MySQL服务器是否正在侦听套接字:

netstat -tulpen

并搜索3306。

如果不是或仅在本地主机上,请检查my.cnf文件并搜索bind-address行,并将其更改为:

bind-address = 0.0.0.0

然后重新启动服务器,再试一次。


mysql -u user -p -h 127.0.0.1mysql -u user -p -h 0.0.0.0mysql -u user -p -h <remote-ip>都可以正常工作。@Kaffee - Wenhao Ji
bind-address = [您的服务器公共IP地址,或者您的远程客户端可以通过私有网络访问的IP地址] - Joe Hyde
bind-address = 0.0.0.0 也可以。0.0.0.0 是什么意思?它是否作为通配符允许mysql服务器绑定到任何IP地址?有没有安全或其他方面的优势? - Joe Hyde
如果在将绑定地址更改为“0.0.0.0”时出现“start: Job failed to start”的情况,请尝试完全注释掉该行。 - Cooper Maruyama
在添加 bind-address = 0.0.0.0 行之前,您可能还需要添加 [mysqld] 标头(如果缺少)。否则,您将会收到类似于 mysql: [ERROR] Found option without preceding group in config file /etc/mysql/my.cnf at line 20. 的错误提示。 - Aamnah
显示剩余6条评论

32

MySql 5.7 中,他们更改了文件,因此 bind-address 现在在以下位置:

/etc/mysql/mysql.conf.d/mysqld.cnf

改成:

/etc/mysql/my.cnf

same as above ^ - CybeX

32

检查状态:

netstat -tulpen

修改您的配置:

nano /etc/mysql/my.cnf
# Edit:
bind-address = 0.0.0.0

进入mysql并授予权限:

mysql -umyuser -pmypassword
# Run:
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

重新启动mysql

/etc/init.d/mysql restart

3
准确无误,但授予权限时最好先提醒一下再行动,以免出现意外情况。 - Purefan
1
这对我有用。但是我只需要在第2步和第4步使用sudo。 - Srichakradhar
1
当我的.cnf文件中没有数据时,我该怎么办? - user10026373

18

如果您使用MAMP,请不要忘记允许访问(mySQL面板,勾选“允许MySQL网络访问”)


@andyp 你为什么这样认为呢?对我来说,这看起来像是一个(虽然很短,但仍然是)回答。 - John Dvorak
@Jan:你说得对,我之前太快把这个当成评论给忽略了。 - andyp
如何在MAMP 3.4中实现相同的功能?现在没有MySQL面板了。 - baisong

13

在服务器上安装Centos 7后,我遇到了这个问题。我无法通过远程计算机上的Mysql Workbench访问它。

问题出在防火墙配置上。最终,在执行以下操作时找到了解决方案:

sudo firewall-cmd --zone=public --permanent --add-service=mysql

然后,重新启动防火墙:

sudo systemctl restart firewalld

1

对于MacOS:

mysql -uroot -p

mysql> use mysql;

# View user's host
mysql> select 'host' from user where user='root';
# Update host to '%'
mysql> update user set host='%' where user='root';

mysql> flush privileges;
mysql> quit

vim /usr/local/etc/my.cnf
# Default Homebrew MySQL server config
[mysqld]
bind-address = 0.0.0.0

# Restart and reconnect MySQL
mysql.server restart
mysql -uroot -h0.0.0.0 -p

1
这可能与防火墙有关,或者尝试以下方法:
进入服务器管理员 -> MySQL -> 设置 -> 检查:允许网络连接
然后重新启动MySQL。

1
我正在使用CentOS,如何允许MySQL的网络连接。 - Wenhao Ji
在CentOS 7.0+上使用firewall-cmd尝试在命令行中执行以下操作: firewall-cmd --zone=public --add-port=3306/tcp @WenhaoJi请确保您具有root权限或添加sudo - Soma Hesk

1

我的my.cnf文件中没有“bind-address”选项。当我添加“bind-address=<remote-ip>”时,它根本不起作用。 - Wenhao Ji
尝试在MySQL服务器启动时指定一个特定的IP地址:http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_bind-address - Zaziki
1
链接腐烂!链接腐烂! - tumultous_rooster

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接