Ubuntu 上 MySQL 故障排查思路
一 快速定位路径
sudo systemctl status mysql,若未运行,先尝试 sudo systemctl start mysqlsudo tail -f /var/log/mysql/error.log,优先从日志尾部定位首次报错行top、free -h、df -h,排除 CPU/内存/磁盘 瓶颈sudo ufw status、sudo netstat -tulnp | grep 3306,确认 3306 端口与防火墙策略/etc/mysql/my.cnf、/etc/mysql/mysql.conf.d/mysqld.cnfbind-address(远程访问常见设置为 0.0.0.0)、port=3306sudo systemctl restart mysql,再次观察状态与日志输出二 常见故障与处理要点
| 症状 | 优先检查 | 快速修复 |
|---|---|---|
| 服务无法启动 Failed to start | systemctl status mysql、/var/log/mysql/error.log |
修正配置语法、释放磁盘空间、校正数据目录权限 |
| Can’t connect to local MySQL server through socket | 服务是否运行、socket 路径 | 启动服务;必要时创建目录并修正权限:sudo mkdir -p /var/run/mysqld && sudo chown mysql:mysql /var/run/mysqld |
| Access denied for user | 用户、主机、密码插件 | 重置密码:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES; 或使用 mysql_secure_installation |
| Host is blocked | 连接错误次数超限 | 刷新主机缓存:mysqladmin -u root -h your_mysql_server_ip flush-hosts |
| 端口被占用 | `netstat -tulnp | grep 3306` |
| 远程连不上 | bind-address、ufw、网络连通 |
将 bind-address=0.0.0.0,放行防火墙:sudo ufw allow 3306/tcp,并验证网络 |
| 表损坏 | 数据文件一致性 | 使用 mysqlcheck --all-databases --auto-repair 或引擎自带工具修复 |
| 配置错误 | 配置文件语法与路径 | 修正 /etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf 后重启 |
三 关键操作命令清单
sudo systemctl status|start|restart mysqlsudo tail -f /var/log/mysql/error.logtop、free -h、df -hsudo ufw status、sudo ufw allow 3306/tcpsudo netstat -tulnp | grep 3306mysql -u root -pALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; FLUSH PRIVILEGES;mysql_secure_installationmysqlcheck --all-databases --auto-repairsudo chown -R mysql:mysql /var/lib/mysqlsudo truncate -s 0 /var/log/mysql/error.log(谨慎,先备份)四 预防与优化建议
/etc/mysql/mysql.conf.d/mysqld.cnf 或 /etc/mysql/my.cnf,合理设置 innodb_buffer_pool_size(常设为内存的 50%–70%)、innodb_log_file_size=256M、max_connections 等参数mysql_secure_installation,定期审计用户权限与远程访问策略EXPLAIN 分析执行计划,配合 MySQL Tuner 与 Performance Schema 持续调优五 排障流程建议
/var/log/mysql/error.log 首条报错为锚点,逐条解决