Mysql 服務啓動報錯 server PID file could not be found

查看了mysql的日誌

分析日誌後發現,數據庫無法重啓的原因是因爲ibdata1文件損壞,重啓後無法正常恢復。

解決辦法:
需要跳過恢復步驟,修改my.cnf文件,在my.cnf中的[mysqld]中添加:
innodb_force_recovery = 6
innodb_purge_threads = 1

解釋:
innodb_force_recovery可以設置爲1-6,大的數字包含前面所有數字的影響。
具體數字對應的含義:
1-----(SRVFORCEIGNORECORRUPT):忽略檢查到的corrupt頁。
2-----(SRVFORCENOBACKGROUND):阻止主線程的運行,如主線程需要執行full purge操作,會導致crash。
3-----(SRVFORCENOTRXUNDO):不執行事務回滾操作。
4-----(SRVFORCENOIBUFMERGE):不執行插入緩衝的合併操作。
5-----(SRVFORCENOUNDOLOGSCAN):不查看重做日誌,InnoDB存儲引擎會將未提交的事務視爲已提交。
6-----(SRVFORCENOLOG_REDO):不執行前滾的操作。

 

注意

MySQL數據庫,當innodb表空間損壞時候,嘗試啓動數據庫不成功,可以使用innodb_force_recovery參數進行強制啓動

在主配置文件my.cnf中添加
innodb_force_recovery=6

****************************

innodb_force_recovery參數解釋:


innodb_force_recovery影響整個InnoDB存儲引擎的恢復狀況,默認值爲0,表示當需要恢復時執行所有的恢復操作。
當不能進行有效的恢復操作時,mysql有可能無法啓動,並記錄下錯誤日誌。

innodb_force_recovery可以設置爲1-6,大的數字包含前面所有數字的影響。
當設置參數值大於0後,可以對錶進行select,create,drop操作,但insert,update或者delete這類操作是不允許的。

1(SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁
2(SRV_FORCE_NO_BACKGROUND):阻止主線程的運行,如主線程需要執行full purge操作,會導致crash
3(SRV_FORCE_NO_TRX_UNDO):不執行事務回滾操作。
4(SRV_FORCE_NO_IBUF_MERGE):不執行插入緩衝的合併操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日誌,InnoDB存儲引擎會將未提交的事務視爲已提交。
6(SRV_FORCE_NO_LOG_REDO):不執行前滾的操作。

***************************


修復表空間受損的表:
數據起來後,innodb類型的表不能寫操作,但可以讀,此時對錶做check,查找到異常的表,讀取出來,導入到myisam表裏面,drop原表
然後在my.cnf中去掉innodb_force_recovery的設置,重啓mysql
把myisam錶轉成innodb表;
 

 

再次啓動mysql就ok了~
如果還無法啓動,則需要刪除數據目錄datafile下的 ibdata1,ib_logfile*等文件。
啓動後導出MySQL數據庫,重新恢復即可。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章