您好,欢迎来到意榕旅游网。
搜索
您的当前位置:首页解决mysql无法远程连接的问题

解决mysql无法远程连接的问题

来源:意榕旅游网
解决mysql⽆法远程连接的问题

前⾔

最近开发中遇到⼀个问题,mysql在服务器本地可以登录,但是远程通过3306端⼝却不可以。这个问题困扰了我⼀周之久,终于在今天解决了。在解决的过程中试了很多的⽅法,遂记录下来,希望能给⼤家⼀些提⽰。

排查错误位置

客户端⽅⾯

⾸先通过ping命令对服务器进⾏测试,如果ping不通,则是⽹络的问题,本⽂中没有涉及这类问题的解决。

如果能ping通,再测试端⼝有没有问题。⾸先安装telnet, telnet是windows系统⾃带的,搜索\"启动或关闭Windows功能\", 找telnet客户端,勾选即可启动。在cmd中输⼊telnet {服务器IP} 3306, 如果不能正确连接,说明是端⼝设置的问题, 再试试22端⼝有没有问题,如果也有问题,就是服务器整体的端⼝设置有问题,如果只有3306有问题,那么就是3306端⼝、mysql的设置问题,继续往下测试。

服务器⽅⾯

针对只有3306端⼝不能连接的情况,有以下⼏种解决⽅法:

1. 修改配置⽂件,开启对其他ip地址的监听

输⼊命令netstat -ntpl |grep 3306 和 netstat -ntpl |grep 22, 查看端⼝的绑定情况正确情况下应为以下输出:

如果3306只绑定的本地端⼝,就会出现和上图不⼀致的输出。需要对其配置⽂件进⾏修改:

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

打开配置⽂件, 找到bind-address开头的⼀⾏,如果后⾯的ip地址是127.0.0.1,也就是服务器只会接收本地的连接请求,那么就需要改变此地址来指向外部的IP地址。例如,可以改为:

lc-messages-dir = /usr/share/mysqlskip-external-locking#

# Instead of skip-networking the default is now to listen only on# localhost which is more compatible and is not less secure.bind-address = 0.0.0.0

如果你的mysql版本是MySQL 8+,那么mysqld.cnf中可能不会包含bind-address这⼀⾏,应该像下⾯所⽰⽅法进⾏添加:

[mysqld]

pid-file = /var/run/mysqld/mysqld.pidsocket = /var/run/mysqld/mysqld.sockdatadir = /var/lib/mysql

log-error = /var/log/mysql/error.logbind-address = 0.0.0.0

修改完成后,保存并退出。重启mysql服务sudo systemctl restart mysql,使得配置⽂件的修改得以⽣效。

接下来再次回到客户端进⾏验证,如果能够telnet连接3306端⼝,说明配置成功,如果还是不能连接,进⼊下⼀步骤。

2. 关闭防⽕墙

Ubuntu默认的防⽕墙为ufw。防⽕墙的作⽤是管理⽹络规则,默认情况下打开防⽕墙是更好的选择, 但是这⾥为了排除debug时的影响,就先关闭⼀下。

查看防⽕墙状态sudo ufw status, 如果显⽰active, 就运⾏sudo ufw disable关闭。

3. 修改 iptables

iptables定义了⽹络访问规则,它⼯作在内核中,是⼀个⽹络过滤器。运⾏

sudo iptables -I INPUT -p tcp --dport 3306 -j ACCEPT

表⽰添加接收3306端⼝的规则。

-I INPUT将当前命令插⼊在filter链的第⼀位置。-p tcp表⽰添加tcp协议的扩展。--dport XX-XX:指定⽬标端⼝。

-j ACCEPT: 规定的动作,这⾥为接收。完成后,保存修改的配置sudo iptables-save。

然后再次在客户端⽤telnet进⾏测试,得到结果:说明连接3306端⼝成功了。(忽略这⾥的乱码)

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- yrrf.cn 版权所有 赣ICP备2024042794号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务