mysql的二進制日志binlog記錄了所有的DDL和DML語句,以事件形式記錄,還包括語句執行所消耗的時間,mysql的二進制日志是事務安全型的。
測試環境
mysql資料庫版本5.7,免安裝版,測試mysql binlog資料恢複功能。
檢視資料庫是否開啟binlog日志
登入mysql
執行
show variables like '%log_bin%';
ON:辨別開啟日志
開啟binlog日志的
修改my.cnf配置檔案
log-bin=mysql-bin
server_id=1
#設定日志格式
binlog_format=ROW
檢視binlog日志清單
show master logs;
查詢日志事件
show binlog events in 'mysql-bin.000001';
重置所有的binlog日志
reset master;
binlog轉化為文本檔案
mysqlbinlog --base64-output=decode-rows -v E:\mysql-5.7.32-winx64\data\mysql-bin.000001 > e:\1.log
資料恢複
先新增資料:
insert into
再删除資料
delete from
然後檢視日志事件,找到新增事件的結束位置,stop-position對應了結束位置
mysqlbinlog --stop-position=524 --database=test E:\mysql-5.7.32-winx64\data\mysql-bin.000002 | mysql -uroot –p
重新檢視資料庫,删除的資料已恢複到删除前。
注意:
如果insert時,未開啟binlog日志,那麼delete該資料後,無法使用binlog恢複該資料。(一開始還以為能恢複,結果測試的時候一直提示ERROR 1032 (HY000) at line 17: Can't find record in 'tablexxx')