MySQL重做日誌恢復資料的流程
1.當MySQL啟動的時候,先會從資料庫檔案中讀取出上次儲存最大的LSN。
2.然後呼叫recv_recovery_from_checkpoint_start,並將最大的LSN作為引數傳入函式當中。
3.函式會先最近建立checkpoint的日誌組,並讀取出對應的checkpoint資訊。
4.透過checkpoint lsn和傳入的最大LSN進行比較,如果相等,不進行日誌恢復資料,如果不相等,進行日誌恢復。
5.在啟動恢復之前,先會同步各個日誌組的archive歸檔狀態。
6.在開始恢復時,先會從日誌檔案中讀取2M的日誌資料到log_sys->buf,然後對這2M的資料進行scan,校驗其合法性,而後將去掉block header的日誌放入recv_sys->buf當中,這個過程稱為scan,會改變scanned lsn.
7.在對2M的日誌資料scan後,innodb會對日誌進行mtr操作解析,並執行相關的mtr函式。如果mtr合法,會將對應的記錄資料按space page_no作為KEY存入recv_sys->addr_hash當中。
8.當對scan的日誌資料進行mtr解析後,innodb對會呼叫recv_apply_hashed_log_recs對整個recv_sys->addr_hash進行掃描,並按照日誌相對應的操作進行對應page的資料恢復。這個過程會改變recovered_lsn。
9.如果完成第8步後,會再次從日誌組檔案中讀取2M資料,跳到步驟6繼續相對應的處理,直到日誌檔案沒有需要恢復的日誌資料。
10.innodb在恢復完成日誌檔案中的資料後,會呼叫recv_recovery_from_checkpoint_finish結束日誌恢復操作,主要是釋放一些開闢的記憶體。並進行事務和binlog的處理。
上述過程的示意圖如下:
恢復日誌主要的介面函式:
recv_recovery_from_checkpoint_start 從重做日誌組內的最近的checkpoint開始恢復資料
recv_recovery_from_checkpoint_finish 結束從重做日誌組內的checkpoint的資料恢復操作
recv_recovery_from_archive_start 從歸檔日誌檔案中進行資料恢復
recv_recovery_from_archive_finish 結束從歸檔日誌中的資料恢復操作
recv_reset_logs 擷取重做日誌最後一段作為新的重做日誌的起始位置,可能會丟失資料。
2.然後呼叫recv_recovery_from_checkpoint_start,並將最大的LSN作為引數傳入函式當中。
3.函式會先最近建立checkpoint的日誌組,並讀取出對應的checkpoint資訊。
4.透過checkpoint lsn和傳入的最大LSN進行比較,如果相等,不進行日誌恢復資料,如果不相等,進行日誌恢復。
5.在啟動恢復之前,先會同步各個日誌組的archive歸檔狀態。
6.在開始恢復時,先會從日誌檔案中讀取2M的日誌資料到log_sys->buf,然後對這2M的資料進行scan,校驗其合法性,而後將去掉block header的日誌放入recv_sys->buf當中,這個過程稱為scan,會改變scanned lsn.
7.在對2M的日誌資料scan後,innodb會對日誌進行mtr操作解析,並執行相關的mtr函式。如果mtr合法,會將對應的記錄資料按space page_no作為KEY存入recv_sys->addr_hash當中。
8.當對scan的日誌資料進行mtr解析後,innodb對會呼叫recv_apply_hashed_log_recs對整個recv_sys->addr_hash進行掃描,並按照日誌相對應的操作進行對應page的資料恢復。這個過程會改變recovered_lsn。
9.如果完成第8步後,會再次從日誌組檔案中讀取2M資料,跳到步驟6繼續相對應的處理,直到日誌檔案沒有需要恢復的日誌資料。
10.innodb在恢復完成日誌檔案中的資料後,會呼叫recv_recovery_from_checkpoint_finish結束日誌恢復操作,主要是釋放一些開闢的記憶體。並進行事務和binlog的處理。
上述過程的示意圖如下:
恢復日誌主要的介面函式:
recv_recovery_from_checkpoint_start 從重做日誌組內的最近的checkpoint開始恢復資料
recv_recovery_from_checkpoint_finish 結束從重做日誌組內的checkpoint的資料恢復操作
recv_recovery_from_archive_start 從歸檔日誌檔案中進行資料恢復
recv_recovery_from_archive_finish 結束從歸檔日誌中的資料恢復操作
recv_reset_logs 擷取重做日誌最後一段作為新的重做日誌的起始位置,可能會丟失資料。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15498/viewspace-2155757/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 重做日誌的恢復
- 恢復重做日誌
- oracle 恢復重做日誌Oracle
- rman恢復--丟失聯機重做日誌的恢復
- 【備份恢復】 恢復重做日誌組成員
- 聯機重做日誌丟失的恢復
- 聯機重做日誌檔案的恢復
- 丟失所有重做日誌檔案的恢復例子丟失所有重做日誌檔案的恢復例子如下:
- 利用binlog日誌恢復mysql資料MySql
- MySQL--binlog日誌恢復資料MySql
- 丟失當前current重做日誌檔案下恢復資料庫資料庫
- 丟失聯機重做日誌檔案的恢復
- Oracle Redo(重做日誌) 模擬故障和恢復Oracle Redo
- 【備份恢復】恢復 丟失已歸檔重做日誌檔案
- MySQL重做日誌(redo log)MySql
- 模擬線上重做日誌被刪除的情況恢復
- 【備份與恢復】恢復受損的複用聯機重做日誌檔案
- Oracle重做日誌檔案損壞或丟失後的恢復Oracle
- 利用MySQL日誌模擬恢復資料變化軌跡IIMySql
- 從丟失日誌組中恢復流程
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- 無歸檔日誌恢復rman資料
- 當丟失控制檔案但重做日誌檔案還在時如何恢復資料庫資料庫
- 重做日誌
- MySQL日誌管理,備份和恢復MySql
- MySQL 日誌管理、備份與恢復MySql
- 聯機重做日誌、歸檔日誌、備用重做日誌
- Mysql之binlog日誌說明及利用binlog日誌恢復資料操作記錄MySql
- SQL Server無日誌資料庫恢復模式SQLServer資料庫模式
- MySQL通過bin log日誌恢復資料|手撕MySQL|對線面試官MySql面試
- Oracle的重做日誌Oracle
- mysql 誤刪除表內資料,透過binlog日誌恢復MySql
- 備份與恢復--從備份的歸檔日誌中恢復資料
- Sql server日誌損壞後的資料恢復(轉)SQLServer資料恢復
- Oracle資料庫重做日誌及歸檔日誌的工作原理說明Oracle資料庫
- 重做日誌管理
- 【備份與恢復】重建受損的聯機重做日誌檔案成員
- mysql資料恢復MySql資料恢復