连接远程mysql提示connection refused,基本上要排查的地方就三个,首先是防火墙是否开放了3306端口,其次数据库配置文件是否绑定到了127.0.0.1,最后检查用户权限,host是否是%,按照以上流程问题迎刃而解。
本人mysql在Ubuntu上,其他系统此操作雷同。
防火墙是否开放
判断是否开启防火墙
开放防火墙3306端口
确认3306端口是开放
1 2 3 4
| netstat -an | grep 3306
# 结果: tcp6 0 0 :::3306 :::* LISTEN
|
数据库是否绑定127.0.0.1
修改mysql配置文件,注释bind-address=127.0.0.1。
1
| sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
|
重启Ubuntu再次查看3306状态。
用户授权所有连接
可以尝试使用telnet测试远程端口是否能联通
1
| telnet msyql所在服务器ip 3306
|
我这里是可以联通的,但是数据库还是连接不上去的话那就是用户授权的问题了
切换数据库并创建用户
1 2
| use mysql create user 'tony'@'localhost' identified by '123456';
|
授权
改表法
1
| UPDATE user SET Host = ‘%’ WHERE User = ‘tony’ AND Host=’localhost’;
|
授权法
1
| grant all privileges on mydatabase.* to 'tony'@'%'; //%表示任何ip都可以访问到 all privileges 表示所有权限
|
表示给tony用户mydatabase数据库的输有权限,并支持所有连接
授权生效
总结,基本上数据库连不上就排查这三步,相信绝对能解决你的问题。