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

Linux MySQL 安裝啟動失敗「mysqld 已死,但是 subsys 被鎖」根因分析與標準化排查流程

     編輯:MySQL 資料庫相關知識

錯誤現象

service mysqld start
service mysqld status
# 輸出:mysqld 已死,但是 subsys 被鎖

含義:MySQL 進程啟動後隨即退出,但啟動腳本留下的鎖檔 (/var/lock/subsys/mysqld) 未清理,導致 status 誤判為「已死但鎖存在」。

核心根因:InnoDB 系統表空間配置缺失

錯誤日誌 (/var/log/mysqld.log) 關鍵輸出:

Cannot initialize InnoDB as 'innodb_data_file_path' is not set.
If you do not want to use transactional InnoDB tables, add a line
skip-innodb
to the [mysqld] section...
If you want to use InnoDB tables, add to the [mysqld] section, for example,
innodb_data_file_path = ibdata1:10M:autoextend

原因:MySQL 5.5+ 預設啟用 InnoDB,但 my.cnf 缺少 innodb_data_file_path,導致 InnoDB 初始化失敗,進程退出。

標準化排查 11 步法 (通用於所有啟動失敗)

  1. 看日誌:cat /var/log/mysqld.log (或 journalctl -u mysqld),找 ERROR/FATAL
  2. 停服務:service mysqld stop
  3. 查殘留進程:ps aux | grep mysqld
  4. 殺殘留進程:kill -9 PID
  5. 備份/清理資料目錄 (謹慎!僅全新安裝或確認無重要資料):mv /var/lib/mysql /var/lib/mysql.bak
  6. 檢查配置檔:cat /etc/my.cnf,對照官方範本
  7. 套用範本配置:cp /usr/share/mysql/my-small.cnf /etc/my.cnf (或 my-medium/large/huge)
  8. 初始化系統表:mysql_install_db --user=mysql --datadir=/var/lib/mysql (5.7+) 或 mysqld --initialize-insecure (8.0+)
  9. 設定開機自啟:chkconfig --level 345 mysqld on / systemctl enable mysqld
  10. 啟動服務:service mysqld start
  11. 再看日誌驗證:tail -f /var/log/mysqld.log

最小可用 my.cnf 範本 (解決本文問題)

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
symbolic-links=0

# InnoDB 必備配置 (解決本文核心報錯)
innodb_data_file_path = ibdata1:10M:autoextend
innodb_buffer_pool_size = 128M
innodb_log_file_size = 48M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1

# 基礎效能
max_connections = 200
thread_cache_size = 50
table_open_cache = 400
query_cache_type = 0
query_cache_size = 0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

常見變體與對應修正

日誌關鍵字根因修正
Can't create/write to file '/tmp/...'tmpdir 權限/空間/掛載問題修正 tmpdir、清理 /tmp、檢查 SELinux
Unknown/unsupported storage engine: InnoDB配置錯誤導致 InnoDB 未載入補全 InnoDB 配置、檢查 skip-innodb 未被開啟
Fatal error: Can't open and lock privilege tables系統表損壞/權限/路徑錯誤重新 mysql_install_db、檢查 datadir 擁有者
Address already in use3306 埠被佔用ss -ltnp | grep 3306 找佔用者、修改 port
Permission denieddatadir/log/error log 權限不對chown -R mysql:mysql /var/lib/mysql /var/log/mysqld.log

避坑指南:為什麼第 9 步通常就能解決?

因為多數「鎖殘留」問題本質是 配置缺失導致啟動失敗 → 鎖檔未清理。套用官方範本配置 + 初始化系統表,直接解決 90% 預設安裝場景的啟動失敗。若仍失敗,回到第 1 步看日誌,對症下藥。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved