怎么通过日志文件恢复MySQL数据

    1、找到最新的 binlog 文件

    进入 mysql 命令行执行如下命令

    mysql>
    show master status;

    +------------------+-----------+
    | Log_name | File_size |
    +------------------+-----------+
    | binlog.000001 | 967 |
    | binlog.000002 | 965 |
    +------------------+-----------+

    一般最新的编号大,上面最新的就是 binlog.000002

    2、找到我们想恢复数据在日志文件里的开始结束位置

    这里有两种方式来确定开始位置和结束位置,一种是使用时间作为开始结束,一种是使用日志的 position 作为开始结束位置

    2.1、使用时间范围

    如何通过日志文件恢复MySQL数据

    通过 mysqlbinlog mysql-bin.000002 命令查看日志内容,然后找到删除的时间点:

    # at 131708213
    #210610 11:27:01 server id 1 end_log_pos 131708311 CRC32 0x0fc755e2 Table_map: `loongwind_base`.`xxxx` mapped to number 139
    # at 131708311
    #210610 11:27:01 server id 1 end_log_pos 131708411 CRC32 0xa91616b9 Write_rows: table id 139 flags: STMT_END_F

    BINLOG '

    BffBYBMBAAAAYgAAAJe12QcAAIsAAAAAAAEADmR4bWhfYmFzZV9oenN5ABpkeF9zeV9hc3NldHNf
    ZXh0ZW5kc19jb3B5MQAICAgIDwgSCBIEAAgAAPgBAQACA/z/AOJVxw8=
    BffBYB4BAAAAZAAAAPu12QcAAIsAAAAAAAMAAgAI/wDRAwAAm1M8AUIAAADRUjwBCgAAAFYL5gAM
    AOWFrOWuieacuuWFs7EBAADbwZkAmama6E+xAQAA28GZAJmpmuhPuRYWqQ==
    '
    /*!*/;

    然后确定上次备份的时间点,如果通过日志找不到上次备份的时间点可以填一个你记忆中确定小于上次备份的时间点

    2.2、使用 position 范围

    使用如下命令查看日志 event 的 position

    mysql -uroot -p'
    password'
    -e "
    show binlog events in '
    binlog.000002'
    "
    |grep -i '
    DROP TABLE'

    执行结果如下:

    binlog.000002 820474948 Query 1 820475111 use `loongwind_base`;
    DROP TABLE IF EXISTS `undo_log` /* generated by server */ /* xid=11790691 */

    即删除的 position 为 820474948

    还是通过上述命令,替换关键字查找到上次备份的 position 点

    3、恢复3.1 通过时间恢复mysqlbinlog --no-defaults --database=loongwind_base --start-datetime="
    2021-06-07 09:00:00"
    --stop-datetime="
    2021-06-10 16:37:58"
    binlog.000005 | mysql -uroot -p'
    password'
    -s -N -f -D loongwind_base

    其中 dxmh_base_hzsy 是数据库名称

    3.2 通过 position 恢复mysqlbinlog --start-position=1178 --stop-position=2751 -d dxmh-sy binlog.000002|mysql -uroot -p'
    password'
    -s -N -f -D loongwind_base
    loongwind_base 为数据库名称

    如果实在找不到开始时间或者开始 position 也可以不写 --start-datetime 或 --start-position ,这样就是用这个日志文件的开始一直恢复到结束,为了防止与已有数据的冲突,需要加上 -f 即 force 跳过错误继续往下执行。



    MySQL是一种常用的关系型数据库,在数据恢复方面也有很多可靠的方法。如果数据损坏,可以通过MySQL日志文件来进行检修和恢复。本文介绍如何通过日志文件恢复MySQL数据,包括日志文件的种类和使用方法。
    一、MySQL日志文件的种类
    MySQL有三种日志文件:二进制日志、错误日志和查询日志。其中,二进制日志最为重要,因为它包含了所有执行的SQL语句。错误日志记录了错误信息和警告信息。查询日志记录不同用户的查询操作以及执行时间。
    二、日志文件的备份与还原
    数据库备份是数据恢复的关键步骤,因为它保证在数据损坏时可以恢复原始状态。备份可以通过物理备份和逻辑备份来进行。物理备份是指将数据文件和日志文件复制到备份存储设备上。逻辑备份是指将数据导出成文本形式并存储在备份存储设备上。
    当需要恢复数据时,可以将备份文件复制到目标系统上,并执行恢复操作。在执行恢复操作之前,需要先停止MySQL服务,并备份目标系统的MySQL数据和日志文件。此后再将备份文件导入到目标系统上并启动MySQL服务,即可完成数据恢复操作。
    三、使用日志文件恢复数据
    MySQL日志文件中可以记录数据库中的所有操作,不论是删除、插入还是更新。如果遇到了数据损坏,可以通过对日志文件的分析来找到修复方案。MySQL恢复数据的重要步骤如下:
    1. 在MySQL的一般日志文件中查找出现问题的日期和时间。
    2. 找到此时间之前的备份文件。这是安全的,因为数据损坏时,日志文件中可能会记录大量的错误和警告信息。
    3. 启动MySQL并导入备份数据。
    4. 停止MySQL并将二进制日志文件移动到一个不存在的地方。
    5. 启动MySQL并将二进制文件重新启用。
    6. 在这个连接中应用从日志文件中删除的数据。
    通过这些步骤,就可以轻松恢复MySQL数据。日志文件中记录的每个操作都很重要,因此在日常操作中,一定要定期备份MySQL数据库和日志文件,以免发生数据损坏时无法恢复数据。
    总结:
    通过本文的介绍,我们可以看到如何通过日志文件来恢复MySQL数据库。备份和还原是数据恢复的关键步骤,而正确分析和使用日志文件也是必不可少的。MySQL的日志文件种类多样,包括二进制日志、错误日志和查询日志。本文通过详细的步骤介绍,为读者提供了一些实用的技巧和方法,以便在需要恢复MySQL数据时更加高效。