1. 程式人生 > >innodb_force_recovery強制修復MySQL異常關閉問題

innodb_force_recovery強制修復MySQL異常關閉問題

secure databases roo 目錄 del red upd 異常 密碼

1、在mysql的配置文件my.cnf裏添加以下代碼:
[mysqld]
innodb_force_recovery=1 #可以設置1-6
innodb_purge_thread=0   #如果上邊的配置值大於1,此處就要設置為0,否則就會出現InnoDB: Waiting for the background threads to start的錯誤

配置文件的參數:innodb_force_recovery

innodb_force_recovery影響整個InnoDB存儲引擎的恢復狀況。默認為0,表示當需要恢復時執行所有的恢復操作(即校驗數據頁/purge?undo/insert?buffer?merge/rolling?back&forward),當不能進行有效的恢復操作時,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):不執行前滾的操作。

2、重新啟動數據庫,登錄MySQL備份數據

mysqldump -uroot -p --all-databases> back.sql

3、把之前在my.cnf文件中添加的兩行代碼註釋掉,刪除/var/lib/mysql/目錄下的所有文件,重啟MySQL,重啟成功。

4、重新執行MySQL的安全腳本mysql_secure_installation,設置root登錄密碼,然後登錄MySQL進行數據庫的恢復。

source?back.sql;

innodb_force_recovery強制修復MySQL異常關閉問題