CHECK TABLE主動發現損壞CHECK TABLE / REPAIR TABLE 由Server協調鎖控制,自動處理讀寫一致性,無需人工干預鎖管理,適用於生產環境在線維護。
適用場景:嚴重損壞需深度修復、服務器無法啟動、需極致性能修復大表。核心風險:繞過Server直接操作文件,必須人工協調鎖。
# 會話1:獲取只讀鎖並刷新
mysql> USE db_name;
mysql> LOCK TABLE tbl_name READ;
mysql> FLUSH TABLE tbl_name;
# 會話2:執行檢查(保持會話1不退出)
$ myisamchk tbl_name
# 會話1:釋放鎖
mysql> UNLOCK TABLES;
# 會話1:獲取寫鎖並刷新
mysql> LOCK TABLE tbl_name WRITE;
mysql> FLUSH TABLE tbl_name;
# 會話2:執行修復(建議先備份數據文件)
$ myisamchk --recover tbl_name
# 會話1:刷新使Server感知新索引 → 釋放鎖
mysql> FLUSH TABLE tbl_name;
mysql> UNLOCK TABLES;
mysql> FLUSH TABLES WITH READ LOCK;
-- 執行文件級備份(cp/rsync/LVM快照)
mysql> UNLOCK TABLES;
此鎖阻塞所有寫操作,但允許讀查詢,適合獲取一致性文件級備份。
.MYD/.MYI/.frm三件套完整複製FLUSH TABLE:通知Server重新加載索引文件,否則查詢可能使用舊索引REPAIR TABLE與myisamchk --recover勿交替使用,元數據可能不一致innodb_force_recovery或備份恢復# crontab 示例:每周日凌晨低峰檢查核心表
0 3 * * 0 mysqlcheck --check --databases core_db --user=root --password=xxx > /var/log/mysqlcheck.log 2>&1
mysqlcheck封裝了CHECK/REPAIR/ANALYZE/OPTIMIZE,支持表級並行,是自動化維護首選工具。