恢復前提 :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。