在工作中,如果不小心把数据删了,怎么恢复?首先要停掉服务,停止新的请求,然后利用mysql binlog进行数据恢复。
binlog的三种模式:
①statement:
记录每一条修改数据的sql。
优点:日志文件比较小,节约io操作,性能较好。
缺点:只记录执行语句,所以还需要保证在主从执行的得到相同的结果。所以准确性差。
②row:
③mixed:
恢复数据操作步骤
① 查看binlog有没有开启:
在mysql中输入命令:SHOW VARIABLES LIKE 'log_bin%';
如log_bin是OFF,那么需要去mysql配置文件配置一下来开启,我们会看到上图中的内容,在里面添加一条:log-bin=mysql-bin,即可开启binlog模式。
② 设置binlog模式:
我们通过命令:SHOW VARIABLES LIKE 'binlog%'; 查看下当前binlog的模式。
还是刚才那个配置文件,我们在配置文件中添加一行:binlog_format=”ROW”,即可设置成row模式,其他模式同理,也是在这里设置添加。
③ 查看binlog日志:
binlog日志是二进制文件,用cat/vi这些命令是无法正常查看的,可以用下面两种方法查看:
第一种方法是通过语句SHOW BINLOG EVENTS IN 'LAPTOP-DK2NTJPL-bin.000001';来查看日志。
其中,server_id =1,由于我们没有设置,就是表示就是默认主机,Pos我的理解就表示的是一个偏移指针,就类似于一个时间节点,在这个时间节点完成了哪些操作。event_type就表示事件类型,xid事务,query查询,write rows表示插入数据,delete_rows删除数据,都是比较好辨认出来的。
第二种方法是通过语句mysqlbinlog --no-defaults LAPTOP-DK2NTJPL-bin.000001;可以看到有如下的一个文件信息,这种话方式查看日志更详细些:
④ 通过binlog进行数据恢复:
我们拿一张表做实验,dept表初始数据如下:
执行reset master先清空一下binlog日志,执行show master logs可以看到目前只有一个日志:
执行SHOW BINLOG EVENTS IN 'LAPTOP-DK2NTJPL-bin.000001'查看日志内容:
随便新增一条数据:
再执行SHOW BINLOG EVENTS IN 'LAPTOP-DK2NTJPL-bin.000001'查看日志内容,发现Pos从155增加到461:
这时候我们模仿误删数据,将新增的一条数据删了:
然后恢复,执行mysqlbinlog LAPTOP-DK2NTJPL-bin.000001 --start-position=155 --stop-position=461 -v | mysql -uroot -p123456 db02;可以发现,刚才误删的数据恢复了:
