binlog被删除之前的数据恢复不了 (binlog数据恢复操作)

mysql的二进制日志binlog记录了所有的DDL和DML语句,以事件形式记录,还包括语句执行所消耗的时间,mysql的二进制日志是事务安全型的。

测试环境

mysql数据库版本5.7,免安装版,测试mysql binlog数据恢复功能。

查看数据库是否开启binlog日志

登录mysql

执行

show variables like '%log_bin%';

binlog如何进行数据恢复,mysqlbinlog备份与恢复

ON:标识开启日志

开启binlog日志的

修改my.cnf配置文件

log-bin=mysql-bin

server_id=1

#设置日志格式

binlog_format=ROW

查看binlog日志列表

show master logs;

binlog如何进行数据恢复,mysqlbinlog备份与恢复

查询日志事件

show binlog events in 'mysql-bin.000001';

binlog如何进行数据恢复,mysqlbinlog备份与恢复

重置所有的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对应了结束位置

binlog如何进行数据恢复,mysqlbinlog备份与恢复

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