通過阿里雲binlog備份恢復被刪除的數據

前言

       某天早上公司測試人員,寫了一條坑爹的delete from語句,沒在測試環境執行,直接在生產庫執行導致目標表數據全部被刪除;部分業務出現問題,廣告無法正常展示,需及時恢復業務。

操作步驟

1.進入阿里雲RDS後臺,根據誤操作的時間找到對應時間段的binlog文件,將binlog文件下載到測試服務器

2.通過下面命令讀取binlog二進制文件

mysqlbinlog --database prod --base64-output=DECODE-ROWS -v mysql-bin.026846 > binlog.sql

通過grep過濾指定的表和DELETE FROM操作,找到前後的position

3.獲取到position後,通過定位position使用如下命令再次讀取binlog文件,得到誤操作SQL的記錄

mysqlbinlog --database prod --base64-output=DECODE-ROWS -v mysql-bin.026846 --start-position="213044104" --stop-position="213044642" > restore.sql

4.將DELETE FROM語句格式化爲INSERT INTO語句,也可以將語句拷貝到Excel進行處理

cat ad.sql | sed -n '/###/p' | sed 's/### //g;s/\/\*.*/,/g;s/DELETE FROM/INSERT INTO/g;s/WHERE/VALUES/g;' | sed -r 's/(@28.*),/\1;;;;;;;;;;;;;/g' | sed 's/@[0-9]*=/@@@@@=/g' > restore.sql

5.執行修改好的restore.sql,恢復誤刪除的數據

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章