.MYD, .MYI, .frm 到安全位置log-bin 與定期 mysqldump 備份mysql 系統用戶操作,避免檔案權限錯亂| 工具 | 適用引擎 | 檔案後綴 |
|---|---|---|
myisamchk |
MyISAM | .MYD (數據), .MYI (索引) |
isamchk |
ISAM (舊版) | .ISD, .ISM |
現代環境幾乎全為 MyISAM/InnoDB,重點掌握 myisamchk。
| 模式 | 指令 | 特點 | 適用場景 |
|---|---|---|---|
| 標準檢查(預設) | myisamchk tbl_name |
快,發現 99.99% 錯誤 | 日常巡檢、首輪排查 |
| 中等檢查 | myisamchk -m tbl_name |
速度/深度折中 | 較少使用 |
| 擴展檢查(深度) | myisamchk -e tbl_name |
逐行驗證索引指向,極慢 | 懷疑數據檔損壞、標準檢查無錯但業務異常 |
常用組合:myisamchk -e -i tbl_name(深度檢查+統計資訊)
# 當前資料庫目錄下所有表
myisamchk *.MYI
# 指定路徑
myisamchk /var/lib/mysql/db_name/*.MYI
# 所有資料庫(Linux)
myisamchk /var/lib/mysql/*/*.MYI
# 1. 快速修復(僅修復索引樹)
myisamchk --recover --quick tbl_name
# 2. 標準修復(重建索引,保留數據)
myisamchk --recover tbl_name
# 3. 強力修復(嘗試恢復數據行,極慢)
myisamchk --safe-recover tbl_name
# 4. 強制修復(覆蓋臨時檔,慎用)
myisamchk --recover --force tbl_name
# 僅檢查
mysql -e "LOCK TABLES tbl READ; FLUSH TABLES;"
myisamchk tbl
mysql -e "UNLOCK TABLES;"
# 修復(需寫鎖 + 備份 + 刷新)
mysql -e "LOCK TABLES tbl WRITE; FLUSH TABLES;"
cp tbl.* /backup/
myisamchk --recover tbl
mysql -e "FLUSH TABLES; UNLOCK TABLES;"
innodb_force_recovery = 1..6 分級導出數據,重建表。innochecksum 校驗頁面檢查和,mysqlcheck --check --all-databases 統一介面。MyISAM 表損壞不可怕,關鍵在於備份優先、分級檢查、標準修復、線上協議。生產環境強烈建議遷移至 InnoDB,享受 ACID 與自動崩潰恢復。