概述
今天遇到了这样一个有点奇葩的问题,再阿里云服务器上部署了Mysql服务,再使用NaviCat的过程中链接不上,connect to address IP地址: Operation timed out
,最后是服务器防火墙的问题。
查看Mysql服务/端口
1.查看Mysql是否启动,ps aux | grep mysql
网络监听是否正常,netstat -tunlp
查看3306端口网络监听是否正常,都正常。
在这里补充一句,不是tcp/tcp6协议的原因,tcp6是向下兼容tcp协议的,:::3306
和0.0.0.0:80
没有关系,出现在列表里就可以表示端口已经启动监听服务了。
查看阿里云安全组
2.查看服务器的安全组配置是否正确,3306的端口也存在,为了打消疑虑,出方向和入方向都把3306添加到了安全组里,尝试后还是不通。
$ telnet ip地址 3306
Trying ip地址...
telnet: connect to address ip地址: Operation timed out
telnet: Unable to connect to remote host
Mysql的远程权限
3.开启Mysql的远程权限,username
是你自己的用户名,host修改成%
表示任何ip都可以访问,这个ip后期要限制一下。
update mysql.user set Host='%' where User='username';
也可以设置设置username用户密码
update user set plugin='mysql_native_password',authentication_string=password('123456') where user='username';
执行完,要刷新权限,刷新权限的作用是同步正在连接中的mysql进程,如果想加强Mysql的权限管理也可以在phpmyadmin中【账户-root-Change password】随机生成,这样的密码更安全,刷新权限flush privileges;
防火墙
如果以上都尝试过,还不能解决问题,那只能是属于防火墙的问题了,systemctl status firewalld
查看防火墙,防火墙没有开启,具体步骤如下:
1、输入以下看mysql是否监听了3306: netstat -tulpen
2、执行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示FirewallD is not running。
3、通过systemctl status firewalld查看firewalld状态,发现当前是dead状态,即防火墙未开启。
4、通过systemctl start firewalld开启防火墙,没有任何提示即开启成功。
5、再次通过systemctl status firewalld查看firewalld状态,显示running即已开启了。
6、如果要关闭防火墙设置,可能通过systemctl stop firewalld这条指令来关闭该功能。(这一步不需要,谢谢。)
7、再次执行执行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示设置成功。
8、执行命令:firewall-cmd --zone=public --permanent --add-service=mysql
9、返回success。然后继续执行以下进行防火墙重启:systemctl restart firewalld
总结
但我遇到的一个问题非常诡异,当我重新打开防火墙的时候,NaviCat客户端可以正常连接,但是浏览器不能正常访问了,(我猜测开启防火墙需要把80端口也加入到防火墙)后来我又关闭了防火墙,使用安全组策略来管理端口,剩下的留着后续有时间再进行优化。