MySQL誤刪資料救命指南

2022-07-30 06:21:09 字數 1748 閱讀 5214

首先看下mysql誤刪資料排名最前的幾種是:

1.誤刪檔案

2.誤刪庫、表

3.錯誤全表刪除 / 更新

4.公升級操作失誤

都來看看你命中過幾個,hoho。

簡單說下我親手造的乙個大事故吧。

那大概是乙個春暖花開的季節,我的內心是激動澎湃的,因為已經安排了休假計畫。在這前幾天,已經把乙個新專案的資料庫環境都部署好了,包括自動化備份

等我美美的出去玩的時候,悲劇發生了,業務要求進行資料回滾,但發現備份檔案不可用,原因是備份時指定的字符集和表字符集不一致。我勒個擦,原來該專案採用新的字符集,但是我沒有認真檢查確認並修改備份指令碼,結果導致備份失效。最後,因為這個事,當季度績效結果被降檔,boss也為此背鍋~

好吧,回到正題,先說幾點我平時預防誤操作導致檔案/資料丟失不成熟的建議:

1.欲刪除檔案時,將rm命令改成mv,可在系統層面將rm命令做個alias(或參考  windows / mac osx做法,刪除檔案時先進**站)。

刪除資料庫、表時,不要用drop命令,而是rename到乙個專用歸檔庫裡;

2.刪除表中資料時,不要直接用delete或truncate命令,尤其是truncate命令,目前不支援事務,無法回滾。

3.用delete命令刪除資料時,應當先顯式開啟事務,這樣誤操作時,還有機會進行回滾。

4.要大批量刪除資料時,可以將這些資料insert...select到乙個新錶,確認無誤後再刪除。或者反其道行之,把要保留的資料寫到新錶,然後將表重新命名對掉。

以上幾條,也是我自己奉行的原則。總之,要時刻保持對線上生產環境的敬畏之心。雖說現在大部分操作可以靠平台來完成了,但平台也不是萬能的,不也發生過平台本身的缺陷造成資料丟失、**回滾、部署失誤等事故嘛,我就不點名了。

做好備份,不管是物理備份還是邏輯備份!

做好備份,不管是物理備份還是邏輯備份!

做好備份,不管是物理備份還是邏輯備份!

重要的事情說三遍都不嫌多。

說完預防措施,我們再說萬一發生誤操作時,怎麼以最快速度進行補救。 我們分別列舉幾種常見的情況:

1.執行drop database / drop table命令誤刪庫表,如果碰巧採用共享表空間模式的話,還有恢復的機會。如果沒有,請直接從備份檔案恢復吧。神馬,你連備份檔案都沒有?那麻煩退出dba屆吧,乙個連備份都懶得做的人,不配成為dba的。

2.接上,採用共享表空間模式下,誤刪後立刻殺掉(kill -9)mysql相關程序(mysqld_safe、mysqld),然後嘗試從ibdatax檔案中恢復資料。

3.誤刪除正在執行中的mysql表ibd或ibdatax檔案。請立即申請對該例項進行維護,當然,不是指把例項關閉,而是把業務暫停,或者把該例項從線上環境摘除,不再寫入新資料,然後利用linux系統的proc檔案特點,把該ibd檔案從記憶體中拷出來,再進行恢復,因為此時mysqld例項在記憶體中是保持開啟該檔案的,切記這時不要把mysqld例項關閉了。

4.接上,把複製出來的ibdatax或ibd檔案拷貝回datadir後,重啟mysqld進入recovery模式,innodb_force_recovery 選項從 0 - 6 逐級測試,直至能備份出(整個例項或單錶的)所有資料後,再重建例項(或單錶),恢復資料。

5.執行truncate誤清整表。如果沒使用共享表空間模式的話,基本別想了,走備份恢復+binlog吧。

6.執行不帶where條件的update,或者update錯資料。也別費勁了,走備份恢復+binlog吧。

MySQL誤刪資料救命指南

預防誤操作導致檔案 資料丟失的建議 1.欲刪除檔案時,將rm命令改成mv,可在系統層面將rm命令做個alias 或參考windows mac osx做法,刪除檔案時先進 站 2.刪除資料庫 表時,不要用drop命令,而是rename到乙個專用歸檔庫裡 3.刪除表中資料時,不要直接用delete或tr...

mysql誤刪資料恢復

資料庫忘記備份,可以使用mysql的日誌二進位制檔案 binlog 進行資料恢復。首先檢視是否開啟了binlog。show variables like log 進入mysql根目錄,會看到有binlog.的日誌檔案。取後面數字最大的日誌檔案,資料恢復。3.檢查某一時間端的binlog start ...

MySQL資料誤刪恢復

一 檢視mysql的binlog是否開啟 二 檢視binlog存放路徑 四 轉換binlog為正常sql mysqlbinlog base64 output decode rows v database dbname start datetime 2020 08 15 13 00 00 stop d...