• mysql数据库通过binlog日志进行数据恢复


    mysql数据库通过binlog日志进行数据恢复


    1.需要开启binlog日志
    # vim my.cnf 配置如下选项,重启数据库,让数据库生成我们需要的binlog日志
    server-id = 206
    log-bin = mysql-bin
    expire_logs_days = 10
    binlog_format = row

    2.创建测试数据
    mysql> create database itpart;
    mysql> use itpart;
    mysql> create table users(id int auto_increment primary key, name varchar(200));
    # 插入数据
    mysql> insert into users(name) values('jack'),('tom'),('lily'),('lucy');

    mysql> select * from users;
    +----+------+
    | id | name |
    +----+------+
    |  1 | jack |
    |  2 | tom  |
    |  3 | lily |
    |  4 | lucy |
    +----+------+

    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000001 |      835 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    # 查看binlog日志的文件
    mysql> show binary logs;
    +------------------+-----------+
    | Log_name         | File_size |
    +------------------+-----------+
    | mysql-bin.000001 |       835 |

    3.删除表,然后通过binlog进行数据恢复
    > drop table users;

    # 查看binlog日志中记录的内容
    # cd /var/lib/mysql
    # gtid模式查看需要加参数 --base64-output=DECODE-ROWS -v
    # mysqlbinlog --base64-output=DECODE-ROWS -v --start-position=0 --stop-position=835 mysql-bin.000001


    [root@server01 mysql]# mysqlbinlog --base64-output=DECODE-ROWS -v --start-position=0 --stop-position=835 mysql-bin.000001
    mysqlbinlog: [Warning] option 'start-position': unsigned value 0 adjusted to 4
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #201103 16:50:14 server id 206  end_log_pos 123 CRC32 0xaa4b8247     Start: binlog v 4, server v 5.7.31-log created 201103 16:50:14 at startup
    # Warning: this binlog is either in use or was not closed properly.
    ROLLBACK/*!*/;
    # at 123
    #201103 16:50:14 server id 206  end_log_pos 154 CRC32 0xb3c39630     Previous-GTIDs
    # [empty]
    # at 154
    #201103 16:51:07 server id 206  end_log_pos 219 CRC32 0x617069ad     Anonymous_GTID    last_committed=0    sequence_number=1    rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 219
    #201103 16:51:07 server id 206  end_log_pos 319 CRC32 0x1bef97c7     Query    thread_id=12    exec_time=0    error_code=0
    SET TIMESTAMP=1604393467/*!*/;
    SET @@session.pseudo_thread_id=12/*!*/;
    SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
    SET @@session.sql_mode=1436549152/*!*/;
    SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
    /*!C utf8mb4 *//*!*/;
    SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=45/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    create database itpart
    /*!*/;

    # 从此处开始是我们插入表的操作

    # at 319
    #201103 16:51:41 server id 206  end_log_pos 384 CRC32 0x9236a8ba     Anonymous_GTID    last_committed=1    sequence_number=2    rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 384
    #201103 16:51:41 server id 206  end_log_pos 534 CRC32 0xd068dcb2     Query    thread_id=12    exec_time=0    error_code=0
    use `itpart`/*!*/;
    SET TIMESTAMP=1604393501/*!*/;
    create table users(id int auto_increment primary key, name varchar(200))
    /*!*/;
    # at 534
    #201103 16:52:54 server id 206  end_log_pos 599 CRC32 0x7ac60d6f     Anonymous_GTID    last_committed=2    sequence_number=3    rbr_only=yes
    /*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 599
    #201103 16:52:54 server id 206  end_log_pos 673 CRC32 0x529cfe02     Query    thread_id=12    exec_time=0    error_code=0
    SET TIMESTAMP=1604393574/*!*/;
    BEGIN
    /*!*/;
    # at 673
    #201103 16:52:54 server id 206  end_log_pos 726 CRC32 0xd98193ed     Table_map: `itpart`.`users` mapped to number 109
    # at 726
    #201103 16:52:54 server id 206  end_log_pos 804 CRC32 0x8b2d79ca     Write_rows: table id 109 flags: STMT_END_F
    ### INSERT INTO `itpart`.`users`
    ### SET
    ###   @1=1
    ###   @2='jack'
    ### INSERT INTO `itpart`.`users`
    ### SET
    ###   @1=2
    ###   @2='tom'
    ### INSERT INTO `itpart`.`users`
    ### SET
    ###   @1=3
    ###   @2='lily'
    ### INSERT INTO `itpart`.`users`
    ### SET
    ###   @1=4
    ###   @2='lucy'
    # at 804
    #201103 16:52:54 server id 206  end_log_pos 835 CRC32 0xc09cc5e4     Xid = 108
    COMMIT/*!*/;
    SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog */ /*!*/;
    DELIMITER ;
    # End of log file
    /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;


    4.使用binlog日志对mysql的数据库进行恢复操作

    mysqlbinlog  --start-position=319 --stop-position=835 --database=itpart  /var/lib/mysql/mysql-bin.000001 | /usr/bin/mysql -uroot -p密码 -v itpart

  • 相关阅读:
    Internet protocol optimizer
    SQl常用语句总结(持续更新……)
    让 步( 写的太好了!)
    让 步( 写的太好了!)
    让 步( 写的太好了!)
    $.ajax()参数详解及标准写法
    $.ajax()参数详解及标准写法
    $.ajax()参数详解及标准写法
    JQuery函数attr()和prop()的区别
    公司来了个傻员工,改变了所有聪明的员工
  • 原文地址:https://www.cnblogs.com/reblue520/p/13938138.html
Copyright © 2020-2023  润新知