温馨提示×

ubuntu下mysql启动失败怎么办

小樊
40
2025-11-16 15:46:05
栏目: 云计算

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 autoremovesudo apt-get clean),再重启
  • 残留进程占用
    • 结束旧进程:ps -ef | grep mysql,对列出的 PID 执行 sudo kill ;随后 sudo systemctl restart mysql
  • 套接字或 PID 文件路径异常
    • 确认 /var/run/mysqld/mysqld.sock 存在,且 mysqld.cnfsocketpid-file 路径正确一致

三 逐步操作清单

  1. 获取错误线索:sudo systemctl status mysqlsudo tail -n 50 /var/log/mysql/error.log
  2. 修正配置:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf(核对 port、bind-address、datadir、pid-file、socket
  3. 处理端口:sudo netstat -tulnp | grep 3306,释放或更改端口后重启
  4. 修复权限:sudo chown -R mysql:mysql /var/lib/mysql;必要时 sudo chmod -R 755 /var/lib/mysql
  5. 清理空间:df -h → 清理后重启
  6. 清理残留进程:ps -ef | grep mysqlsudo kill → 重启
  7. 重启并验证:sudo systemctl restart mysql;确认 Active: active (running)
  8. 仍失败时:执行修复安装 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-commonsudo 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,再重启

0