MySql 数据误删除恢复
在开发中,可能会遇到误删除数据库的问题,对于MySQL数据库来说,可以使用基于 binlog
的方式生成反向操作的SQL语句来实现,是MySQL中一个非常实用的功能。
在格式为 binlog
格式的日志模式下,不仅记录了数据库中曾经执行的增删改信息,而且包含了反向信息。比如当执行 delete from table where id = 1;
时,将会生成:
delete from table where pk_id = 1 and colum1 = 'value1' and other_columns = 'xx' where conditions
它不仅包括原始语句的Id,而且还包括中这一行所有的字段的信息。update操作也是同样的道理,执行 update
操作时,同样也会记录在更新之前的每一个字段的值。这样就可以利用这个日志来生成反向操作信息。
下图就是通过 MySql 自带的 mysqlbinlog
工具解析出来的 binlog 日志文件中的信息,可以看到其中的SQL语句信息。
知道了 binlog 中的内容,就可以基于这个 binlog 来实现各种实用的功能,典型的就是误删数据的还原操作,
关于解析 binglop 的工具,比较知名的有大众点评网 DBA 写的 binlog2sql 工具。
binlog2sql需要语句pip安装,所以需要先安装pip
pip 安装参考:https://www.cnblogs.com/technologylife/p/5870576.html
binlog2sql下载以及安装:https://github.com/danfengcao/binlog2sql
完成 binlog2sql
的安装之后,就可以使用它来实现数据的还原操作了,接下来我们将模拟一个误操作的恢复。
首先,自然是要开启 MySql 的 binlog,且日志格式为 row ;其次,建立测试表 test_binlog
,并执行以下sql语句:
insert into test_binlog values (1,'aaa');
insert into test_binlog values (2,'bbb');
insert into test_binlog values (3,'vvv');
--以下误操作,更新了全部数据
update test_binlog set name = 'xxx';
通过 show master logs;
找到当前的 binlog 文件:
接下来执行:
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p’root’ -ddb01 -t test_01 –start-file=’binlog.000021′
通过 binlog2sql 来解析产生的 binlog 文件,解析出来的就是正常的 SQL 语句。
执行:
python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p’root’ -ddb01 -t test_01 –start-file=’binlog.000021′ -B
通过 -B
参数将生成反向 SQL。它生成的 SQL 语句的顺序和正常的 SQL 语句刚好相反,这样就可以用于误删数据的恢复。
更多 binlog2sql
使用方法请参考: 官方GitHub