MySQL数据库InnoDB坏页处理修复
一、InnoDB壞頁出現情況
由于物理磁盤、內存故障、突然斷電、強制關機、強制殺死MySQL進程等可能會造成數據壞頁現象,數據庫實例會不斷重啟。
錯誤日志內報如下錯誤:
InnoDB: Database page corruption on disk or a failed
InnoDB: file read of page
現根據以上現象,對該問題進行處理分析。本方案針對InnoDB引擎進行壞頁修復。進行災難恢復大概率會造成造成一部分數據的丟失。
二、InnoDB壞頁修復步驟
本文檔只介紹使用innodb_force_recovery參數進行數據庫強制打開的方式。
2.1 對數據目錄進行冷備
關閉數據庫實例,對數據目錄進行冷備。
| 1 | shell>?tar?–cvf?data.tar?data |
2.2 查看錯誤日志內容
查詢錯誤日志路徑
| 1 2 3 4 5 6 | SQL>?show?variables?like?'log_error'; +---------------+------------+ |?Variable_name?|?Value??????| +---------------+------------+ |?log_error?????|?./test.err?| +---------------+------------+ |
注:該路徑即為datadir目錄下
| 1 | shell>?tail?-3000f?/var/lib/mysql/data/test.err |
判斷此時數據庫是否已經無法正常運行
2.3 修改相關參數啟動服務
| 1 2 | shell>?vi?/etc/my.cnf innodb_force_recovery=1 |
注:
innodb_force_recovery = 2~6,依次啟動服務器直至可以訪問有問題的表。
innodb_force_recovery參數解析
innodb_force_recovery可以設置為1-6,大的數字包含前面所有數字的影響。 當設置參數值大于0后,可以對表進行select,create,drop操作,但insert,update或者delete這類操作是不允許的。
1 (SRV_FORCE_IGNORE_CORRUPT):忽略檢查到的corrupt頁
2 (SRV_FORCE_NO_BACKGROUND):阻止主線程的運行,如主線程需要執行full purge操作,會導致crash
3 (SRV_FORCE_NO_TRX_UNDO):不執行事務回滾操作。
4 (SRV_FORCE_NO_IBUF_MERGE):不執行插入緩沖的合并操作。
5 (SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB存儲引擎會將未提交的事務視為已提交。
6 (SRV_FORCE_NO_LOG_REDO):不執行前滾的操作。
2.4 進行全庫導出
| 1 | shell>?mysqldump?-uroot?-pmysql?--master-data=2??-E?-R?--all-databases?>?full.sql |
2.5 新環境同版本初始化環境
| 1 | shell>?/usr/local/mysql/scripts/mysql_install_db?--basedir=/usr/local/mysql?--datadir=/var/lib/mysql?--user=mysql |
注:basedir/datadir根據實際情況修改
2.6 新環境導入數據
| 1 | shell>?mysql?-uroot?-p?<?full.sql |
總結
以上是生活随笔為你收集整理的MySQL数据库InnoDB坏页处理修复的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 完善vim bccalc_linux插件
- 下一篇: Innobackupex实现mysql在