MySQL異常宕機後資料恢復

2021-08-21 18:13:03 字數 1892 閱讀 7476

mysql異常宕機後資料恢復

首先遇到問題千萬不要慌,尤其是線上的問題,更不能緊張,心理素質對dba來說也是一項挑戰,可能你的手一抖就會導致多少人無法正常使用業務,如果你沒有把握,請先把現場環境備份後再進行操作,避免資料的二次損壞,下面說一下大概的思路吧。

1.檢查是否有備份,如果備份存在,binlog存在,那就恢復起來難度就不是那麼大了。這個在網上都有方法的。

2.如果沒有備份的,那處理這個問題就有些棘手了,還得一步一步的來。

在my.cnf中[mysqld]下加上以下配置,採用強制恢復機制,看是否能夠啟動

[mysqld]

innodb_force_recovery=1

如果設定成1不能啟動,可以逐漸的將資料增大到6,下文會詳細說下1-6是什麼意思,如果在1-6之間啟動成功了,那麼你運氣還不錯,這時候不要恢復業務,趕緊把資料用邏輯方式匯出來,再啟個新的例項把資料還原,有人會問,為什麼mysql已經啟動了,還要匯出資料呢,原因在這:

當innodb_force_recovery被設定為大於0的時候 ,會阻止使用者insert,update,delete也就是你啟動的mysql不是乙個正常的mysql服務,類似於windows系統下的安全模式。以下這段引於其它地方,具體位址不太清楚了,也可以從官方文件中找到。

innodb_force_recovery被允許的非零值如下。乙個更大的數字包含所有更小數字的預防措施。如果你能夠用乙個多數是4的選項值來轉儲你的表,那麼你是比較安全的,只有一些在損壞的單獨頁面上的資料會丟失。乙個為6的值更誇張,因為資料庫頁被留在乙個陳舊的狀態,這個狀態反過來可以引發對b樹和其它資料庫結構的更多破壞。

innodb_force_recovery=1 (srv_force_ignore_corrupt)

即使伺服器檢測到乙個損壞的頁,也讓伺服器執行著;試著讓select * from tbl_name 跳過損壞的索引記錄和頁,這樣有助於轉儲表。

innodb_force_recovery=2 (srv_force_no_background)

阻止主線程執行,如果崩潰可能在淨化操作過程中發生,這將阻止它。

innodb_force_recovery=3 (srv_force_no_trx_undo)

恢復後不執行事務回滾。

innodb_force_recovery=4 (srv_force_no_ibuf_merge)

也阻止插入緩衝合併操作。如果你可能會導致乙個崩潰。最好不要做這些操作,不要計算表統計表。

innodb_force_recovery=5 (srv_force_no_undo_log_scan)

啟動資料庫之時不檢視未完成日誌:innodb把未完成的事務視為已提交的。

innodb_force_recovery=6 (srv_force_no_log_redo)

不要在恢復連線中做日誌前滾。

資料庫不能另外地帶著這些選項中被允許的選項來使用。作為乙個安全措施,當innodb_force_recovery被設定為大於0的值時,innodb阻止使用者執行insert, update或delete操作.

即使強制恢復被使用,你也可以drop或create表。如果你知道乙個給定的表正在導致回滾崩潰,你可以移除它。你也可以用這個來停止由失敗的大宗匯入或失敗的alter table導致的失控回滾。你可以殺掉mysqld程序,然後設定innodb_force_recovery為3,使得資料庫被掛起而不需要回滾,然後捨棄導致失控回滾的表。

關於上面進行邏輯備份也可能會遇到問題,可能會備份失敗,如果出錯,建議先按庫乙個乙個的備份,到哪個庫出錯後,再按照當前庫的表乙個乙個備份,表出錯根據表中主鍵一點一點備份,最終將大部分資料匯出。如果你的資料不重要,可以容忍丟失,那麼可以當我說的都是廢話了。

推薦大家可以看看mysql · 引擎特性 · innodb 崩潰恢復過程這篇文章

mysql8宕機後恢復

重新初始化mysql 在 etc my.cnf中新增如下配置 mysqld innodb force recovery 1ps 如果不能啟動增大innodb force recovery值,2 3 4 5 6直到啟動為止。usr local mysql bin mysqld safe user my...

mysql宕機日誌查詢 Mysql容器異常宕機

問題定位 進入容器內,查詢mysql的日誌,沒有發現異常問題 有些錯誤日誌資訊,應該是容器自定義的時候留下的 所以排除問題是在容器內發生的。回到宿主機,查詢容器日誌,路徑 var lib docker containers發現有一句異常 資料庫未正常關閉 僅僅一條這樣的報錯還是定位不到問題的,遂查了...

mysql配置資料恢復 MySQL 資料恢復

前言 前兩天因為沒注意的誤操作,直接把某個資料表清掉了,心慌慌.怪自己學藝不精,當時整了一下午也沒把資料找回來.當晚回來閉關研究,終於在凌晨1點多整出來了,特此記錄,以備不時之需.對於 mysql 資料的備份,主要有兩種 全量備份和增量備份.全量備份 將資料庫中的所有資料全部進行備份.相當於複製貼上...