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

使用 myisamchk 進行 MyISAM 表崩潰恢復完整流程

     編輯:MySQL 資料庫相關知識

MyISAM 表三文件結構

  • tbl_name.frm:表定義
  • tbl_name.MYD:數據文件
  • tbl_name.MYI:索引文件

數據/索引文件最易損壞。常見原因:mysqld 寫入中被殺、斷電、硬件故障。

myisamchk 工作原理

  1. 逐行複製 .MYD 建立臨時文件
  2. 修復完成後刪除舊 .MYD,重命名新文件
  3. --quick:不動 .MYD,只重建 .MYI,自動檢測數據損壞則放棄
  4. --quick --quick:嘗試修改 .MYD 修復(如重複鍵),磁盤空間極小時使用,操作前必備份

檢查與修復命令分級

級別命令適用場景
常規檢查myisamchk tbl_name
myisamchk -s tbl_name(靜默)
日常巡檢,發現 99.99% 錯誤
深度檢查myisamchk -e tbl_name(extend)逐鍵驗證行指針,大表耗時長,-v 顯示前 20 錯誤
標準修復myisamchk -r tbl_name(recover)重建索引,修復數據
快速修復myisamchk -r -q tbl_name僅重建索引,假設數據完好
強力修復myisamchk -r -q -q tbl_name極度缺磁盤空間,嘗試修復數據錯誤

完整恢復流程

  1. 停止 mysqld(或 FLUSH TABLES WITH READ LOCK)
  2. 備份 .frm/.MYD/.MYI 三文件
  3. 執行 myisamchk -r tbl_name
  4. 若失敗,嘗試 myisamchk -r -q tbl_name
  5. 仍失敗,myisamchk -r -q -q tbl_name(前提已備份)
  6. 修復完成,重啟 mysqld 驗證

預防建議

  • 頻繁崩潰必須排查根因(硬件、內核、mysqld bug)
  • 生產環境優先用 InnoDB 享受 Crash Recovery
  • 定期 CHECK TABLE / myisamchk -s 巡檢
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved