前言:
在基于Alibaba Cloud Linux 3/CentOS 操作系统通过 rpm、yum安装mysql8.0
sudo yum install mysql-community-server
根据指引配置账户密码后
sudo mysql_secure_installation
服务器本机已经可以 mysql -uroot -p 连接mysql(代表mysql服务正在运行)
然后本地尝试ssh远程连接mysql 遇到报错“ERROR 2003 (HY000): Can't connect to MySQL server on '39.99.39.25:3306' (60)” ,该报错提示我无法连接到mysql服务器;
排查思路:
1.检查mysql服务是否正在运行
如返回running 代表正常,fail失败可尝试systemctl start mysqld.service,如无法启动成功可查看mysql log :/var/log/mysql/ 下
systemctl status mysqld.service
2.检查当前ssh用户是否允许远程连接
输出中寻找ssh的用户是否有% 这代表拥有表操作权限和远程连接权限; 如果不存在 运行3
SHOW GRANTS FOR 'root'@'%';
3.mysql8.0 确认ssh账号是否存在并创建、授权远程连接
CREATE USER IF NOT EXISTS 'root'@'%' IDENTIFIED BY 'your password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
4.确认3306端口是否在运行监听
在输出中查看是否有 3306端口
netstat -tuln | grep 3306

5.确认3306的端口是否被防火墙允许放行
如果返回yes 代表3306端口被放行,no代表不允许(注:博主本机的是yes)
firewall-cmd --query-port=3306/tcp
6.防火墙允许3306端口放行
firewall-cmd --permanent --zone=public --add-port=3306/tcp
firewall-cmd --reload
7.查看mysql log
tail -f /var/log/mysqld.log (博主mysql8.0的log在这里)查阅log后也是没有任何问题,服务准备就绪,允许远程连接。
总结:
经过以上步骤全部排查后,本地还是无法远程连接mysql,包括服务器本地也无法远程mysql
“ERROR 2003 (HY000): Can't connect to MySQL server on '39.99.39.25:3306' (110)” -- 服务器
“ERROR 2003 (HY000): Can't connect to MySQL server on '39.99.39.25:3306' (60)” --本地
想到了内网/公网ip的事情,验证应用服务器内网IP是否可以telnet通3306 发现可以,那么!问题显而易见是因为阿里云控制台服务器防火墙配置,没有允许某些端口在当前公网/内网上对外使用;
在阿里云控制台添加防火墙模版》应用到实例后再次尝试telnet和远程连接发现可以,问题结束;
注:涉及到云服务器,开通端口都需要上服务器控制台设置,命令行内的并不会生效。