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

MySQL 表損壞修復:Table is marked as crashed 完整解決方案

     編輯:MySQL 資料庫相關知識

錯誤現象

Table '.\dede_archives' is marked as crashed and last (automatic?) repair failed

表示 MyISAM 表 dede_archives 損壞,自動修復失敗。常見於突斷電、磁盤空間不足、進程被強制殺掉等異常情況。

修復方法一:phpMyAdmin 圖形介面 (最簡單)

  1. 登入 phpMyAdmin
  2. 選擇對應資料庫
  3. 勾選損壞的表 (會標記 "in use" 或 "crashed")
  4. 在「針對選定的表」下拉選單選擇 修復表 (Repair table)

修復方法二:命令行 myisamchk (適用獨立伺服器)

步驟 1:停止 MySQL 服務 (必須,避免數據不一致)

/etc/init.d/mysqld stop
# 或 systemctl stop mysqld

步驟 2:執行修復命令

myisamchk -r /usr/local/mysql/var/dede/dede_archives.MYI
  • -r:執行修復模式 (recover)
  • 路徑需指向具體的 .MYI 索引文件,**請根據實際 datadir 調整路徑**

步驟 3:啟動 MySQL 服務

/etc/init.d/mysqld start

進階修復選項 (嚴重損壞時)

嚴重損壞建議組合: myisamchk -r -q -f /path/to/table.MYI

Windows 環境下的操作

# 進入 MySQL bin 目錄
cd C:\Program Files\MySQL\MySQL Server 5.x\bin

# 停止服務
net stop mysql

# 執行修復 (路徑按實際調整)
myisamchk -r "C:\ProgramData\MySQL\MySQL Server 5.x\Data\dede\dede_archives.MYI"

# 啟動服務
net start mysql

預防措施與最佳實踐

  1. 定期備份: 使用 mysqldump 或 mysqlhotcopy (僅 MyISAM) 定期全量/增量備份
  2. 監控磁盤空間: 磁盤滿是導致表損壞的主因之一,設置告警
  3. 優雅關閉: 避免 kill -9 強制終止 MySQL 進程,使用 service mysqld stop
  4. 考慮遷移至 InnoDB: InnoDB 具備崩潰恢復能力 (redo/undo log),大幅降低表損壞風險
  5. 啟用自動檢查: 在 my.cnf 添加 myisam-recover-options=BACKUP,FORCE (MySQL 5.1+)

驗證修復結果

CHECK TABLE dede_archives;
# 或
mysqlcheck -c -u root -p dede dede_archives

輸出 status: OK 表示修復成功。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
參數用途
-r / --recover標準修復 (推薦首選)
-o / --safe-recover安全修復模式,較慢但能處理更多錯誤類型
-f / --force強制覆蓋臨時文件,配合 -r 或 -o 使用
-q / --quick快速修復,僅修復索引樹,不觸動數據文件