mysql通过日志恢复误删的数据

之前不小心删除了mysql的数据,搞了半天才恢复过来,现在记录一下之前的操作,以备日后用到。

1.检查mysql是否开启了binlog功能,使用数据库连接工具或者使用命令窗口登陆后数据库后,执行

show variables like '%log_bin%';
+---------------------------------+-----------------------------+
| Variable_name                   | Value                       |
+---------------------------------+-----------------------------+
| log_bin                         | ON                          |  //开关
| log_bin_basename                | /var/lib/mysql/binlog       | // 存放路径
| log_bin_index                   | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | ON                          |//  函数创建 
| log_bin_use_v1_row_events       | OFF                         |
| sql_log_bin                     | ON                          |//变更sql记录下来
+---------------------------------+-----------------------------+
  • log_bin:是否打开binlog功能,ON为打开,OFF为关闭,若是关闭了,那就无法通过binlog日志恢复数据了
  • log_bin_basename:是binlog日志的基本文件名,后面会追加标识来表示每一个文件
  • log_bin_index:是binlog文件的素引文件,这个文件管理了所有的binlog文件的目录
  • log_bin_trust_function_creators:限制存储过程,前面我们已经讲过了,这是因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,需要限制存储函数的创建、修改、调用
  • log_bin_use_v1_row_events此只读系统变量已弃用。ON表示使用版本1二进制日志行,OFF表示使用版本2二进制日志行(MySQL5.6的默认值为2)。

2. 查看当前数据库生成了哪些二进制日志文件。也是通过登陆数据库后操作

show binary logs;

一般删除的命令是在编号靠后面的文件中。

3.show binlog events 该语句用于查看日志中进行了哪些操作。

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

从上面可以看出在6277的位置开始删除了数据,然后到6362结束。所以可以执行以下语句将删除语句删除的数据。打开命令窗口执行:

mysqlbinlog --no-defaults  -v  --start-position=6277 --stop-position=6362 /soft/mysql/logs/mysql-bin.000001 >  /soft/mysql/logs/recovery.sql;

上面语句可以将删除的数据导出到指定的文件中。也可以按照时间段导出,可以执行mysqlbinlog --no-defaults  -v  --start-datetime="2023-12-19 18:10:00" --stop-datetime="2023-12-19 18:40:00" | grep delete /soft/mysql/logs/mysql-bin.000001 > recovery.sql。grep 后面可以接一些关键字查找。导出的数据格式是这样的

这是row模式下的数据,其他模式的话不知道怎么恢复。这些数据可以通过一些手段,将多余的字符去掉,然后改成insert语句执行就可以恢复了。往上说可以通过什么语句直接恢复之类的,反正没成功。我是通过insert语句重新插入恢复的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值