温馨提示×

ubuntu上mysql服务启动失败怎么办

小樊
36
2025-12-12 08:33:50
栏目: 云计算

Ubuntu 上 MySQL 启动失败的排查与修复

一 快速定位

  • 查看服务状态与最近日志,获取明确报错关键词:
    • 命令:sudo systemctl status mysqlsudo journalctl -xeu mysqlsudo tail -n50 /var/log/mysql/error.log
  • 常见关键词与含义对照:
    • Permission denied(/var/run/mysqld 或 /var/log/mysql 权限不足)
    • Bind on unix socket(套接字目录权限或已有实例占用)
    • Address already in use(端口 3306 被占用)
    • InnoDB: Operating system error(磁盘空间或 InnoDB 恢复失败)
    • Unit mysql.service not found(未安装或安装损坏)

二 高频原因与对应修复

  • 配置错误(/etc/mysql/my.cnf 或 /etc/mysql/mysql.conf.d/*.cnf)
    • 处理:逐项核对配置,修正语法/路径冲突;必要时先备份后恢复默认配置再逐步加回自定义项。
  • 数据目录权限不正确
    • 处理:sudo chown -R mysql:mysql /var/lib/mysql,必要时 sudo chmod -R 755 /var/lib/mysql;确保 AppArmor/SELinux 未拦截(Ubuntu 常见为 AppArmor)。
  • 端口冲突(默认 3306
    • 处理:sudo netstat -tulnp | grep 3306 找到占用进程并停止,或在配置中更换端口后重启。
  • 套接字目录或日志目录权限问题
    • 处理:sudo chown -R mysql:mysql /var/run/mysqldsudo chown -R mysql:adm /var/log/mysql,确保日志文件可写。
  • 磁盘空间不足
    • 处理:df -h 检查分区使用率,清理不必要文件后重试启动。
  • 服务未安装或服务文件损坏
    • 处理:sudo apt update && sudo apt install --reinstall mysql-server;若提示 unit not found,先 sudo apt purge mysql-server 再安装。

三 逐步排查操作清单

  1. 获取明确错误:sudo systemctl status mysql && sudo tail -n50 /var/log/mysql/error.log
  2. 修正配置并验证:sudo nano /etc/mysql/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf),保存后 sudo systemctl restart mysql
  3. 修复权限:
    • 数据目录:sudo chown -R mysql:mysql /var/lib/mysql
    • 套接字目录:sudo chown -R mysql:mysql /var/run/mysqld
    • 日志目录:sudo chown -R mysql:adm /var/log/mysql
  4. 检查端口占用:sudo netstat -tulnp | grep 3306,释放或更换端口
  5. 检查磁盘:df -h,清理空间
  6. 仍未恢复:备份配置与数据后重装
    • sudo apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-*
    • sudo apt autoremove && sudo apt autoclean
    • sudo apt update && sudo apt install mysql-server
  7. 启动并验证:sudo systemctl start mysql && sudo systemctl status mysql

四 常见报错与修复要点

  • Failed to start mysql.service: Unit mysql.service not found
    • 含义:未安装或服务文件缺失;处理:安装或重装 mysql-server,必要时 purge 后重装。
  • Can’t start server: Bind on unix socket: Permission denied
    • 含义:/var/run/mysqld 权限不足或目录不存在;处理:sudo chown -R mysql:mysql /var/run/mysqld,必要时创建目录并赋权。
  • cannot create /var/log/mysql/error.log: Permission denied
    • 含义:日志目录/文件不可写;处理:sudo chown -R mysql:adm /var/log/mysql,清理或重建 error.log 后重试。
  • Address already in use
    • 含义:3306 被占用;处理:停掉占用进程或更改 MySQL 端口并重启。
  • InnoDB: Operating system error … No space left on device
    • 含义:磁盘满或 InnoDB 恢复失败;处理:释放磁盘空间,必要时先备份再执行修复或重装。

0