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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 利用binlog日誌恢復mysql資料MySql
- MySQL重做日誌(redo log)MySql
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- mysql 誤刪除表內資料,透過binlog日誌恢復MySql
- MySQL 日誌管理、備份與恢復MySql
- MySQL日誌管理,備份和恢復MySql
- 重做日誌管理
- MySQL通過bin log日誌恢復資料|手撕MySQL|對線面試官MySql面試
- mysql資料恢復MySql資料恢復
- 寶塔資料庫恢復 mysql資料庫丟失恢復 mysql資料庫刪除庫恢復 寶塔mysql資料庫恢復資料庫MySql
- MySQL資料庫的恢復MySql資料庫
- MySQL 修改InnoDB重做日誌檔案的數量或大小MySql
- MySQL更新資料時,日誌(redo log、binlog)執行流程MySql
- Oracle11g redo log 建立、新增、刪除(重做日誌組,重做日誌檔案)Oracle
- mysql誤刪資料恢復MySql資料恢復
- MySQL資料庫故障恢復MySql資料庫
- DG歸檔日誌缺失恢復
- 【北亞企安資料恢復】Ceph儲存原理&Ceph資料恢復流程資料恢復
- 【資料庫資料恢復】linux系統下MYSQL資料庫資料恢復案例資料庫資料恢復LinuxMySql
- 資料誤操作,刪庫跑路?教你使用ApexSQLLog工具從 SQLServer日誌恢復資料!SQLServer
- MySQL 透過 binlog 恢復資料MySql
- MySQL 通過 binlog 恢復資料MySql
- Mysql資料備份與恢復MySql
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- 達夢資料庫DM8之REDOLOG重做日誌檔案管理資料庫
- MySQL-17.其他資料日誌MySql
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- 測試在丟失歸檔日誌的情況下,跳過部分歸檔日誌進行資料恢復資料恢復
- MySQL資料庫遷移與MySQL資料庫批量恢復MySql資料庫
- 資料恢復:AMDU資料抽取恢復資料恢復
- 伺服器資料恢復—雲伺服器mysql資料庫表資料被delete的資料恢復案例伺服器資料恢復MySql資料庫delete
- Mysql資料庫備份及恢復MySql資料庫
- mysql資料庫恢復一例MySql資料庫
- Mysql 誤刪資料進行恢復MySql
- 【Mysql】如何透過binlog恢復資料MySql
- Oracle & MySQL & PostgreSQL資料庫恢復支援OracleMySql資料庫
- Mysql效能壓測、Binlog恢復資料MySql
- Sqlserver系統資料庫和使用者資料庫日誌檔案全部丟失的恢復SQLServer資料庫