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

MySQL 維護安裝完整指南:myisamchk 表檢查修復優化、定期維護排程、崩潰恢復流程與日誌管理

     編輯:MySQL 資料庫相關知識

myisamchk 核心工具

專為 **MyISAM 表** (.MYD 資料、.MYI 索引) 設計的離線檢查/修復/優化工具。ISAM 表請用 isamchk。

基本調用語法

myisamchk [options] tbl_name[.MYI]
  • 可指定多個表、使用萬用字元 *.MYI、跨資料庫 /path/to/datadir/*/*.MYI。
  • 無參數執行 = 基本檢查。

關鍵選項分類

類別選項功能
檢查模式-c / --check基本檢查 (預設),找出 99.99% 錯誤
-e / --extend-check徹底檢查 (逐列驗證索引指向),極慢
-i / --information顯示統計資訊
-d / --description顯示表描述 (欄位、索引、儲存格式等)
修復模式-r / --recover標準恢復,修復幾乎所有損壞 (含重建索引)
-q / --quick快速恢復,**不觸碰 .MYD 資料檔**,僅重建索引
-q -q雙重 quick,嘗試修改 .MYD 解決重複鍵等錯誤 (磁碟空間不足時用)
-o / --safe-recover安全恢復 (舊演算法),較慢但能處理 -r 失敗的極端情況
-f / --force覆蓋舊暫存檔,檢查發現錯誤自動轉 -r 修復
-u / --unpack解壓 myisampack 壓縮表
優化/分析-a / --analyze分析鍵值分布,優化 JOIN 順序選擇
-S / --sort-index索引樹塊高到低排序,加速範圍掃描
-R N / --sort-records=N依第 N 個索引排序資料,加速該索引的 SELECT/ORDER BY
-k N / --keys-used=N僅更新前 N 個索引,其餘停用 (加速大量 INSERT)
-l / --no-symlinks修復時不跟隨符號連結

記憶體配置 (關鍵效能參數)

# 32MB 以上記憶體建議
myisamchk -O sort_buffer_size=16M -O key_buffer_size=16M \
    -O read_buffer_size=1M -O write_buffer_size=1M ...
  • sort_buffer_size:排序緩衝,對修復/優化影響最大。
  • key_buffer_size:索引緩衝。
  • TMPDIR:指向大磁碟分區,避免記憶體檔案系統導致 OOM。

定期維護排程建議

啟動時檢查

在 safe_mysqld 啟動腳本加入:檢查過去 24 小時修改過的表,或比 .pid 檔新的表。

Cron 定期任務

# 每週日凌晨 0:35 檢查所有表 (安靜模式,僅報錯)
35 0 * * 0 /usr/local/mysql/bin/myisamchk -s /var/lib/mysql/*/*.MYI

TcX 實務:數年無非硬體故障損壞,每週一次足夠。建議新系統前期每晚檢查最近 24h 修改的表。

崩潰恢復標準流程 (4 階段)

階段操作適用情況
1. 檢查myisamchk *.MYI 或 -e *.MYI識別損壞表,僅修復報錯者
2. 簡單修復① -r -q 快速恢復
② 失敗則備份 .MYD → -r 完整恢復
③ 失敗則 --safe-recover
索引損壞、資料檔完整
3. 困難修復① 移走 .MYD
② mysql> DELETE FROM tbl 重建空表
③ 複製舊 .MYD 回新表
④ 執行 -r -q
索引檔前 16KB 損壞/遺失
4. 極度困難① 從備份還原 .frm → 回階段 3
② 無備份則在別庫建同結構表,複製 .frm/.MYI 回來 → 回階段 2
.frm 定義檔也損壞 (極罕見)

表優化 (消除碎片)

myisamchk -r tbl_name  # 恢復模式即含優化
# 或 SQL: OPTIMIZE TABLE tbl_name (較易用但較慢)

日誌檔維護

  • mysqladmin flush-logs 或 FLUSH LOGS:切換新日誌檔。
  • 更新日誌 (--log-update):自動產生序號檔 (.001, .002...),舊檔可備份刪除。
  • 一般日誌 (--log):mv mysql.log mysql.old; mysqladmin flush-tables; 備份刪除 mysql.old。
  • RedHat RPM 安裝含 mysql-log-rotate 腳本,配合 cron 自動輪替。

表資訊解讀重點 (myisamchk -d -v 輸出)

  • Keyblocks used:索引塊使用率,接近 100% 表需重組。
  • Packed:共用前綴壓縮比例 (CHAR/VARCHAR/DECIMAL 有效)。
  • Max levels:B-tree 深度,大表較深。
  • Blocks/Record:平均碎片塊數,**固定格式=1**,動態格式應盡量接近 1,過大需重組。
  • Deleted blocks/data:已刪除空間,優化可回收。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved