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')