錯誤現象
Table '.\dede_archives' is marked as crashed and last (automatic?) repair failed
表示 MyISAM 表 dede_archives 損壞,自動修復失敗。常見於突斷電、磁盤空間不足、進程被強制殺掉等異常情況。
修復方法一:phpMyAdmin 圖形介面 (最簡單)
- 登入 phpMyAdmin
- 選擇對應資料庫
- 勾選損壞的表 (會標記 "in use" 或 "crashed")
- 在「針對選定的表」下拉選單選擇 修復表 (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
進階修復選項 (嚴重損壞時)
| 參數 | 用途 |
-r / --recover | 標準修復 (推薦首選) |
-o / --safe-recover | 安全修復模式,較慢但能處理更多錯誤類型 |
-f / --force | 強制覆蓋臨時文件,配合 -r 或 -o 使用 |
-q / --quick | 快速修復,僅修復索引樹,不觸動數據文件 |
嚴重損壞建議組合: 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
預防措施與最佳實踐
- 定期備份: 使用
mysqldump 或 mysqlhotcopy (僅 MyISAM) 定期全量/增量備份
- 監控磁盤空間: 磁盤滿是導致表損壞的主因之一,設置告警
- 優雅關閉: 避免
kill -9 強制終止 MySQL 進程,使用 service mysqld stop
- 考慮遷移至 InnoDB: InnoDB 具備崩潰恢復能力 (redo/undo log),大幅降低表損壞風險
- 啟用自動檢查: 在
my.cnf 添加 myisam-recover-options=BACKUP,FORCE (MySQL 5.1+)
驗證修復結果
CHECK TABLE dede_archives;
# 或
mysqlcheck -c -u root -p dede dede_archives
輸出 status: OK 表示修復成功。
- 上一篇文章: MySQL 自動化安裝腳本:Ubuntu 與 CentOS 64 位系統適用
- 下一篇文章: MySQL 存儲過程實現字符串分割 (SPLIT) 功能完整示例
Copyright ©
程式碼之家 All Rights Reserved