對于InnoDB引擎來說,擁有自動恢復機制。在通常情況下,當服務器出現宕機時,InnoDB是可以在重啟時自動修復錯誤的。在某些情況下,因為出現的異常情況也會導致其無法進行修復。為此,可以通過設置“innidb_force_recovery”參數,來進行人工修復。該參數可以設置不同的值,對應不同的修復級別。在默認情況下,該參數的值為0,表示不啟用。如果對其改變的話,數據表就會處于只讀狀態,而且只能執行基本的Select等語句,不能附加Where,Order BY等參數。因為數據表處于恢復狀態,不能進行插入刪除等修改操作。如果將其設置為1,例如“innodb_force_recovery=1”表示即使發現了損壞,也會讓服務繼續運行,這對于數據的備份和轉存當前的數據很有用。
這適用于數據本身沒有大的損壞,在可以正常讀取數據的情況下,將數據備份出來,通過重新創建同樣的數據庫,并將數據恢復進來。該模式可以滿足一般情況下的數據恢復之用。如果將其設置為2,例如“innodb_force_recovery=2”,表示在主線程和任何清除線程運行時,可以防止因為清除操作導致服務器宕機的發生。根據以上分析,在InnoDB引擎運行時,會執行各種循環,在其中會執行清除操作,將緩存中的數據寫入磁盤,同時可以校驗磁盤文件(例如“ib_logfile”,“*.ibd”文件等日志,索引文件)的結構的完整性,如果結構出現損壞,就會導致清除操作發生問題,甚至導致數據庫崩潰。利用上述參數值,可以禁止執行后臺循環,來避免上述危險的發生。
上述兩種模式,在一般情況下不會導致數據的丟失,而其余的模式就容易導致數據不完整性的發生。……