今天记录一个困扰了我很久,每次都是莫名其妙发生又莫名其妙解决的问题:当使用navicat连接远程数据库时无法连接(错误代码2003或其他)问题的简单分析和解决方案。
当远程连接mysql数据库连接失败时,一般分为几种情况:
- 未授予远程账号使用root连接的权限
- 在配置文件中限定了只有本地IP可以连接
- Linux系统防火墙对3306端口(或其他指定端口)进行了限制
授予远程账号访问权限
在终端登陆mysql,选择mysql数据库之后查询user表中的host信息可以看到当用户为root时,只有本地账户可以进行连接,我们只需要把localhost修改为%即可。1
2
3
4
5
6
7
8
9
10mysql> use mysql;
Database changed
mysql> select user,password,host from user;
+------+-------------------------------------------+----------------+
| user | password | host |
+------+-------------------------------------------+----------------+
| root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | localhost |
| root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | 127.0.0.1 |
| root | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B | ::1 |
+------+-------------------------------------------+----------------+1
update user set host="%" where host="localhost";
解除配置文件只允许本地连接的限制
找到my.conf(一般在/etc/my.conf或/etc/mysql/my.conf,版本不同会造成差异),将下面的代码注释掉。1
bind-address = 127.0.0.1
解除linux对端口的限制
前面两个问题其实大部分时候都会注意到,这最后一个可真是困扰了我好久(菜)。
首先是iptables,经过查阅资料我发现tables本身就是linux内核的一部分所以无法删除(我还天真的想把它删了)
所以我们要做的是直接解除iptables对所有端口的限制:
1 | iptables -P INPUT ACCEPT |
然后如果开启了ufw,也需要关闭:
1 | sudo ufw disable |
最后不要忘记重启MySQL服务。