解决远程连接MySQL报错:2003 - Can‘t connect to MySQL server on ‘X.X.X.X‘ (10060 “Unknown error“)问题
问题
先看报错:
2003 - Can’t connect to MySQL server on ‘X.X.X’ (10060 “Unknown error”)。
意思是服务器远程连接出错:未知错误。
解决方案:
遇到这个问题,首先想到的是权限不够。那咱就给它赋权。
首先登录MySQL数据库:mysql -u用户名 -p密码;
然后:use mysql;
进入数据库后我们先看看mysql user初始的权限表长啥样,输入sql语句:
select Host,User from user;
有结果:
+-----------------------+------+
| Host | User |
+-----------------------+------+
| 127.0.0.1 | root |
| ::1 | root |
| localhost | |
| localhost | root |
| localhost.localdomain | |
| localhost.localdomain | root |
+-----------------------+------+
6 rows in set (0.00 sec)
看到这里就比较明了了,由于我们是远程连接访问mysql,需要开放主机权限。这里我们将127.0.0.1改为%(%表示允许任意的host访问)。输入mysql语句:
UPDATE user SET Host = '%' WHERE Host = '127.0.0.1' AND User = 'root';
flush privileges;
回头看看有没有改成功:
+-----------------------+------+
| Host | User |
+-----------------------+------+
| % | root |
| ::1 | root |
| localhost | |
| localhost | root |
| localhost.localdomain | |
| localhost.localdomain | root |
+-----------------------+------+
6 rows in set (0.00 sec)
好了,权限修改成功了。我们就可以尝试连接数据库了。
是的,你没看错,它还是不成功,问题出在哪呢。想了好久,突然就在一念之间:会不会是防火墙的问题?
于是我尝试关闭防火墙,然后连接,来不及反应,很快呀,直接连接成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
现在是连接成功了,但是我关闭防火墙之后又连不了了,咱也并不能永久关闭防火墙吧。
于是我查了查,应该是端口没有开放,导致的连接失败。输入命令:
systemctl start firewalld.service
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
后面就可以正常连接了。
总结
连接失败是所用主机没有访问远程服务器的权限,这里可以通过修改权限解决。但是在使用MySQL服务前需要开放端口号3306,或者直接关闭防火墙。