连接失败通常与服务状态、网络配置、权限设置相关,以下是逐步排查方案:
首先确认MySQL服务是否处于**active (running)**状态。使用以下命令:
sudo systemctl status mysqld
sudo systemctl start mysqld
sudo systemctl enable mysqld
MySQL默认使用3306端口,需确保防火墙允许该端口通过:
# 查看防火墙状态(CentOS 7+默认使用firewalld)
sudo firewall-cmd --state
# 若防火墙运行,开放3306端口(永久生效)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
sudo service iptables stop
编辑MySQL主配置文件(通常为/etc/my.cnf或/etc/mysql/my.cnf),找到[mysqld]部分,确保bind-address设置为0.0.0.0(允许所有IP连接)或服务器实际IP(仅允许特定IP连接):
[mysqld]
bind-address = 0.0.0.0 # 修改此项
# 确保没有skip-networking选项(若有则删除)
修改后重启MySQL使配置生效:
sudo systemctl restart mysqld
默认情况下,MySQL用户仅能从localhost连接。需为用户授予远程访问权限:
# 登录MySQL(本地连接)
mysql -u root -p
# 执行授权命令(替换username/password为目标用户名和密码)
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 刷新权限使更改立即生效
FLUSH PRIVILEGES;
%替换为目标IP(如192.168.1.100)。若以上步骤均无效,通过错误日志获取详细信息(日志路径通常为/var/log/mysqld.log):
# 查看最新日志(实时输出)
sudo tail -f /var/log/mysqld.log
# 或查看最近100行日志
sudo tail -n 100 /var/log/mysqld.log
日志中可能包含端口冲突、权限不足、配置文件语法错误等具体原因。
确保客户端与服务器之间的网络通畅:
# 测试服务器IP是否可达
ping <服务器IP>
# 测试3306端口是否开放
telnet <服务器IP> 3306 # 或使用nc命令:nc -zv <服务器IP> 3306
若MySQL无法启动,可能是3306端口被其他进程占用:
# 查看3306端口的占用进程
sudo netstat -tlnp | grep 3306
# 若占用进程非MySQL,停止该进程或修改MySQL端口(修改my.cnf中的port项)
通过以上步骤,可覆盖绝大多数MySQL连接失败的场景。若问题仍未解决,建议根据错误日志中的具体信息进一步排查。