Ubuntu 下 MySQL 启动失败的排查与修复
一 快速定位
- 查看服务状态与最近日志,获取明确报错关键词:
- 查看状态:sudo systemctl status mysql
- 查看错误日志:sudo tail -n 50 /var/log/mysql/error.log
- 常见关键词与含义:
- Permission denied / 权限被拒绝:多为数据目录或日志文件属主不对
- Address already in use / 地址已被占用:多为 3306 端口被占用
- InnoDB: Operating system error number 28 / No space left on device:磁盘空间不足
- mysqld: unknown variable / 未知变量:配置文件参数错误或不兼容
二 常见原因与对应修复
- 配置文件错误
- 检查主配置与片段:/etc/mysql/my.cnf、/etc/mysql/mysql.conf.d/mysqld.cnf
- 修正错误的参数(如 port、bind-address、datadir、pid-file、socket),保存后重启:sudo systemctl restart mysql
- 端口冲突
- 检查占用:sudo netstat -tulnp | grep 3306
- 处理占用进程或临时改用其他端口(在 mysqld.cnf 的 [mysqld] 段将 port=3306 改为 3307),再重启
- 数据目录权限
- 纠正属主与权限:sudo chown -R mysql:mysql /var/lib/mysql;必要时 sudo chmod -R 755 /var/lib/mysql
- 磁盘空间不足
- 查看分区:df -h
- 清理空间(如 sudo apt-get autoremove、sudo apt-get clean),再重启
- 残留进程占用
- 结束旧进程:ps -ef | grep mysql,对列出的 PID 执行 sudo kill ;随后 sudo systemctl restart mysql
- 套接字或 PID 文件路径异常
- 确认 /var/run/mysqld/mysqld.sock 存在,且 mysqld.cnf 中 socket 与 pid-file 路径正确一致
三 逐步操作清单
- 获取错误线索:sudo systemctl status mysql 与 sudo tail -n 50 /var/log/mysql/error.log
- 修正配置:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf(核对 port、bind-address、datadir、pid-file、socket)
- 处理端口:sudo netstat -tulnp | grep 3306,释放或更改端口后重启
- 修复权限:sudo chown -R mysql:mysql /var/lib/mysql;必要时 sudo chmod -R 755 /var/lib/mysql
- 清理空间:df -h → 清理后重启
- 清理残留进程:ps -ef | grep mysql → sudo kill → 重启
- 重启并验证:sudo systemctl restart mysql;确认 Active: active (running)
- 仍失败时:执行修复安装 sudo dpkg-reconfigure mysql-server-<版本>(按实际版本号),再重启
四 无法修复时的安全兜底
- 备份数据目录:sudo cp -a /var/lib/mysql /var/lib/mysql.bak_$(date +%F)
- 卸载并清理:sudo apt purge mysql-server mysql-client mysql-common;sudo rm -rf /var/lib/mysql /etc/mysql /var/log/mysql
- 重新安装:sudo apt update && sudo apt install mysql-server
- 启动并验证:sudo systemctl start mysql;确认 Active: active (running)
- 恢复数据:将备份中的业务库目录拷回 /var/lib/mysql,修正属主 sudo chown -R mysql:mysql /var/lib/mysql,再重启