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

MySQL MyISAM 表損壞:原因、症狀、預防與三種修復方案

     編輯:MySQL 資料庫相關知識

一、常見損壞原因

  1. 服務器斷電/強制關機,mysqld 寫入時被殺掉
  2. 磁盤壞軌/RAID 降級
  3. 作業系統死機
  4. MySQL 自身 Bug

二、典型症狀

  • Incorrect key file for table: '...'. Try to repair it
  • 查詢返回不完整或找不到行
  • Table '...' is marked as crashed and should be repaired
  • Can't open file: '×××.MYI' (errno: 145)

三、預防措施

  1. 定期 CHECK TABLE / mysqlcheck / myisamchk
  2. 大量寫入後執行 OPTIMIZE TABLE 整理碎片
  3. 關機前 systemctl stop mysqld,禁用 kill -9
  4. 配置 UPS 電源、RAID 冗餘、專用 DB 服務器
  5. 升級至穩定版 MySQL,修補已知 Bug

四、三種修復方案 (按場景選擇)

方案 A:SQL 內建修復 (mysqld 運行中)

CHECK TABLE tbl_name;
REPAIR TABLE tbl_name;
CHECK TABLE tbl_name;  -- 驗證

方案 B:mysqlcheck 批量修復 (mysqld 運行中)

mysqlcheck -A -r -u root -p   # 所有庫修復
mysqlcheck --all-databases -r -u root -p

方案 C:myisamchk 離線深度修復 (mysqld 停止)

# 必須先停庫
mysqladmin -u root -p shutdown

# 檢查
myisamchk /path/to/tbl_name.MYI
# 修復 (-o 安全修復, -f 強制)
myisamchk -of /path/to/tbl_name.MYI

# 開機自檢腳本 (rc.local)
[ -x /var/lib/mysql/mysql.sock ] && myisamchk -of /var/lib/mysql/*/*.MYI
離線修復務必確認 mysqld 已完全停止,否則可能造成二次損壞。

快速定位問題表

SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE IS NULL;

或查看事件日誌、phpMyAdmin「使用中」標記。

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