5.6为例
logbin打开,找到路径
mysql> show global variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
mysql> show variables like '%log_bin%';
+---------------------------------+-----------------------------------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------------------------------+
| log_bin | ON |
| log_bin_basename | databases/data/mydata5470/mysql/mysql-bin |
| log_bin_index | databases/data/mydata5470/mysql/master-log-bin.index|
| log_bin_trust_function_creators | ON |
| log_bin_use_v1_row_events | ON |
| sql_log_bin | ON |
+---------------------------------+-----------------------------------------------------+
mysql> show variables like '%binlog_row_image%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| binlog_row_image | FULL |
+------------------+-------+
切日志记录当前binlog位置
mysql> flush logs;
mysql> show master status\G
*************************** 1. row ***************************
File: mysql-bin.000238
Position: 12345678
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 123-123-123-123,456-456-456-456
mysql> show master logs;
+------------------+------------+
| Log_name | File_size |
+------------------+------------+
| mysql-bin.000104 | 194 |
+------------------+------------+
mysql> create database test;
Query OK, 1 row affected (0.00 sec)
mysql> use test;
Database changed
mysql> create table t1 (id int primary key,info varchar(32));
Query OK, 0 rows affected (0.02 sec)
mysql> insert into test.t1 values(1,'a');
Query OK, 1 row affected (0.01 sec)
mysql> insert into t1 values(2,'b');
Query OK, 1 row affected (0.00 sec)
mysql> update t1 set info='c' where id=2;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> delete from t1 where id=1;
Query OK, 1 row affected (0.00 sec)
mysql> select * from t1;
+----+------+
| id | info |
+----+------+
| 2 | c |
+----+------+
(注意没有看到原始SQL)
mysql> show binlog events in 'mysql-bin.000104';
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------+
| mysql-bin.000104 | 4 | Format_desc | 6700070 | 123 | Server ver: 5.7.27-log, Binlog ver: 4 |
| mysql-bin.000104 | 123 | Previous_gtids | 6700070 | 194 | 09fb76ae-d2dd-11e9-a611-00163f00f11a:1-2073488 |
| mysql-bin.000104 | 194 | Gtid | 6700070 | 259 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073489' |
| mysql-bin.000104 | 259 | Query | 6700070 | 353 | create database test |
| mysql-bin.000104 | 353 | Gtid | 6700070 | 418 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073490' |
| mysql-bin.000104 | 418 | Query | 6700070 | 545 | use `test`; create table t1 (id int primary key,info varchar(32)) |
| mysql-bin.000104 | 545 | Gtid | 6700070 | 610 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073491' |
| mysql-bin.000104 | 610 | Query | 6700070 | 682 | BEGIN |
| mysql-bin.000104 | 682 | Table_map | 6700070 | 730 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 730 | Write_rows | 6700070 | 772 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 772 | Xid | 6700070 | 803 | COMMIT /* xid=13009150 */ |
| mysql-bin.000104 | 803 | Gtid | 6700070 | 868 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073492' |
| mysql-bin.000104 | 868 | Query | 6700070 | 940 | BEGIN |
| mysql-bin.000104 | 940 | Table_map | 6700070 | 988 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 988 | Write_rows | 6700070 | 1030 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 1030 | Xid | 6700070 | 1061 | COMMIT /* xid=13009151 */ |
| mysql-bin.000104 | 1061 | Gtid | 6700070 | 1126 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073493' |
| mysql-bin.000104 | 1126 | Query | 6700070 | 1198 | BEGIN |
| mysql-bin.000104 | 1198 | Table_map | 6700070 | 1246 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 1246 | Update_rows | 6700070 | 1296 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 1296 | Xid | 6700070 | 1327 | COMMIT /* xid=13009153 */ |
| mysql-bin.000104 | 1327 | Gtid | 6700070 | 1392 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073494' |
| mysql-bin.000104 | 1392 | Query | 6700070 | 1464 | BEGIN |
| mysql-bin.000104 | 1464 | Table_map | 6700070 | 1512 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 1512 | Delete_rows | 6700070 | 1554 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 1554 | Xid | 6700070 | 1585 | COMMIT /* xid=13009154 */ |
+------------------+------+----------------+-----------+-------------+-------------------------------------------------------------------------+
$ mysqlbinlog mysql-bin.000104
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#191218 14:33:10 server id 6700070 end_log_pos 123 CRC32 0x142ce0a9 Start: binlog v 4, server v 5.7.27-log created 191218 14:33:10
# Warning: this binlog is either in use or was not closed properly.
BINLOG '
Jsj5XQ8mPGYAdwAAAHsAAAABAAQANS43LjI3LWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAAXwAEGggAAAAICAgCAAAACgoKKioAEjQA
AangLBQ=
'/*!*/;
# at 123
#191218 14:33:10 server id 6700070 end_log_pos 194 CRC32 0x60254ef1 Previous-GTIDs
# 09fb76ae-d2dd-11e9-a611-00163f00f11a:1-2073488
# at 194
#191218 14:33:47 server id 6700070 end_log_pos 259 CRC32 0x8328abd1 GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073489'/*!*/;
# at 259
#191218 14:33:47 server id 6700070 end_log_pos 353 CRC32 0x87ad0591 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650827/*!*/;
SET @@session.pseudo_thread_id=3055425/*!*/;
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 test
/*!*/;
# at 353
#191218 14:34:24 server id 6700070 end_log_pos 418 CRC32 0x7ff1085c GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073490'/*!*/;
# at 418
#191218 14:34:24 server id 6700070 end_log_pos 545 CRC32 0xe24a80ef Query thread_id=3055425 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1576650864/*!*/;
create table t1 (id int primary key,info varchar(32))
/*!*/;
# at 545
#191218 14:34:31 server id 6700070 end_log_pos 610 CRC32 0x3a3f5558 GTID last_committed=2 sequence_number=3 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073491'/*!*/;
# at 610
#191218 14:34:31 server id 6700070 end_log_pos 682 CRC32 0xdbb72271 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650871/*!*/;
BEGIN
/*!*/;
# at 682
#191218 14:34:31 server id 6700070 end_log_pos 730 CRC32 0xc325bfc9 Table_map: `test`.`t1` mapped to number 404
# at 730
#191218 14:34:31 server id 6700070 end_log_pos 772 CRC32 0x6723da9f Write_rows: table id 404 flags: STMT_END_F
BINLOG '
d8j5XRMmPGYAMAAAANoCAAAAAJQBAAAAAAEABHRlc3QAAnQxAAIDDwKAAALJvyXD
d8j5XR4mPGYAKgAAAAQDAAAAAJQBAAAAAAEAAgAC//wBAAAAAWGf2iNn
'/*!*/;
# at 772
#191218 14:34:31 server id 6700070 end_log_pos 803 CRC32 0x95c983e8 Xid = 13009150
COMMIT/*!*/;
# at 803
#191218 14:34:37 server id 6700070 end_log_pos 868 CRC32 0x170dafd1 GTID last_committed=3 sequence_number=4 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073492'/*!*/;
# at 868
#191218 14:34:37 server id 6700070 end_log_pos 940 CRC32 0x436edc71 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650877/*!*/;
BEGIN
/*!*/;
# at 940
#191218 14:34:37 server id 6700070 end_log_pos 988 CRC32 0x07759bb2 Table_map: `test`.`t1` mapped to number 404
# at 988
#191218 14:34:37 server id 6700070 end_log_pos 1030 CRC32 0xaec1efb2 Write_rows: table id 404 flags: STMT_END_F
BINLOG '
fcj5XRMmPGYAMAAAANwDAAAAAJQBAAAAAAEABHRlc3QAAnQxAAIDDwKAAAKym3UH
fcj5XR4mPGYAKgAAAAYEAAAAAJQBAAAAAAEAAgAC//wCAAAAAWKy78Gu
'/*!*/;
# at 1030
#191218 14:34:37 server id 6700070 end_log_pos 1061 CRC32 0xc3482e90 Xid = 13009151
COMMIT/*!*/;
# at 1061
#191218 14:34:48 server id 6700070 end_log_pos 1126 CRC32 0x45606b5d GTID last_committed=4 sequence_number=5 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073493'/*!*/;
# at 1126
#191218 14:34:48 server id 6700070 end_log_pos 1198 CRC32 0xb89f326c Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650888/*!*/;
BEGIN
/*!*/;
# at 1198
#191218 14:34:48 server id 6700070 end_log_pos 1246 CRC32 0xe3c1eef5 Table_map: `test`.`t1` mapped to number 404
# at 1246
#191218 14:34:48 server id 6700070 end_log_pos 1296 CRC32 0x32f2f98b Update_rows: table id 404 flags: STMT_END_F
BINLOG '
iMj5XRMmPGYAMAAAAN4EAAAAAJQBAAAAAAEABHRlc3QAAnQxAAIDDwKAAAL17sHj
iMj5XR8mPGYAMgAAABAFAAAAAJQBAAAAAAEAAgAC///8AgAAAAFi/AIAAAABY4v58jI=
'/*!*/;
# at 1296
#191218 14:34:48 server id 6700070 end_log_pos 1327 CRC32 0x51ba56c7 Xid = 13009153
COMMIT/*!*/;
# at 1327
#191218 14:34:53 server id 6700070 end_log_pos 1392 CRC32 0x88c29411 GTID last_committed=5 sequence_number=6 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073494'/*!*/;
# at 1392
#191218 14:34:53 server id 6700070 end_log_pos 1464 CRC32 0x1221f492 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650893/*!*/;
BEGIN
/*!*/;
# at 1464
#191218 14:34:53 server id 6700070 end_log_pos 1512 CRC32 0x928b3780 Table_map: `test`.`t1` mapped to number 404
# at 1512
#191218 14:34:53 server id 6700070 end_log_pos 1554 CRC32 0x924772b2 Delete_rows: table id 404 flags: STMT_END_F
BINLOG '
jcj5XRMmPGYAMAAAAOgFAAAAAJQBAAAAAAEABHRlc3QAAnQxAAIDDwKAAAKAN4uS
jcj5XSAmPGYAKgAAABIGAAAAAJQBAAAAAAEAAgAC//wBAAAAAWGyckeS
'/*!*/;
# at 1554
#191218 14:34:53 server id 6700070 end_log_pos 1585 CRC32 0xc01b2402 Xid = 13009154
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*/;
$ mysqlbinlog mysql-bin.000104 -vv --base64-output=decode-rows
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
DELIMITER /*!*/;
# at 4
#191218 14:33:10 server id 6700070 end_log_pos 123 CRC32 0x142ce0a9 Start: binlog v 4, server v 5.7.27-log created 191218 14:33:10
# Warning: this binlog is either in use or was not closed properly.
# at 123
#191218 14:33:10 server id 6700070 end_log_pos 194 CRC32 0x60254ef1 Previous-GTIDs
# 09fb76ae-d2dd-11e9-a611-00163f00f11a:1-2073488
# at 194
#191218 14:33:47 server id 6700070 end_log_pos 259 CRC32 0x8328abd1 GTID last_committed=0 sequence_number=1 rbr_only=no
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073489'/*!*/;
# at 259
#191218 14:33:47 server id 6700070 end_log_pos 353 CRC32 0x87ad0591 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650827/*!*/;
SET @@session.pseudo_thread_id=3055425/*!*/;
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 test
/*!*/;
# at 353
#191218 14:34:24 server id 6700070 end_log_pos 418 CRC32 0x7ff1085c GTID last_committed=1 sequence_number=2 rbr_only=no
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073490'/*!*/;
# at 418
#191218 14:34:24 server id 6700070 end_log_pos 545 CRC32 0xe24a80ef Query thread_id=3055425 exec_time=0 error_code=0
use `test`/*!*/;
SET TIMESTAMP=1576650864/*!*/;
create table t1 (id int primary key,info varchar(32))
/*!*/;
# at 545
#191218 14:34:31 server id 6700070 end_log_pos 610 CRC32 0x3a3f5558 GTID last_committed=2 sequence_number=3 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073491'/*!*/;
# at 610
#191218 14:34:31 server id 6700070 end_log_pos 682 CRC32 0xdbb72271 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650871/*!*/;
BEGIN
/*!*/;
# at 682
#191218 14:34:31 server id 6700070 end_log_pos 730 CRC32 0xc325bfc9 Table_map: `test`.`t1` mapped to number 404
# at 730
#191218 14:34:31 server id 6700070 end_log_pos 772 CRC32 0x6723da9f Write_rows: table id 404 flags: STMT_END_F
### INSERT INTO `test`.`t1`
### SET
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='a' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 772
#191218 14:34:31 server id 6700070 end_log_pos 803 CRC32 0x95c983e8 Xid = 13009150
COMMIT/*!*/;
# at 803
#191218 14:34:37 server id 6700070 end_log_pos 868 CRC32 0x170dafd1 GTID last_committed=3 sequence_number=4 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073492'/*!*/;
# at 868
#191218 14:34:37 server id 6700070 end_log_pos 940 CRC32 0x436edc71 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650877/*!*/;
BEGIN
/*!*/;
# at 940
#191218 14:34:37 server id 6700070 end_log_pos 988 CRC32 0x07759bb2 Table_map: `test`.`t1` mapped to number 404
# at 988
#191218 14:34:37 server id 6700070 end_log_pos 1030 CRC32 0xaec1efb2 Write_rows: table id 404 flags: STMT_END_F
### INSERT INTO `test`.`t1`
### SET
### @1=2 /* INT meta=0 nullable=0 is_null=0 */
### @2='b' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 1030
#191218 14:34:37 server id 6700070 end_log_pos 1061 CRC32 0xc3482e90 Xid = 13009151
COMMIT/*!*/;
# at 1061
#191218 14:34:48 server id 6700070 end_log_pos 1126 CRC32 0x45606b5d GTID last_committed=4 sequence_number=5 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073493'/*!*/;
# at 1126
#191218 14:34:48 server id 6700070 end_log_pos 1198 CRC32 0xb89f326c Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650888/*!*/;
BEGIN
/*!*/;
# at 1198
#191218 14:34:48 server id 6700070 end_log_pos 1246 CRC32 0xe3c1eef5 Table_map: `test`.`t1` mapped to number 404
# at 1246
#191218 14:34:48 server id 6700070 end_log_pos 1296 CRC32 0x32f2f98b Update_rows: table id 404 flags: STMT_END_F
### UPDATE `test`.`t1`
### WHERE
### @1=2 /* INT meta=0 nullable=0 is_null=0 */
### @2='b' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
### SET
### @1=2 /* INT meta=0 nullable=0 is_null=0 */
### @2='c' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 1296
#191218 14:34:48 server id 6700070 end_log_pos 1327 CRC32 0x51ba56c7 Xid = 13009153
COMMIT/*!*/;
# at 1327
#191218 14:34:53 server id 6700070 end_log_pos 1392 CRC32 0x88c29411 GTID last_committed=5 sequence_number=6 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073494'/*!*/;
# at 1392
#191218 14:34:53 server id 6700070 end_log_pos 1464 CRC32 0x1221f492 Query thread_id=3055425 exec_time=0 error_code=0
SET TIMESTAMP=1576650893/*!*/;
BEGIN
/*!*/;
# at 1464
#191218 14:34:53 server id 6700070 end_log_pos 1512 CRC32 0x928b3780 Table_map: `test`.`t1` mapped to number 404
# at 1512
#191218 14:34:53 server id 6700070 end_log_pos 1554 CRC32 0x924772b2 Delete_rows: table id 404 flags: STMT_END_F
### DELETE FROM `test`.`t1`
### WHERE
### @1=1 /* INT meta=0 nullable=0 is_null=0 */
### @2='a' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 1554
#191218 14:34:53 server id 6700070 end_log_pos 1585 CRC32 0xc01b2402 Xid = 13009154
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*/;
事实上,在ROW格式的binlog文件中, 每个ROWS_EVENT事件前都会有一个TABLE_MAP_EVENT,用于描述表的内部id和结构定义。
即便上述两个insert操作,一个没有执行use test操作,都不影响TABLE_MAP_EVENT的内容,这也会导致基于ROW格式下的库级别的复制和基于STATEMENT格式下库级别的复制的复制规则不一致。
mysql> set binlog_rows_query_log_events=1;
Query OK, 0 rows affected (0.00 sec)
mysql> insert into test.t1 values(3,'c');
Query OK, 1 row affected (0.01 sec)
mysql> update t1 set info='d' where id=3;
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> delete from t1 where id=3;
Query OK, 1 row affected (0.00 sec)
对比下效果
mysql> show binlog events in 'mysql-bin.000104' from 1585;
+------------------+------+-------------+-----------+-------------+-------------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+------+-------------+-----------+-------------+-------------------------------------------------------------------------+
| mysql-bin.000104 | 1585 | Gtid | 6700070 | 1650 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073495' |
| mysql-bin.000104 | 1650 | Query | 6700070 | 1722 | BEGIN |
| mysql-bin.000104 | 1722 | Rows_query | 6700070 | 1779 | # insert into test.t1 values(3,'c') |
| mysql-bin.000104 | 1779 | Table_map | 6700070 | 1827 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 1827 | Write_rows | 6700070 | 1869 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 1869 | Xid | 6700070 | 1900 | COMMIT /* xid=13009171 */ |
| mysql-bin.000104 | 1900 | Gtid | 6700070 | 1965 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073496' |
| mysql-bin.000104 | 1965 | Query | 6700070 | 2037 | BEGIN |
| mysql-bin.000104 | 2037 | Rows_query | 6700070 | 2094 | # update t1 set info='d' where id=3 |
| mysql-bin.000104 | 2094 | Table_map | 6700070 | 2142 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 2142 | Update_rows | 6700070 | 2192 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 2192 | Xid | 6700070 | 2223 | COMMIT /* xid=13009172 */ |
| mysql-bin.000104 | 2223 | Gtid | 6700070 | 2288 | SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073497' |
| mysql-bin.000104 | 2288 | Query | 6700070 | 2360 | BEGIN |
| mysql-bin.000104 | 2360 | Rows_query | 6700070 | 2409 | # delete from t1 where id=3 |
| mysql-bin.000104 | 2409 | Table_map | 6700070 | 2457 | table_id: 404 (test.t1) |
| mysql-bin.000104 | 2457 | Delete_rows | 6700070 | 2499 | table_id: 404 flags: STMT_END_F |
| mysql-bin.000104 | 2499 | Xid | 6700070 | 2530 | COMMIT /* xid=13009173 */ |
+------------------+------+-------------+-----------+-------------+-------------------------------------------------------------------------+
工具解析
$ mysqlbinlog mysql-bin.000104 -vv --base64-output=decode-rows
...
...
...
BEGIN
/*!*/;
# at 1722
#191218 14:58:31 server id 6700070 end_log_pos 1779 CRC32 0x936712e1 Rows_query
# insert into test.t1 values(3,'c')
# at 1779
#191218 14:58:31 server id 6700070 end_log_pos 1827 CRC32 0x092db65d Table_map: `test`.`t1` mapped to number 404
# at 1827
#191218 14:58:31 server id 6700070 end_log_pos 1869 CRC32 0x20c0458b Write_rows: table id 404 flags: STMT_END_F
### INSERT INTO `test`.`t1`
### SET
### @1=3 /* INT meta=0 nullable=0 is_null=0 */
### @2='c' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 1869
#191218 14:58:31 server id 6700070 end_log_pos 1900 CRC32 0xdd6bb173 Xid = 13009171
COMMIT/*!*/;
# at 1900
#191218 14:58:39 server id 6700070 end_log_pos 1965 CRC32 0xbb198803 GTID last_committed=7 sequence_number=8 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073496'/*!*/;
# at 1965
#191218 14:58:39 server id 6700070 end_log_pos 2037 CRC32 0x2792d209 Query thread_id=3055426 exec_time=0 error_code=0
SET TIMESTAMP=1576652319/*!*/;
BEGIN
/*!*/;
# at 2037
#191218 14:58:39 server id 6700070 end_log_pos 2094 CRC32 0x56bb8dc0 Rows_query
# update t1 set info='d' where id=3
# at 2094
#191218 14:58:39 server id 6700070 end_log_pos 2142 CRC32 0xaae4609b Table_map: `test`.`t1` mapped to number 404
# at 2142
#191218 14:58:39 server id 6700070 end_log_pos 2192 CRC32 0x7652c217 Update_rows: table id 404 flags: STMT_END_F
### UPDATE `test`.`t1`
### WHERE
### @1=3 /* INT meta=0 nullable=0 is_null=0 */
### @2='c' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
### SET
### @1=3 /* INT meta=0 nullable=0 is_null=0 */
### @2='d' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 2192
#191218 14:58:39 server id 6700070 end_log_pos 2223 CRC32 0x8cf7861d Xid = 13009172
COMMIT/*!*/;
# at 2223
#191218 14:58:46 server id 6700070 end_log_pos 2288 CRC32 0xb5159267 GTID last_committed=8 sequence_number=9 rbr_only=yes
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
SET @@SESSION.GTID_NEXT= '09fb76ae-d2dd-11e9-a611-00163f00f11a:2073497'/*!*/;
# at 2288
#191218 14:58:46 server id 6700070 end_log_pos 2360 CRC32 0xadf74254 Query thread_id=3055426 exec_time=0 error_code=0
SET TIMESTAMP=1576652326/*!*/;
BEGIN
/*!*/;
# at 2360
#191218 14:58:46 server id 6700070 end_log_pos 2409 CRC32 0x703bdd48 Rows_query
# delete from t1 where id=3
# at 2409
#191218 14:58:46 server id 6700070 end_log_pos 2457 CRC32 0x85433eb5 Table_map: `test`.`t1` mapped to number 404
# at 2457
#191218 14:58:46 server id 6700070 end_log_pos 2499 CRC32 0xf4f4ddd0 Delete_rows: table id 404 flags: STMT_END_F
### DELETE FROM `test`.`t1`
### WHERE
### @1=3 /* INT meta=0 nullable=0 is_null=0 */
### @2='d' /* VARSTRING(128) meta=128 nullable=1 is_null=0 */
# at 2499
#191218 14:58:46 server id 6700070 end_log_pos 2530 CRC32 0x251be898 Xid = 13009173
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*/;
只关注SQL
$ mysqlbinlog mysql-bin.000104 -vv --base64-output=decode-rows | grep -E 'insert|update|delete'
# insert into test.t1 values(3,'c')
# update t1 set info='d' where id=3
# delete from t1 where id=3
https://github.com/danfengcao/binlog2sql
必要参数
[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full
必要权限
select, super/replication client, replication slave
建议授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
效果
$ python binlog2sql.py -h127.0.0.1 -P5470 -uroot -proot -dtest -t t1 --start-file='mysql-bin.000104'
USE test;
create database test;
USE test;
create table t1 (id int primary key,info varchar(32));
INSERT INTO `test`.`t1`(`info`, `id`) VALUES ('a', 1); #start 610 end 772 time 2019-12-18 14:34:31
INSERT INTO `test`.`t1`(`info`, `id`) VALUES ('b', 2); #start 868 end 1030 time 2019-12-18 14:34:37
UPDATE `test`.`t1` SET `info`='c', `id`=2 WHERE `info`='b' AND `id`=2 LIMIT 1; #start 1126 end 1296 time 2019-12-18 14:34:48
DELETE FROM `test`.`t1` WHERE `info`='a' AND `id`=1 LIMIT 1; #start 1392 end 1554 time 2019-12-18 14:34:53
INSERT INTO `test`.`t1`(`info`, `id`) VALUES ('c', 3); #start 1650 end 1869 time 2019-12-18 14:58:31
UPDATE `test`.`t1` SET `info`='d', `id`=3 WHERE `info`='c' AND `id`=3 LIMIT 1; #start 1965 end 2192 time 2019-12-18 14:58:39
DELETE FROM `test`.`t1` WHERE `info`='d' AND `id`=3 LIMIT 1; #start 2288 end 2499 time 2019-12-18 14:58:46
https://dev.mysql.com/doc/refman/5.7/en/binary-log-setting.html
13.7.5.1 SHOW BINARY LOGS Statement
13.7.5.2 SHOW BINLOG EVENTS Statement
13.7.5.23 SHOW MASTER STATUS Statement
13.7.5.32 SHOW RELAYLOG EVENTS Statement