首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 無法啟動五大常見故障診斷與修復手冊

     編輯:MySQL 資料庫相關知識

核心原則:錯誤日誌是唯一真理

遇到啟動失敗,**第一動作**:查看錯誤日誌。位置通常在:

  • $datadir/hostname.err
  • /var/log/mysqld.log
  • /var/log/mysql/error.log
  • 系統日誌 journalctl -u mysqld 或 /var/log/messages

切勿只看「找不到 mysql.sock」等表面現象**,必須定位根因錯誤碼與堆疊。

故障一:目錄/文件權限錯誤 (高發)

mysqld_safe Starting mysqld daemon with databases from /usr/local/mysql/data
/usr/local/mysql/bin/mysqld_safe: line 107: /usr/local/mysql/data/host.err: Permission denied

排查修復

  1. 確認 datadir 擁有者:chown -R mysql:mysql /var/lib/mysql (或你的實際數據目錄)
  2. 確認目錄權限:chmod 750 /var/lib/mysql (目錄需 x 權限進入)
  3. 確認 log-error 指定的日誌文件目錄可寫。
  4. 若用非 root 用戶啟動,確保該用戶對所有相關目錄有讀寫權。

故障二:端口衝突 (3306 被佔用)

[ERROR] Can't start server: Bind on TCP/IP port: Address already in use
[ERROR] Do you already have another mysqld server running on port: 3306 ?

排查修復

  1. netstat -tlnp | grep :3306 或 ss -tlnp | grep :3306 找到佔用進程 PID。
  2. 若是另一個 MySQL 實例:systemctl stop mysqld 或 mysqladmin -u root -p shutdown 優雅停止。
  3. 若是其他進程:修改 my.cnf 中 port = 3307 避開,或殺掉無關進程。
  4. 檢查 bind-address 配置,確保監聽正確 IP (0.0.0.0 或具體內網 IP)。

故障三:InnoDB 配置不匹配 (修改參數後未清理舊文件)

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 134217728 bytes!
[ERROR] Plugin 'InnoDB' init function returned error.

原因

修改了 innodb_log_file_size 但舊的 ib_logfile0/1 仍存在,尺寸不符導致啟動拒絕。

修復 (數據零風險)

  1. 停止 MySQL:systemctl stop mysqld
  2. 備份舊日誌:mv /var/lib/mysql/ib_logfile* /tmp/
  3. 啟動 MySQL:InnoDB 會按新配置自動創建新日誌文件。
  4. 驗證無誤後刪除備份。

同理:innodb_data_file_path 尺寸變更、innodb_page_size 變更均需清理對應文件並全量備份恢復,操作風險極大,非必要勿動。

故障四:系統庫未初始化 (全新安裝/數據目錄為空)

[ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.

修復

# MySQL 5.7 / 8.0
mysqld --initialize --user=mysql --datadir=/var/lib/mysql
# 或
mysqld --initialize-insecure --user=mysql --datadir=/var/lib/mysql  # 生成隨機 root 密碼或無密碼

# MySQL 5.6 及之前
mysql_install_db --user=mysql --datadir=/var/lib/mysql

初始化後務必執行 mysql_secure_installation 設置 root 密碼、移除匿名用戶、禁止遠程 root 登錄、移除 test 庫。

故障五:低權限用戶啟動權限/SELinux/AppArmor 限制

  • 確認啟動腳本/系統服務配置的 User/Group 與數據目錄擁有者一致。
  • CentOS/RHEL 7+ 檢查 SELinux:getenforce,若為 Enforcing,需設置布爾值 setsebool -P mysql_connect_any 1 或調整文件上下文 restorecon -R /var/lib/mysql。
  • Ubuntu/Debian 檢查 AppArmor:aa-status | grep mysql,若有 deny 規則,調整 /etc/apparmor.d/usr.sbin.mysqld 添加數據目錄權限。

進階診斷技巧

  1. 前台調試模式:mysqld --user=mysql --console --datadir=/var/lib/mysql 直接在終端輸出啟動日誌,一目了然。
  2. 核心轉儲分析:啟動 core_file=ON,配合 gdb 分析崩潰堆疊。
  3. strace 系統調用追蹤:strace -f mysqld ... 2>&1 | grep -E 'open|access|stat|chdir|ENOENT|EACCES' 定位文件訪問失敗。

總結:啟動失敗排查清單

  1. 看錯誤日誌 (最後 50 行)
  2. 查權限
  3. 查端口
  4. 查 InnoDB 日誌/數據文件尺寸匹配
  5. 查系統庫是否初始化
  6. 查 SELinux/AppArmor
  7. 前台調試模式複現
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved