Ubuntu 上 MySQL 连不上的排查与修复
一 快速自检
sudo systemctl status mysql,若未运行则启动:sudo systemctl start mysql。mysql -u your_username -p -h localhost。mysql -u your_username -p -h <服务器IP>;先用网络工具测试端口:nc -vz <服务器IP> 3306 或 telnet <服务器IP> 3306。sudo tail -f /var/log/mysql/error.log。二 常见原因与对应修复
sudo systemctl restart mysql,若仍失败,查看日志 sudo tail -f /var/log/mysql/error.log 获取具体报错并据此修复(如权限、目录、配置错误等)。sudo ufw status 查看;sudo ufw allow 3306/tcp 放行端口;云服务器还需在安全组放通 3306/TCP。/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf,在 [mysqld] 中确保 bind-address = 0.0.0.0(远程访问需要),端口为 3306;修改后重启:sudo systemctl restart mysql。GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;GRANT ALL PRIVILEGES ON *.* TO 'your_username'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION;FLUSH PRIVILEGES;mysqladmin -u root -h <服务器IP> flush-hosts,然后重试连接。sudo mkdir -p /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld,重启服务后再试。三 配置文件与日志定位
mysql --help | grep "Default options" -A 1 查看;Ubuntu 常见主配置为 /etc/mysql/my.cnf,实际参数常在 /etc/mysql/mysql.conf.d/mysqld.cnf 的 [mysqld] 段。bind-address、port 等参数后,务必重启:sudo systemctl restart mysql。mysql -e "SHOW VARIABLES LIKE 'bind_address';"、mysql -e "SHOW VARIABLES LIKE 'port';"。sudo tail -n 100 /var/log/mysql/error.log,可配合 journalctl -u mysql 查看服务日志。四 远程访问安全建议
'%' 开放到所有来源,生产环境应限制为应用服务器的固定 IP。五 一键排查命令清单
sudo systemctl status mysqlmysql -u root -p -h localhostsudo ufw status;sudo ufw allow 3306/tcpnc -vz <服务器IP> 3306 或 telnet <服务器IP> 3306mysql --help | grep "Default options" -A 1sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf(检查 bind-address、port)sudo systemctl restart mysqlmysql -e "SHOW VARIABLES LIKE 'bind_address';"mysql -e "SHOW VARIABLES LIKE 'port';"mysql -u root -p -e "GRANT ALL PRIVILEGES ON *.* TO 'app'@'应用IP' IDENTIFIED BY '强密码' WITH GRANT OPTION; FLUSH PRIVILEGES;"sudo tail -n 100 /var/log/mysql/error.logjournalctl -u mysqlmysqladmin -u root -h <服务器IP> flush-hosts