MySQL 中 binlog方式数据恢复操作模拟

binlog方式

整体流程

若是生产出现,完整流程大致如下:

image.png

操作记录仅用于学习

记录中仅含一些关键部分,诸如:根据binlog生成二进制sql文件、执行生成的二进制文件恢复数据等操作

操作过程相较于上述整体流程做了对应的简化

操作过程:
  • 数据被误删啦
    image-cgno.png

    可以看到mysql客户端的执行日志时间:

image-ssde.png

同时通过对应的 sql 也看到了这条删除操作

image-wmru.png

  • 找到binlog日志存储目录:

    未做其他配置,日志在binlog默认目录下(/var/lib/mysql/)

    image-qwwk.png

  • 根据日志执行时间,取出对应的binlog

    正常数据恢复应该是整个表进行恢复,在binlog日志中找到当前表最开始的操作时间节点作为开始节点

    根据表最开始时间节点为基础为开始时间;误删操作为结束时间

    使用 mysqlbinlog 命令生成一个 表操作记录二进制sql文件

    执行二进制文件完成对应表数据到截止时间时的表内数据状态

    此处简化了筛选过程,直接将这条数据insert的时间节点取出作为时间段

    image-ztne.png

    mysqlbinlog --start-datetime="2024-08-30 10:39:00" --stop-datetime="2024-08-30 15:10:20" /var/lib/mysql/mysql-binlog.000003 > output.sql
    

    image-hkmo.png

    可以看到,我们的日志二进制文件已经取出来了

  • 执行恢复

    image-tmko.png

image-nbnj.png