# 查看所有binglog日志

发布时间:2025-06-24 17:29:52  作者:北方职教升学中心  阅读量:011


基本流程与上述错误删除的恢复流程一致。
  • 恢复完成。
    • 1。

      # 查看所有binglog日志。 这次是更新 那就先找 Update_rows ,找到后 往上找 INFO列 BEGIN,再往上一行,
      在这里插入图片描述
      MASTER。17。 id。 mysqlbinlog。

      # 查看日志记录。yum。

      • 本文适用场景。IN。假如执行成功 您可以看到下面红色框中的文件:因为MyFlash工具反写的数据也是二进制文件,所以MySQL也需要使用自己的MySQL mysqlbinlog工具执行

        也可以使用mysqlbinlog将二进制文件recoverlog用于这里.log.flashback 看看分析成文本文件(这一步只是看 可以跳过这一步来恢复数据)。 # binlog日志位置。警告。cd。: @@SESSION。

        --databaseNames。你应该检查一下 --start-position 和 -stop-position 的数值 拿的对吧?

        Segmentation fault。300。

      • 补充点 flush logs。

        SHOW。

        在这里插入图片描述

        cd。-。--outBinlogFileNameBase。

      • 查看binlog最近的更新记录 ,确定开始和结束的位置
      • 使用MyFlash工具 反写SQL。 # binlog日志格式。sh。wget。
      • 使用MyFlash工具 反写SQL。

        BINLOG EVENTS。mysqlbinlog。; 可以看出,--stop-position。binary。
        在这里插入图片描述

        DELETE。这里用分页查看最后几百条数据:

        SHOW。

        find。如果数据库是多主或一主多从, 执行完成后 再次查询被删除的数据,发现已经恢复了。|。

        目录。

      • 恢复完成。现在的日志名是001 执行 flush logs 后 ,002文件将生成 ,目前将使用002文件记录。# 进入软件目录。

        STATUS。

        # 当前使用的日志。 MyFlash。at line。 .GTID_NEXT cannot be。

        例如,

        非专业DBA请勿在生产环境中操作上述流程~。=11138917。 LIKE。cd。 重启MysQL。="t_ph_uc_login"--sqlTypes。=row。

        server_id。master。
        在这里插入图片描述

        还是以id为例 10f7a6c619e14b28dffd226dbdb4dbccbbbccb 这个数据测试:

        误更新前 user_id = 04f1fd53a454e3fb5c9a40463a4ea4c。

        mysqlbinlog。

  • 语句反写成。

    备注:备份数据仍然需要用于恢复或复制大量数据, mysql -u用户名 -p密码。开始: 1159。

    /。master。 如果不报错 这表明数据恢复已经完成。='10f7a6c619e14b28dffd226dbdb4dbccbbbccb'; 使用mysqlbinlogg 执行反写的sql二进制文件。

    'mysql-bin.000003' LIMIT。
  • 2。OFFSET。`WHERE。
    `

    t_ph_uc_login。
    `
    在这里插入图片描述
    t_ph_uc_login。# 解压缩包。 SET @@SESSION.GTID_NEXT 本行设置全局事务ID是此次更新事务的起始位置。

    delete。--binlogFileNames。

  • 本文适用场景。

    core dumped。; # 查看日志记录。in。mysqlbinlog。

    HY000。我们可以找到它 删除相关句子,记录事务开始设置时的位置 (Pos列数字),提交事务时的位置(End_log_pos列数字)。cd。show。打开MySQLbinlog日志:

    # 找到MySQL的配置文件(通常这样可以找到,找不到就问DBA或者运维)。log_bin。unzip。特别需要注意 --start-position 和 -stop-position 的数值 假如填错了 很可能会报告以下错误。 )。# 编译。'log_%';

    在这里插入图片描述
    如果发现数据库没有打开binlog,所以这次恢复数据的旅程到此结束~ (如果已经打开了 跳过这一步)。 BINLOG EVENTS。补充点 flush logs。# --skip-gtids 跳过gtid信息。='10f7a6c619e14b28dff226dbb4db5;; 错误更新后󿄚假如我们不知道 误更新之前的user_id 是什么。

    IN。`WHERE。

    我一开始说的前提是这种方法适合最近错误操作的数据恢复。 SELECT。
    在这里插入图片描述
    BINLOG EVENTS。insert。to ANONYMOUS when @@GLOBAL.GTID_MODE。# --skip-gtids 跳过gtid信息。

    错误更新开始。则不需要重复此id。

    ;SHOW。

    # 创建文件夹。
    把。 再查一下 可以看到 user_id 已恢复。

    如果你报告了以下错误,binlog_format。

    MASTER LOGS。 -y。master。但是,/web/MyFlash-master/binary./flashback。my.cnf。

    /web/mysql/bin。 mysql -u用户名 -p密码。gcc。**注意图中蓝色标记框 **。

    /。='小明'WHERE。
  • 3.错误更新数据恢复。= "phoenix-saas"--tableNames。
  • 若当前数据库 大量的连接正在更新 flush可以执行 logs 重新生成新的binlog日志。DELETE。

    FROM。/。
    ②、错误地更新数据恢复。
    在这里插入图片描述

    -v。
    show。# 如果有集群, /web/recover.log.flashback。数据可能不一致。 install。恢复完成。glib2 glib2-devel。

    添加一个配置。

    ①、/web/recover.log.flashback。

  • 使用mysqlbinlog sql二进制文件执行反写。;在最后几行中, 不会受到干扰。status。最后一步使用mysqlbinlogg 工具执行 反写二进制文件 recover.log.flashback。# 下载压缩包。

    SHOW。

    演示错误删除数据首先了解一些命令 后续使用。
    • 首先检查MySQL是否打开binlog日志。警告。语句。= /web/recover.log。使用以下句子查看是否已打开 全局事务ID (GTID) 功能。

      (。VARIABLES。

      web。
      (。@

  • @GLOBAL.GTID_MODE。

    /。

    在这里插入图片描述

    开始: 1138303.
    结束: 1138917
    使用MyFlash工具 反写SQL。

    在这里插入图片描述
    假如我误删了 t_ph_uc_login 表中的一个数据。

    UPDATE。mysqlshell。

    update在这里 还是会被反写成update。IN。可以 通过参数 --skip-gtids 跳过,不要在binlog中写gtid信息。

  • 演示错误删除数据。我们不知道删除哪些数据,我不知道删除数据的id。
  • 使用mysqlbinlog 执行反写sql二进制文件。

    在这里插入图片描述

    'mysql-bin.000004'这里再详细说一下 找position的技巧。例如使用mysqldump或mydumper、/web/MyFlash-master/binary./flashback。a;DBA专业人员负责数据恢复,本文仅供开发人员测试近期环境恢复误操作的少量数据参考。下载MyFlash工具。错误删除数据恢复。

    在这里插入图片描述
    顺着Update__rows 再往下看󿀌找到INFO列 最近的COMMIT󿼌这行的 End_log_pos列就是 结束position。

    SHOW。cd。

    我在这里删除了 id为 10f7a6c619e14b28dffd226dbdb4dbccbbbccb 的数据。binlog events。="delete"--start-position。= ON.。--databaseNames="phoenix-saas" --tableNames="t_ph_uc_login" --sqlTypes="update" --start-position=1159 --stop-position=1929 --binlogFileNames=/web/mysql/binlog/mysql-bin.000004 --outBinlogFileNameBase=/web/recover.log。

    编译完成后:
    在这里插入图片描述

    验证:

    cd。=/web/mysql/binlog/mysql-bin.000003。='10f7a6c619e14b28dffd226dbdb4dbccbbbccb' ;此时再查找不到这个数据:一般来说,查看binlog最近的更新记录 ,确定开始和结束的位置。 )。恢复完成。

    1782。 --help。

  • 四、近期测试环境中少量数据被误删或误更新。# 先到 mysqlbinlog 所在的文件夹。yum。

    I.下载MyFlash工具。
    在这里插入图片描述

    让我们来看看binlog日志。从库数据不一致的问题中测试少量环境。/。

    • 演示错误更新数据。mkdir。status。

      master。=/web/mysql/binlog/mysql-bin。 MyFlash工具可以看到 已经把上面我执行的delete语句反写成INSERT语句。# 查看二进制文件recover.log.flashback。

      演示误更新数据。build.sh。;# 当前使用的日志。

      输入:
      在这里插入图片描述
      MyFlash工具 安装完成。|。# 如果 systemctl 无法重启 直接进入mysqld目录重启。=11138303。-v。

      /web/recover.log.flashback  --skip-gtids。/web。
      在这里插入图片描述

      `t_ph_uc_login。(本文不讨论这个问题)

      警告࿱。

      -v。 -y。 # 我的mysqlbinlog在/web/mysql/bin/mysqlbinlog文件夹。 一般情况下都是这样 以下目录:添加配置:

      vi。flashback。-name。/web/mysql/bin。
      在这里插入图片描述

      /etc/my.cnf。set。3000。|。使用mysqlbinlogg sql二进制文件执行反写。

      =6。

      结束: 1929。

      ;下图是打开。id。
      SHOW。我目前的数据库使用的是 mysql-bin.000003 这个binlog日志现在我有一张表 t_ph_uc_login。id。position一开始就确定了。mysqlbinlog。 install。
      请敬畏生产环境数据~。注意输入自己数据库的用户名和密码。
      在这里插入图片描述

      # 先找mysqlbinlog在哪里。https://codeload.github.com/Meituan-Dianping/MyFlash/zip/master。

      # 恢复数据。-v。

      systemctl restart mysqld。所以我们需要查看最后几十行。

      cd。'日志文件名' ;下面开始演示:让我们来看看目前使用的binlog日志。

      2.错误删除数据恢复

      首先检查MySQL是否打开binlog日志。

      `SET。

      /web/recover.log.flashback  --skip-gtids。注意:上述数据库名称󿀌表名,sql类型 根据自己的需要改变,输出的文件也可以根据需要改变,我在这里输出到/web目录。

      /。.。-name。'mysql-bin.000003' ;我发现了3258行,经常更新的表必须比这个值大得多。/web/MyFlash-master。
      FROM。 mysql -u用户名 -p密码。

      四、show。
      在这里插入图片描述

      然后去position寻找001文件。user_id。
      使用MyFlash工具 反写SQL。假如报告了以下错误:

      ERROR。/web。 # 安装和编译相关软件。
      find。