[ERROR] InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint

這個問題出現在mysql 5.7之後的版本,主要的原因是mysql會在最新的checkpoint完成後都會在redo log寫一個一字節的MLOG_CHECKPOINT 標記,用來標記在此之前的redo都已checkpoint完成。如果處於任何原因沒有找到這個標記,那麼整個redo日誌文件都會被忽略。出現這個錯誤的話,最好是有備份進行恢復,如果沒有做好備份,那按照下面的方法處理可能會有數據丟失。

第一步:設置如下參數,並移除當前使用的redo日誌文件:

innodb_log_checksums = ON

這個時候最好也一併設置,避免客戶端連接進來操作數據:

skip_networking=ON

然後可以試着啓動數據庫,如果啓動成功的話,可以直接跳到第三步進行備份;如果啓動不成功,繼續往下。

第二步:如果進入到這一步,通常還會伴隨着[ERROR] InnoDB: Page [page id: space=63, page number=165] log sequence number 643331245985 is in the future! Current system log sequence number 643311926814.  這樣的錯誤,這是因爲mysql writer線程按照配置的時間間隔以page爲單位刷新buffer數據到磁盤,當數據刷新到磁盤的時候,新寫入磁盤的page包含了較新的lsn,此時系統system表空間頭的lsn並沒有同步更新,通常這是檢查點線程的工作。在正常的崩潰恢復中,mysql可以藉助redo日誌來進行前滾和回滾,但是此時redo日誌已經被我們刪掉了,mysql無法進行恢復操作。此時,只能通過設置

innodb_force_recovery=3

來強制啓動mysql。如果仍然啓動不成功,則每次對innodb_force_recovery + 1,提高恢復級別再次重啓。

第三步:使用mysqldump導出備份:

mysqldump -uroot -p --single-transaction --master-data=2 --flush-privileges --routines --triggers --events --all-databases > fullbackup.sql

第四步:使用新的備份恢復數據。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章