非正常關機 (斷電、kill -9、OOM Killer) 易導致 MyISAM 表標記為 crashed,系統庫 (mysql.host、mysql.user、mysql.db、mysql.plugin) 損壞會阻止 mysqld 啟動,錯誤日誌典型特徵:
Table './mysql/host' is marked as crashed and last (automatic?) repair failed
netstat -anp | grep mysqld、mysql -uroot -p 連線失敗。./mysql/host)。cd /var/lib/mysql/mysql (視 datadir 而定)。myisamchk -of table_name.MYI-o 最佳化、-f 強制修復。輸出 recovering (with keycache) 及 Data records: N 表示成功。host → user → db → plugin (依日誌報錯順序)。/usr/local/mysql/bin/mysqld_safe & → netstat -anp | grep 3306 → mysql -uroot -p 登入 → 網頁訪問正常。# 檢查所有 MyISAM 表
myisamchk *.MYI
# 自動修復所有損壞表
myisamchk -r -f *.MYI
# 僅檢查不修復
myisamchk -c *.MYI
# 修復並更新統計資訊
myisamchk -r -q *.MYI # 快速修復
myisamchk -r *.MYI # 完整修復
mysqladmin shutdown 或 systemctl stop mysqld。my.cnf 加入 myisam_recover_options=FORCE,BACKUP (啟動時自動檢查修復)。ALTER TABLE mysql.user ENGINE=InnoDB;mysqldump --all-databases --single-transaction --master-data=2 確保可時間點恢復。mysql:mysql,目錄 700,檔案 660。InnoDB 具備崩潰恢復能力 (Redo Log + Doublewrite Buffer),啟動時自動回滾未提交事務、重做已提交事務。若 Redo Log 損壞,需從備份恢復或重建實例。