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

MySQL表檢查與修復權威指南:CHECK TABLE、REPAIR TABLE 與 myisamchk 實戰

     編輯:MySQL 資料庫相關知識

預防體系:四大基石構建數據安全防線

  1. 制定並定期演練備份/恢復計劃
  2. 強制啟用二進制日志(開銷<1%,無理由關閉)
  3. 定期CHECK TABLE主動發現損壞
  4. 異地多介質存儲備份文件(分離數據目錄與備份目錄到不同磁盤)

服務器端在線維護:首選方案

CHECK TABLE / REPAIR TABLE 由Server協調鎖控制,自動處理讀寫一致性,無需人工干預鎖管理,適用於生產環境在線維護。

離線深度維護:myisamchk 進階用法

適用場景:嚴重損壞需深度修復、服務器無法啟動、需極致性能修復大表。核心風險:繞過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重新加載索引文件,否則查詢可能使用舊索引
  • 避免混用:Server端REPAIR TABLE與myisamchk --recover勿交替使用,元數據可能不一致
  • InnoDB表禁用myisamchk:僅適用MyISAM,InnoDB損壞需依賴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,支持表級並行,是自動化維護首選工具。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved