MySQL參數(shù)innodb_force_recovery詳解
innodb_force_recovery 是 InnoDB 存儲(chǔ)引擎的一個(gè)重要參數(shù),用于在數(shù)據(jù)庫(kù)崩潰恢復(fù)時(shí)控制恢復(fù)行為的級(jí)別。這個(gè)參數(shù)主要在數(shù)據(jù)庫(kù)無法正常啟動(dòng)時(shí)使用,可以幫助我們從損壞的數(shù)據(jù)庫(kù)中恢復(fù)數(shù)據(jù)。
一 參數(shù)概述
- 參數(shù)名稱:innodb_force_recovery
- 作用范圍:全局變量
- 默認(rèn)值:0(正常啟動(dòng)模式)
- 取值范圍:0-6
- 動(dòng)態(tài)修改:否(必須寫入配置文件并重啟MySQL)
二 參數(shù)級(jí)別詳解
| 級(jí)別 | 名稱 | 行為描述 | 適用場(chǎng)景 |
|---|---|---|---|
| 0 | 正常模式 | 默認(rèn)值,執(zhí)行完整恢復(fù) | 數(shù)據(jù)庫(kù)正常運(yùn)行時(shí) |
| 1 | SRV_FORCE_IGNORE_CORRUPT | 忽略損壞的頁(yè) | 表空間存在損壞頁(yè) |
| 2 | SRV_FORCE_NO_BACKGROUND | 阻止主線程和清理線程運(yùn)行 | 恢復(fù)過程中避免后臺(tái)干擾 |
| 3 | SRV_FORCE_NO_TRX_UNDO | 不執(zhí)行事務(wù)回滾 | 事務(wù)系統(tǒng)損壞 |
| 4 | SRV_FORCE_NO_IBUF_MERGE | 不執(zhí)行插入緩沖合并 | 插入緩沖損壞 |
| 5 | SRV_FORCE_NO_UNDO_LOG_SCAN | 啟動(dòng)時(shí)不查看undo日志 | undo日志損壞 |
| 6 | SRV_FORCE_NO_LOG_REDO | 不執(zhí)行前滾操作 | redo日志損壞 |
三 使用場(chǎng)景與操作指南
1 數(shù)據(jù)庫(kù)無法正常啟動(dòng)時(shí)
# 修改my.cnf文件 [mysqld] innodb_force_recovery=1 # 從最低級(jí)別開始嘗試 # 重啟MySQL服務(wù) systemctl restart mysqld
2 數(shù)據(jù)恢復(fù)步驟
- 從級(jí)別1開始嘗試啟動(dòng)
- 如果失敗,逐步提高級(jí)別(最高到6)
- 啟動(dòng)成功后立即備份數(shù)據(jù)
- 恢復(fù)參數(shù)為0后重建數(shù)據(jù)庫(kù)
3 各級(jí)別典型應(yīng)用
-- 級(jí)別1:忽略損壞頁(yè)(可以讀取未損壞數(shù)據(jù)) SET GLOBAL innodb_force_recovery=1; -- 注意:實(shí)際上需要寫入配置文件 -- 級(jí)別3:跳過事務(wù)回滾(當(dāng)存在大量未完成事務(wù)導(dǎo)致啟動(dòng)失?。? [mysqld] innodb_force_recovery=3 -- 級(jí)別6:最激進(jìn)模式(redo日志損壞時(shí)最后手段) [mysqld] innodb_force_recovery=6
四 重要注意事項(xiàng)
只讀模式:當(dāng)設(shè)置大于0時(shí),InnoDB處于只讀模式,無法執(zhí)行DML操作
備份策略:
- 在強(qiáng)制恢復(fù)后應(yīng)立即備份數(shù)據(jù)
- 不要在生產(chǎn)環(huán)境長(zhǎng)期使用非0設(shè)置
風(fēng)險(xiǎn)警告:
- 級(jí)別4-6可能導(dǎo)致數(shù)據(jù)不一致
- 高級(jí)別恢復(fù)后必須重建表/數(shù)據(jù)庫(kù)
組合效果:高級(jí)別包含低級(jí)別的所有行為
五 恢復(fù)后操作
數(shù)據(jù)導(dǎo)出:
mysqldump -u root -p --all-databases > full_backup.sql
重建數(shù)據(jù)庫(kù):
-- 1. 停止MySQL -- 2. 刪除ibdata1, ib_logfile*等文件 -- 3. 重置innodb_force_recovery=0 -- 4. 重啟MySQL并導(dǎo)入數(shù)據(jù)
六 與其他參數(shù)的關(guān)系
innodb_read_only:
- 強(qiáng)制恢復(fù)模式下自動(dòng)啟用只讀
- 與顯式設(shè)置的read_only參數(shù)獨(dú)立
innodb_fast_shutdown:
- 強(qiáng)制恢復(fù)會(huì)覆蓋快速關(guān)閉設(shè)置
- 建議設(shè)置為0(完整關(guān)閉)
innodb_log_file_size:
- 恢復(fù)過程中可能發(fā)現(xiàn)日志文件大小不匹配
- 需要先調(diào)整為原大小再嘗試恢復(fù)
七 監(jiān)控與日志
檢查錯(cuò)誤日志:
tail -f /var/log/mysql/error.log
監(jiān)控恢復(fù)進(jìn)度:
SHOW ENGINE INNODB STATUS\G
檢查恢復(fù)模式狀態(tài):
SHOW VARIABLES LIKE 'innodb_force_recovery';
innodb_force_recovery 是MySQL數(shù)據(jù)庫(kù)恢復(fù)的強(qiáng)大工具,但需要謹(jǐn)慎使用。建議在測(cè)試環(huán)境先驗(yàn)證恢復(fù)方案,并確保有完整備份后再在生產(chǎn)環(huán)境操作。
更詳細(xì)的內(nèi)容請(qǐng)查看官方文檔:
https://dev.mysql.com/doc/refman/8.4/en/forcing-innodb-recovery.html
到此這篇關(guān)于MySQL參數(shù)innodb_force_recovery詳解的文章就介紹到這了,更多相關(guān)MySQL innodb_force_recovery 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
一文帶你解鎖MySQL實(shí)現(xiàn)行轉(zhuǎn)列的完整方法
MySQL的行轉(zhuǎn)列,不是簡(jiǎn)單的語(yǔ)法堆砌,而是對(duì)數(shù)據(jù)結(jié)構(gòu)深刻理解后的重構(gòu),這篇文章主要介紹了MySQL實(shí)現(xiàn)行轉(zhuǎn)列的完整方法,有需要的小伙伴可以了解下2026-01-01
MySQL使用show status查看MySQL服務(wù)器狀態(tài)信息
這篇文章主要介紹了MySQL使用show status查看MySQL服務(wù)器狀態(tài)信息,需要的朋友可以參考下2017-01-01
mysql insert的幾點(diǎn)操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )
DELAYED 做為快速插入,并不是很關(guān)心失效性,提高插入性能。2010-04-04
深入學(xué)習(xí)MySQL表數(shù)據(jù)操作
這篇文章主要介紹了深入學(xué)習(xí)MySQL表數(shù)據(jù)操作,基于表操作內(nèi)容圍繞主題展開詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08
MySQL 邏輯備份與恢復(fù)測(cè)試的相關(guān)總結(jié)
數(shù)據(jù)庫(kù)邏輯備份就是備份軟件按照我們最初所設(shè)計(jì)的邏輯關(guān)系,以數(shù)據(jù)庫(kù)的邏輯結(jié)構(gòu)對(duì)象為單位,將數(shù)據(jù)庫(kù)中的數(shù)據(jù)按照預(yù)定義的邏輯關(guān)聯(lián)格式一條一條生成相關(guān)的文本文件,以達(dá)到備份的目的。本文將具體介紹MySQL 邏輯備份的相關(guān)概念及如何做恢復(fù)測(cè)試。2021-05-05
ERROR: Error in Log_event::read_log_event()
ERROR: Error in Log_event::read_log_event(): read error, data_len: 438, event_type: 22014-02-02
MySQL擴(kuò)展VARCHAR長(zhǎng)度遭遇問題匯總分析
這篇文章主要為大家介紹了MySQL擴(kuò)展VARCHAR長(zhǎng)度遭遇問題匯總分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2024-02-02

