zoukankan      html  css  js  c++  java
  • mysql主从之binlog日志

     mysql的binlog说明

    主从复制依赖于二进制日志文件,简称为binlog

    binlog里面有存放了偏移信息

    mysql主库binlog信息查看命令

    [root@master ~]#  mysql -u root -p123456   #登录到mysql里
    mysql: [Warning] Using a password on the command line interface can be insecure.
    Welcome to the MySQL monitor.  Commands end with ; or g.
    Your MySQL connection id is 4
    Server version: 5.7.26-log MySQL Community Server (GPL)
    
    Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.
    
    mysql> show master logs;                #binlog列表查看,也可以直接到/data/mysql查看
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-bin.000001 |       177 |
    | master-bin.000002 |       398 |
    +-------------------+-----------+
    2 rows in set (0.00 sec)
    
    mysql> show master status;   #记录目前的binlog+偏移信息
    +-------------------+----------+--------------+------------------+-------------------+
    | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +-------------------+----------+--------------+------------------+-------------------+
    | master-bin.000002 |      398 |              |                  |                   |       #398即是偏移
    +-------------------+----------+--------------+------------------+-------------------+

     创建一个库和表,观察日志

    mysql> create database darren;
    Query OK, 1 row affected (0.01 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | darren             |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    5 rows in set (0.00 sec)
    mysql> use darren;
    Database changed
    mysql> create table test (id int);
    Query OK, 0 rows affected (0.01 sec)
    mysql> show tables;
    +------------------+
    | Tables_in_darren |
    +------------------+
    | test             |
    +------------------+

     查看binlog日志

    mysql> mysql> show binlog events in 'master-bin.000002';  #全部查看
    +-------------------+-----+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------+
    | Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                                                                                                                 |
    +-------------------+-----+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------+
    | master-bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.26-log, Binlog ver: 4                                                                                |
    | master-bin.000002 | 123 | Previous_gtids |         1 |         154 |                                                                                                                      |
    | master-bin.000002 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                 |
    | master-bin.000002 | 219 | Query          |         1 |         398 | ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
    | master-bin.000002 | 398 | Anonymous_Gtid |         1 |         463 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                 |
    | master-bin.000002 | 463 | Query          |         1 |         563 | create database darren                                                                                               |
    | master-bin.000002 | 563 | Anonymous_Gtid |         1 |         628 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'                                                                                 |
    | master-bin.000002 | 628 | Query          |         1 |         732 | use `darren`; create table test (id int)                                                                             |
    +-------------------+-----+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------+
    mysql> mysql> show binlog events in 'master-bin.000002' limit 2;   只查看前两个语句
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | master-bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.26-log, Binlog ver: 4 |
    | master-bin.000002 | 123 | Previous_gtids |         1 |         154 |                                       |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    2 rows in set (0.00 sec)
    
    mysql> show binlog events in 'master-bin.000002' from 398;     #查看偏移量是398以后的语句
    +-------------------+-----+----------------+-----------+-------------+------------------------------------------+
    | Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                                     |
    +-------------------+-----+----------------+-----------+-------------+------------------------------------------+
    | master-bin.000002 | 398 | Anonymous_Gtid |         1 |         463 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'     |
    | master-bin.000002 | 463 | Query          |         1 |         563 | create database darren                   |
    | master-bin.000002 | 563 | Anonymous_Gtid |         1 |         628 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'     |
    | master-bin.000002 | 628 | Query          |         1 |         732 | use `darren`; create table test (id int) |
    +-------------------+-----+----------------+-----------+-------------+------------------------------------------+
    mysql> mysql> show binlog events in 'master-bin.000002' from 398 limit 1;   #查看偏移量为398的前一条
    +-------------------+-----+----------------+-----------+-------------+--------------------------------------+
    | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
    +-------------------+-----+----------------+-----------+-------------+--------------------------------------+
    | master-bin.000002 | 398 | Anonymous_Gtid | 1 | 463 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
    +-------------------+-----+----------------+-----------+-------------+--------------------------------------+

    直接使用命令查看二进制文件

    [root@master ~]# cd /data/mysql/

    [root@master mysql]# mysqlbinlog master-bin.000002

    /*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
    /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
    DELIMITER /*!*/;
    # at 4
    #190703 11:37:51 server id 1  end_log_pos 123 CRC32 0x7ae93041     Start: binlog v 4, server v 5.7.26-log created 190703 11:37:51 at startup
    # Warning: this binlog is either in use or was not closed properly.
    ROLLBACK/*!*/;
    BINLOG '
    z8scXQ8BAAAAdwAAAHsAAAABAAQANS43LjI2LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
    AAAAAAAAAAAAAAAAAADPyxxdEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
    AUEw6Xo=
    '/*!*/;
    # at 123
    #190703 11:37:51 server id 1  end_log_pos 154 CRC32 0x81e643cc     Previous-GTIDs
    # [empty]
    # at 154
    #190703 11:50:19 server id 1  end_log_pos 219 CRC32 0x0a3cc640     Anonymous_GTID    last_committed=0    sequence_number=1    rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 219
    #190703 11:50:19 server id 1  end_log_pos 398 CRC32 0xbd85ba24     Query    thread_id=3    exec_time=0    error_code=0
    SET TIMESTAMP=1562169019/*!*/;
    SET @@session.pseudo_thread_id=3/*!*/;
    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 utf8 *//*!*/;
    SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;
    SET @@session.lc_time_names=0/*!*/;
    SET @@session.collation_database=DEFAULT/*!*/;
    ALTER USER 'root'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9'
    /*!*/;
    # at 398
    #190703 12:18:27 server id 1  end_log_pos 463 CRC32 0x674f9414     Anonymous_GTID    last_committed=1    sequence_number=2    rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 463
    #190703 12:18:27 server id 1  end_log_pos 563 CRC32 0x2106de6f     Query    thread_id=4    exec_time=0    error_code=0
    SET TIMESTAMP=1562170707/*!*/;
    create database darren
    /*!*/;
    # at 563
    #190703 12:19:26 server id 1  end_log_pos 628 CRC32 0xbf9b983e     Anonymous_GTID    last_committed=2    sequence_number=3    rbr_only=no
    SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
    # at 628
    #190703 12:19:26 server id 1  end_log_pos 732 CRC32 0x773a1598     Query    thread_id=4    exec_time=0    error_code=0
    use `darren`/*!*/;
    SET TIMESTAMP=1562170766/*!*/;
    create table test (id int)
    /*!*/;
    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*/;

    增删改查,然后查看binlog

    mysql> insert into test values (1);    #写入一个数据,有事务的提交
    Query OK, 1 row affected (0.01 sec)
    mysql> select * from test;              #查一个数据
    +------+
    | id   |
    +------+
    |    1 |
    +------+
    1 row in set (0.00 sec)
    
    mysql> update mysql> update test set id  1;  #改一个数据,有事务的提交
    Query OK, 1 row affected (0.00 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    
    mysql> select * from test;   
    +------+
    | id   |
    +------+
    |    3 |
    +------+
    1 row in set (0.00 sec)
    mysql> delete from test;                    #删除数据,有事务的提交
    Query OK, 1 row affected (0.00 sec)
    mysql> show binlog events in 'master-bin.000002' from 463;    #查看日志
    +-------------------+------+----------------+-----------+-------------+------------------------------------------+
    | Log_name          | Pos  | Event_type     | Server_id | End_log_pos | Info                                     |
    +-------------------+------+----------------+-----------+-------------+------------------------------------------+
    | master-bin.000002 |  463 | Query          |         1 |         563 | create database darren                   |
    | master-bin.000002 |  563 | Anonymous_Gtid |         1 |         628 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'     |
    | master-bin.000002 |  628 | Query          |         1 |         732 | use `darren`; create table test (id int) |
    | master-bin.000002 |  732 | Anonymous_Gtid |         1 |         797 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'     |
    | master-bin.000002 |  797 | Query          |         1 |         871 | BEGIN                                    |
    | master-bin.000002 |  871 | Table_map      |         1 |         920 | table_id: 108 (darren.test)              |
    | master-bin.000002 |  920 | Write_rows     |         1 |         960 | table_id: 108 flags: STMT_END_F          |
    | master-bin.000002 |  960 | Xid            |         1 |         991 | COMMIT /* xid=44 */                      |
    | master-bin.000002 |  991 | Anonymous_Gtid |         1 |        1056 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'     |
    | master-bin.000002 | 1056 | Query          |         1 |        1130 | BEGIN                                    |
    | master-bin.000002 | 1130 | Table_map      |         1 |        1179 | table_id: 108 (darren.test)              |
    | master-bin.000002 | 1179 | Update_rows    |         1 |        1225 | table_id: 108 flags: STMT_END_F          |
    | master-bin.000002 | 1225 | Xid            |         1 |        1256 | COMMIT /* xid=49 */                      |
    | master-bin.000002 | 1256 | Anonymous_Gtid |         1 |        1321 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'     |
    | master-bin.000002 | 1321 | Query          |         1 |        1395 | BEGIN                                    |
    | master-bin.000002 | 1395 | Table_map      |         1 |        1444 | table_id: 108 (darren.test)              |
    | master-bin.000002 | 1444 | Delete_rows    |         1 |        1484 | table_id: 108 flags: STMT_END_F          |
    | master-bin.000002 | 1484 | Xid            |         1 |        1515 | COMMIT /* xid=52 */                      |
    +-------------------+------+----------------+-----------+-------------+------------------------------------------+

    #错误sql不会写入binlog

    mysql主库binlog清空,测试教学环境用,线上环境慎用。或者初搭建mysql主从用

    mysql> reset master;
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show master logs;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-bin.000001 |       154 |
    +-------------------+-----------+
    1 row in set (0.00 sec)
    
    mysql> show binlog events in 'master-bin.000001' ;
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | master-bin.000001 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.26-log, Binlog ver: 4 |
    | master-bin.000001 | 123 | Previous_gtids |         1 |         154 |                                       |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+

    mysql主库刷新binlog,一般来说也是测试环境用

    mysql> flush logs;               #新增一个日志
    Query OK, 0 rows affected (0.01 sec)
    
    mysql> show master logs;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-bin.000001 |       202 |
    | master-bin.000002 |       154 |
    +-------------------+-----------+
    2 rows in set (0.01 sec)
    
    mysql> use darren;
    Database changed
    mysql> insert into test values (1);
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show master logs;
    +-------------------+-----------+
    | Log_name          | File_size |
    +-------------------+-----------+
    | master-bin.000001 |       202 |
    | master-bin.000002 |       413 |
    +-------------------+-----------+
    2 rows in set (0.00 sec)
    mysql> show binlog events in 'master-bin.000001' ;
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | master-bin.000001 | 4 | Format_desc | 1 | 123 | Server ver: 5.7.26-log, Binlog ver: 4 |
    | master-bin.000001 | 123 | Previous_gtids | 1 | 154 | |
    | master-bin.000001 | 154 | Rotate | 1 | 202 | master-bin.000002;pos=4 |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    
    
    mysql> show binlog events in 'master-bin.000002' ;   #查看日志内容
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | Log_name          | Pos | Event_type     | Server_id | End_log_pos | Info                                  |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+
    | master-bin.000002 |   4 | Format_desc    |         1 |         123 | Server ver: 5.7.26-log, Binlog ver: 4 |
    | master-bin.000002 | 123 | Previous_gtids |         1 |         154 |                                       |
    | master-bin.000002 | 154 | Anonymous_Gtid |         1 |         219 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'  |
    | master-bin.000002 | 219 | Query          |         1 |         293 | BEGIN                                 |
    | master-bin.000002 | 293 | Table_map      |         1 |         342 | table_id: 108 (darren.test)           |
    | master-bin.000002 | 342 | Write_rows     |         1 |         382 | table_id: 108 flags: STMT_END_F       |
    | master-bin.000002 | 382 | Xid            |         1 |         413 | COMMIT /* xid=62 */                   |
    +-------------------+-----+----------------+-----------+-------------+---------------------------------------+

    测试数据删除,让两个数据库的内容保持一致

    mysql> show binlog events in 'master-bin.000002 ^C;
    mysql> drop database darren;
    Query OK, 1 row affected (0.02 sec)
    
    mysql> reset master;
    Query OK, 0 rows affected (0.01 sec)
    作者:梦中泪
    关于作者:云计算,linux,虚拟化,存储

    ---------------------------------------------------------------------------

    个性签名:我以为我很颓废,今天我才知道,原来我早报废了。

    如果觉得本篇文章最您有帮助,欢迎转载,且在文章页面明显位置给出原文链接!记得在右下角点个“推荐”,博主在此感谢!

  • 相关阅读:
    查看系统的所有port的状态
    python技巧26[python的egg包的安装和制作]
    python类库31[进程subprocess与管道pipe]
    [BuildRelease Management]hudson插件
    python类库31[使用xml.etree.ElementTree读写xml]
    开机自动运行VMWare
    python实例26[计算MD5]
    2021年最新大厂php+go面试题集(四)
    Jumpserver开源跳板机系统
    报错:ImportError: libmysqlclient.so.20: cannot open shared object file: No such file or director(亲测可用)
  • 原文地址:https://www.cnblogs.com/zyxnhr/p/11130000.html
Copyright © 2011-2022 走看看