mysql远程连接 | Nobilta's Blog
0%

mysql远程连接

今天记录一个困扰了我很久,每次都是莫名其妙发生又莫名其妙解决的问题:当使用navicat连接远程数据库时无法连接(错误代码2003或其他)问题的简单分析和解决方案。

当远程连接mysql数据库连接失败时,一般分为几种情况:

  • 未授予远程账号使用root连接的权限
  • 在配置文件中限定了只有本地IP可以连接
  • Linux系统防火墙对3306端口(或其他指定端口)进行了限制

    授予远程账号访问权限

    在终端登陆mysql,选择mysql数据库之后查询user表中的host信息
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    mysql> 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 |
    +------+-------------------------------------------+----------------+
    可以看到当用户为root时,只有本地账户可以进行连接,我们只需要把localhost修改为%即可。
    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
2
3
4
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -F

然后如果开启了ufw,也需要关闭:

1
sudo ufw disable

最后不要忘记重启MySQL服务。

您的支持将鼓励我继续创作!