Ubuntu 上 MySQL 连接问题的排查与修复
一 快速自检清单
sudo systemctl status mysql,若未运行则启动:sudo systemctl start mysql。nc -vz localhost 3306 或 telnet localhost 3306;远程测试 nc -vz <服务器IP> 3306。sudo ufw status,放行端口 sudo ufw allow 3306/tcp(云服务器还需在安全组放行 3306)。sudo tail -f /var/log/mysql/error.log。sudo systemctl restart mysql。二 常见错误与对应修复
systemctl status mysql 查看原因并修复,必要时 sudo systemctl restart mysql。sudo mkdir -p /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld,随后重启。sudo mysql_secure_installation 重置,或在 MySQL 中执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; FLUSH PRIVILEGES;。mysqladmin -u root -h <服务器IP> flush-hosts 清空主机缓存。GRANT ALL PRIVILEGES ON *.* TO 'your_user'@'%' IDENTIFIED BY 'your_password'; FLUSH PRIVILEGES;(生产环境请按最小权限原则细化授权)。bind-address 与端口配置正确,并已在防火墙/云安全组放行 3306。三 配置与权限关键点
bind-address = 127.0.0.1bind-address = 0.0.0.0(或注释掉该行)port = 3306 未被改动。sudo systemctl restart mysql。GRANT ALL PRIVILEGES ON *.* TO 'user'@'localhost' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'pwd'; FLUSH PRIVILEGES;四 一键排查命令示例
sudo systemctl status mysqlsudo ss -lntp | grep 3306 或 nc -vz localhost 3306sudo ufw statussudo ufw allow 3306/tcpnc -vz <服务器IP> 3306sudo tail -n 100 /var/log/mysql/error.logsudo systemctl restart mysqlmysql -u <用户> -p -h localhostmysql -u <用户> -p -h <服务器IP>