记录一次mysql 误操作事件,通过binlog进行数据恢复

本文详细介绍MySQL V5.7版本下数据误删后的恢复流程,包括使用binlog和备份文件两种恢复方案,以及恢复过程中的注意事项,适用于数据库管理员和技术人员。

记录一次意外情况,具体什么原因嘛,你懂的

mysql V5.7 误操作的数据恢复
  • 恢复数据的两种方案,仅供参考
  • 使用binlog恢复数据.
  • 每天有进行定时备份的,可以选择备份文件进行恢复.(备份的数据不可能是误操作之前刚好备份下来的,所以可以手动还原备份文件,然后使用binlog文件恢复误操作后一段时间的数据)
  1. 前提条件 mysql 启用了 binlog 才能进行数据恢复
  2. 查看是否开启,如果是OFF 的话就不用往下看了
    show variables like 'log_bin';
    

在进行数据恢复之前最好是执行以下以下命令:
flush logs;
将数据写入到binlog文件,然后重新生成一个binlog文件.然后在根据之前的binlog文件进行分析

可以将二进制文件解码后输出缓存文件进行分析
  1. 导出到文件进行sql分析
mysqlbinlog  --no-defaults -vv --skip-gtids -v --base64-output='decode-rows' -d XXX binlog.000004 > temp.sql

–no-defaults 默认charset问题
-vv 参数为查看具体SQL语句及备注。
–base64-output=decode-rows 参数为解析Binlog日志文件。
-v 从binlog中重建sql语句
–skip-gtids 不保留全局事务标识符;而是使服务器像执行事务一样执行事务
-d 指定数据库

  1. 查询指定关键字
mysqlbinlog -v --base64-output='decode-rows' binlog.000004 |grep -B11 'UPDATE'
  1. 通过日志信息的也可以写语句查询
show binlog events in 'binlog.000004';
or
show binlog events in 'binlog.000004' from XXX limit 0,10;

XXX 是 position 信息
数据恢复
  • 根据sql的起始位置恢复
mysqlbinlog  --no-defaults -vv --skip-gtids --start-position=XXX --stop-position=XXX binlog.000004  -d XXX | mysql -uroot -p

–no-defaults 默认charset问题
-vv 参数为查看具体SQL语句及备注。
–skip-gtids 不保留全局事务标识符;而是使服务器像执行事务一样执行事务
-d 指定数据库
–start-position sql语句起始位置 (可以通过分析二进制文件中的伪sql中得到位置信息)
–stop-position sql语句的结束位置 (可以通过分析二进制文件中的伪sql中得到位置信息)
| mysql -uroot -p 直接登录数据库 -u 用户

  • 也可以使用时间段进行恢复
mysqlbinlog  --no-defaults -vv --skip-gtids --start-datetime="yyyy-12-25 10:19:19" --stop-datetime="yyyy-12-25 10:38:07" binlog.000004  -d XXX | mysql -uroot -p

–no-defaults 默认charset问题
-vv 参数为查看具体SQL语句及备注。
–skip-gtids 不保留全局事务标识符;而是使服务器像执行事务一样执行事务
-d 指定数据库
–start-datetime sql语句开始时间位置 (可以通过分析二进制文件中的伪sql中得到开始时间信息)
–stop-datetime sql语句的结束时间位置 (可以通过分析二进制文件中的伪sql中得到结束时间信息)
| mysql -uroot -p 直接登录数据库 -u 用户

- 注意事项
  • 多个 binlog.000000 文件一定要按顺序来进行数据恢复 (可能会导致你之前创建或修改的表结构,后面没有就会直接报错)
  • 出现语句指定报错的情况可以使用强制执行 -f:强行执行sql语句
mysqlbinlog  --no-defaults -vv --skip-gtids --start-datetime="yyyy-12-25 10:19:19" --stop-datetime="yyyy-12-25 10:38:07" binlog.000004  -d XXX | mysql -f -uroot -p
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值