mysql 誤刪除數據恢復(binlog)

恢復前提 :mysql有打開日誌記錄

恢復概覽: 1、通過mysql二進制日誌文件生成sql,整個庫恢復需把刪除的sql語句去掉,運行sql

                   2、部分恢復同樣生成sql文件,過濾sql文件,複製sql後去掉不需要的sql語句,運行sql


生成sql文件方法:

通過mysqlbinlog工具 一般在/mysql/bin 下面

執行命令: 

mysqlbinlog --no-defaults --base64-output=decode-rows -v --start-datetime="2018-12-14 10:30:00" --stop-datetime="2019-04-08 10:50:00" --database=數據庫名 /data/mysql/data/mysql-bin.000004 > a1.sql

ps: start-datetime~stop-datetime 是誤操作時間段

ps: /data/mysql/data/mysql-bin.000018 日誌文件

 show master status;

然後執行

        find / -name mysql-bin.000018 找到路徑mysql-bin開頭的可能有多個

cat a1.sql 後可看到操作的sql

拿到 end_log_pos 2442766

以它爲結束點 執行:

      mysqlbinlog --no-defaults -d 數據庫名 --stop-position=2442766 /data/mysql/data/mysql-bin.000018>>back.sql

得到所有執行過的sql 語句

全量恢復執行:去掉back.sql 不需要執行的sql

篩選恢復: 

        more back.sql |grep -E 'INSERT INTO `PhoneTag`|update PhoneTag|delete from PhoneTag' -A5   

ps:參數A5向下獲取5行 B5向上獲取5行

複製篩選後的sql運行。


總結:

    新建數據表能不採用自增id就不採用,恢復數據時執行過的sql大多根據id來過濾,日誌新增語句不會帶上id。

 

    

 

 

 

 

 

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