前言
某天早上公司測試人員,寫了一條坑爹的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,恢復誤刪除的數據