【MySQL】 DB 回滾崩潰案例一則
背景
一個測試人員對效能資料庫進行效能壓測 ,由於儲存過程寫的有問題,對一個大表進行大量更新為及時提交 ,見proc hang 住就kill 掉程式,然後長時間等待未果直接重啟mysql 服務。之後錯誤日誌中報錯:
130516 20:47:36 InnoDB: Error: page 5 log sequence number 151 2771374516
InnoDB: is in the future! Current system log sequence number 131 3791365897.
InnoDB: Your database may be corrupt or you may have copied the InnoDB
InnoDB: tablespace but not the InnoDB log files. See
InnoDB: http://dev.mysql.com/doc/refman/5.1/en/forcing-recovery.html
InnoDB: for more information.
問題分析
根據錯誤提示:資料檔案的LSN比redo log的LSN要大,當系統嘗試使用Redo Log去修復資料頁面的時候,發現Redo Log LSN比資料頁面還小,所以導致錯誤。資料頁的LSN在一般情況下,都是小於Redo Log的,因為在事物提交或按照 innodb_trx_commit 設定的方式提交時,先將事物順序寫入Redo Log , 然後後臺執行緒按照 max_prt_dirty_page 引數設定的比例重新整理或當系統檢測到當10秒內系統會執行重新整理髒頁操作,所以,資料頁的LSN正常情況下永遠會比Redo Log 的LSN 小。
此次問題是正是由於資料庫在kill 掉程式之後執行回滾操作,但是未等回滾執行完畢就kill -9 mysql 導致回滾崩潰。
解決方法
上述問題的解決方法 是設定innodb_force_recovery=3 或者4 ,需要逐個嘗試。然後重啟資料庫服務 匯出重要的資料,重建資料庫。
innodb_force_recovery 可以設定為1-6,大的數字包含前面所有數字的影響。
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): 不執行前滾的操作。
當設定引數值大於0後,可以對錶進行select,create,drop操作,但insert,update或者delete這類操作是不允許的。當然即使innodb_force_recovery>0 ,你也可以DROP或CREATE表。如果某個表正在回滾而導致資料庫崩潰,設定innodb_force_recovery為3,重啟db 後,使得資料庫被掛起而不需要回滾,然後捨棄導致失控回滾的表。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22664653/viewspace-762668/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL死鎖案例一(回滾導致死鎖)MySql
- WkWebView 令人崩潰的崩潰WebView
- MySQL 8.0.11 無故崩潰MySql
- MySQL 崩潰恢復過程分析MySql
- MySQL 引擎特性:InnoDB崩潰恢復MySql
- 【案例】MySQL count操作優化案例一則MySql優化
- MySQL 5.7 主庫崩潰切備庫MySql
- WKWebView崩潰WebView
- Redis崩潰Redis
- iOS 避免常見崩潰(一)iOS
- 崩潰的一天,西安一碼通崩潰背後的技術問題。
- Crittercism:KitKat崩潰率0.7% iOS 7.1崩潰率1.6%iOS
- 【MySQL】Too many connections 案例一則MySql
- 【MySQL】mysqldgotsignal11案例一則MySqlGo
- APP防崩潰APP
- WWDC 2018:理解崩潰以及崩潰日誌
- 惠普塔式伺服器崩潰資料恢復成功案例伺服器資料恢復
- 分享:MySQL資料庫崩潰解決過程MySql資料庫
- 【MySQL】mysqld got signal 11 案例一則MySqlGo
- iOS Crash不崩潰iOS
- linux mint 崩潰Linux
- ios 崩潰集錦iOS
- app 崩潰的原因APP
- 一起看下MySQL的崩潰恢復到底是怎麼回事MySql
- 執行緒崩潰為什麼不會導致 JVM 崩潰執行緒JVM
- 回滾操作、回滾段的理解
- 硬碟亮紅燈伺服器崩潰資料恢復案例分析硬碟伺服器資料恢復
- 儲存崩潰資料恢復過程;資料恢復案例資料恢復
- IOS 崩潰日誌分析iOS
- Invalid double崩潰分析
- 【MySQL】崩潰恢復問題解決:Forcing InnoDB RecoveryMySql
- 讓 Chrome 崩潰的一行 CSS 程式碼ChromeCSS
- 一次資料庫崩潰處理事件資料庫事件
- 案例解析:執行緒池使用不當導致的系統崩潰執行緒
- YC一文搞懂MySQL持久化和回滾的原理bmyMySql持久化
- 基於Redo Log和Undo Log的MySQL崩潰恢復流程MySql
- iOS 避免常見崩潰(二)iOS
- InnoDB 崩潰恢復機制