前言
通过这边文章你能收获:
没有接触过mysql使用binLog恢复数据的朋友们可以对如何使用binLog恢复数据
有个入门级的认识
一、实际case
目前存在entity_storage_0库以及库中的表entity_detail,
1、张三执行插入指令插入了一条数据
2、李四以为是测试库,把entity_detail表中的数据清空了
3、现在需要恢复张三插入的数据,如何恢复?
二、确定思路
step1、确定要恢复的数据范围
step2、确定恢复数据的binLog文件名
step3、找出binLog中对应数据的记录信息
step4、执行恢复指令
三、相关指令
show MASTER status;
flush log
show BINLOG EVENTS in '你的binLog文件名';
./mysqlbinlog --start-position 起始position --stop-position 结束position -d 数据库名称 /var/lib/mysql/目标binLog文件 | mysql -u数据用户名-p数据库密码 目标数据库名称
四、开始应用
套用基本思路中的模型(通常我们会在回复数据前在客户端使用flush log指令刷一下日志文件
)
1、确认需恢复的数据范围
张三插入的那条记录
2、确定恢复数据的binLog文件名
在mysql客户端使用show master status
指令,查看当前的binLog
文件名(由于是测试使用,且没有flush log
,所以当前的file就是我们的目标binLog
文件,如果是mysql宕机或者其他场景,那么需要根据实际情况确认文件)
3、找出binLog中对应数据的记录信息
在mysql客户端使用show BINLOG EVENTS in 'binlog.000006';
指令,分析出需要执行的end_log_pos
4、执行恢复指令
在mysql的bin目录下,执行指令./mysqlbinlog --start-position 330 --stop-position 606 -d entity_storage_0 /var/lib/mysql/binlog.000006 | mysql -uroot -p111111 entity_storage_0
然后去数据库查看数据,可以发现数据正常恢复.
至此,入门小实例done!
参考资料
mysql官网 - https://dev.mysql.com/doc/refman/8.0/en/point-in-time-recovery-binlog.html