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

MySQL 資料庫修復實戰指南:MyISAM 與 InnoDB 故障排查七大場景

     編輯:MySQL 資料庫相關知識

整理自 Mike Peters 技術文章,涵蓋 MySQL 常見故障的七大修復場景,適用於重啟無效、表損壞、實例衝突、配置錯誤、系統表遺失、自增異常、連接數耗盡、InnoDB 嚴重損壞等情況。

0. 簡單重啟基準動作

/usr/local/mysql/bin/mysqladmin -uUSER -pPASS shutdown
/usr/local/mysql/bin/mysqld_safe &

1. MyISAM 表損壞修復

  • 單表:REPAIR TABLE tbl_name;
  • 全庫:mysqlcheck --all-databases -uUSER -pPASS -r
  • 自動修復:my.cnf 添加 myisam-recover=backup,force

2. 多實例衝突導致進程秒退

mysqladmin -uUSER -pPASS shutdown
killall mysql; killall mysqld
# 再啟動,確保單實例

3. InnoDB 日誌配置不可隨意變更

以下參數一經初始化嚴禁修改,否則實例無法啟動:

datadir, innodb_data_home_dir, innodb_data_file_path,
innodb_log_group_home_dir, innodb_log_files_in_group, innodb_log_file_size

4. mysql.host 系統表遺失

/usr/local/bin/mysql_install_db  # 重建系統表

5. MyISAM 自增計數器錯亂

SELECT MAX(id) FROM tbl_name;
ALTER TABLE tbl_name AUTO_INCREMENT = max_id + 1;

6. 連接數耗盡無法登入

  1. 停庫:mysqladmin shutdown 或 killall mysqld
  2. 調大 max_connections(專用 DB 建議 200+)、wait_timeout=100
  3. 緊急維護:臨時改 port 繞過應用連接,修復後改回

7. InnoDB 表嚴重損壞導致實例無法啟動 (核心難點)

症狀:錯誤日誌顯示 InnoDB recovery 失敗,實例拒絕啟動。

標準修復六步法:

  1. my.cnf 添加 innodb_force_recovery = 4 (1-6 遞增嘗試,4 通常足夠)
  2. 啟動實例(唯讀模式,忽略 INSERT/UPDATE)
  3. 全量導出:mysqldump --force --compress --triggers --routines --create-options -uUSER -pPASS --all-databases > /backup/alldb.sql
  4. 停庫,刪除數據目錄,mysql_install_db 重建系統表
  5. 移除 innodb_force_recovery,正常啟動
  6. 導入備份:mysql -uUSER -pPASS --compress < /backup/alldb.sql,最後 mysqladmin flush-privileges
生產環境強烈建議雙主 (Master-Master) 架構,單點故障可秒級切換,避免走到第 7 步。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved