昨天電腦突然開不開機,反覆了幾回,進行了磁盤檢測後進去了系統,以後發現沒啥毛病(裝在C盤的輸入法有點問題,懷疑多是C盤所在的固態出了問題),次日本地的MySQL一直不鏈接上,服務器上遠程鏈接正常,首先到服務裏看果真mysql沒有啓動,嘗試手動啓動,發現啓動不了,因而去看日誌mysql
報的錯很奇怪,有找不到表空間,有報錯InnoDB is in read only mode.。找了不少解決方法都沒法啓動mysql ,最終在 my.ini文件中加上innodb_force_recovery = 4 問題解決,MySQL能夠鏈接上,刪除了問題數據庫並註釋掉innodb_force_recovery = 4 能夠正常運行。sql
參數innodb_force_recovery影響了整個Innodb存儲引擎的恢復情況。該值默認爲0,表示當須要恢復時執行全部的恢復操做。當不能進行有效恢復時,如數據頁發生了corruption,Mysql數據庫可能會宕機,並把錯誤寫入錯誤日誌中。
但在某些狀況下,可能不須要執行完整的恢復操做。例如在進行alter table操做時,這時發生意外,數據庫重啓時會對Innodb表執行回滾操做。對於一個大表,這須要很長時間,甚至多是幾個小時。這時能夠自行恢復,例如將表刪除,從備份中從新將數據導入表中,這些操做可能要快於回滾操做。
Innodb_force_recovery能夠設置6個非零值:
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_force_recovery大於0後,能夠對標進行select、create、drop操做,但insert、update或者delete這類操做是不容許的。
數據庫