2003 - Can't connect to MySQL server on xxx (61 "Connection refused")解决方案

2,928 阅读2分钟

2003 - Can't connect to MySQL xxx (61 "Connection refused") 或者 telnet: Unable to connect to remote host: Connection refused

为解决该问题查询了很多资料,网上多数方法都无法从根本上解决问题,记录我总结该问题的方法。

直接上最终解决方案。

分析出现该问题的根本原因: mysql用户访问权限。
检查mysql用户访问权限
root@zqm:~# mysql -u root -p
> use mysql;
> select host,user from user; // 查看用户
> update user set host='%' where user='root'; // 设置host为%,如果执行不成功, 再次查看一下用户权限
> select host,user from user; // 查看用户
> flush privileges; // 刷新权限
> exit; // 退出
重新连接数据库, 测试成功,成功连接。

如果您的mysql用户访问权限正常,可以尝试从以下几方面调查。

1. 查看访火墙是否开启了3306端口

  • 查看防火墙状态
root@zqm:~# sudo ufw status
Status: active

如果防火墙是关闭状态,直接忽略掉以下的配置检查。

  • 配置防火墙
root@zqm:~# sudo vi /etc/iptables.up.rules // 确保增加了3306端口

-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
  • 重载防火墙
root@zqm:~# sudo iptables-restore < /etc/iptables.up.rules

2. 确认3306端口是否开放

root@zqm:~# netstat -an | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN  

3. 检查数据库是否绑定0.0.0.0

root@zqm:~# sudo vim /etc/mysql/my.cnf // 确定?bind-address = 0.0.0.0

4. 端口检查

root@zqm:~# netstat -an | grep 3306
tcp      0     0 127.0.0.1:3306      0.0.0.0:*    LISTEN      32251/mysqld

5. telnet测试3306端口是否连通

root@zqm:~# telnet xx.xxx.xxx.xxx 3306
telnet: Unable to connect to remote host: Connection refused

6. 检查mysql用户访问权限【以上都只是试错,最关键的这步,这步才是解决问题的一步。】

root@zqm:~# mysql -u root -p
mysql> use mysql;
mysql> select host,user from user; // 查看用户
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| 127.0.0.1 | root             |
| ::1       | root             |
| localhost | debian-sys-maint |
| localhost | root             |
| zqm       | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql> update user set host='%' where user='root'; // 设置host为%
ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY' // 如果执行不成功, 再次查看一下用户权限
mysql> select host,user from user;
+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| 127.0.0.1 | root             |
| ::1       | root             |
| localhost | debian-sys-maint |
| zqm       | root             |
+-----------+------------------+
5 rows in set (0.00 sec)

mysql> flush privileges;  // 刷新权限
mysql> exit // 退出
Bye

7. 以上确认配置都正常,重新连接数据库,成功!