service mysql start 報錯:Starting MySQL.. ERROR! The server quit without updating PID file (/var/lib/mysql/localhost.localdomain.pid).datadir:cat /etc/my.cnf | grep datadir → /var/lib/mysqlibdata1(共享表空間)、**ib_logfile0/1(Redo Log)**ib_logfile*,重啟 → 成功2013-08-04 13:48:22 760 [ERROR] InnoDB: Attempted to open a previously opened tablespace. Previous tablespace em/temp uses space ID: 2 at filepath: .\em\temp.ibd. Cannot open tablespace mysql/innodb_index_stats which uses space ID: 2 at filepath: .\mysql\innodb_index_stats.ibd
em/temp.ibd 與 mysql/innodb_index_stats.ibdibdata1(共享表空間核心檔),MySQL 重建新 ibdata1 時,space ID 分配邏輯重置,導致舊 .ibd 檔的 space ID 與新系統表衝突ibdata1 存儲:資料字典、Undo Log、Change Buffer、雙寫緩衝——刪除即意味著所有 InnoDB 表元數據丟失rm -rf /var/lib/mysql/em 等)錯誤日誌出現:
Error: Table "mysql"."innodb_table_stats" not found. InnoDB: Recalculation of persistent statistics requested for table "mydb"."mytable" but the required persistent statistics storage is not present or is corrupted. Using transient stats instead.
原因:mysql.innodb_table_stats、innodb_index_stats 系統表遺失(隨 ibdata1 重建而丟)。
修復參考:Percona 部落格修復腳本,核心步驟:
錯誤現象 真實原因 核心對策 PID file not updated 實為 InnoDB 內部錯誤導致啟動中止 必看 log-error指向的錯誤日誌刪 ib_logfile 短暫好轉 Redo log 損壞只是表象,實為資料字典衝突 別只治標,要查 ERROR 日誌 space ID 衝突 歷史誤刪 ibdata1,重建後 ID 分配重置 絕不手動刪 ibdata1,遷移用 mysqldump 持久統計缺失 系統統計表隨 ibdata1 遺失 重建系統表 + ANALYZE TABLE 運維鐵律
- 任何異常,第一時間看錯誤日誌(
log-error路徑)- ibdata1 是 InnoDB 生命線,備份策略必須包含它(
xtrabackup/mysqldump+--single-transaction)- 遷移/升級用 mysqldump,禁止直接複製 datadir 檔案
- 監控告警:
mysqld.log出現[ERROR]即推送小結
「PID file 未更新」只是表象,真兇藏在
mysqld.log的InnoDB: [ERROR]裡。誤刪 ibdata1 → space ID 衝突 → 系統表遺失 → 持久統計缺失 是典型連環炸。養成「看日誌、不動 ibdata1、用邏輯備份」三習慣,能避開 99% InnoDB 災難。