1
0
mirror of https://github.com/MariaDB/server.git synced 2025-06-01 19:42:01 +03:00
Sachin Setiya 27664ef29d MDEV-20574 Position of events reported by mysqlbinlog is wrong with encrypted binlogs, SHOW BINLOG EVENTS reports the correct one.
Analysis

Mysqlbinlog output for encrypted binary log
#Q> insert into tab1 values (3,'row 003')
#190912 17:36:35 server id 10221  end_log_pos 980 CRC32 0x53bcb3d3  Table_map: `test`.`tab1` mapped to number 19
# at 940
#190912 17:36:35 server id 10221  end_log_pos 1026 CRC32 0xf2ae5136     Write_rows: table id 19 flags: STMT_END_F

Here we can see Table_map_log_event ends at 980 but Next event starts at 940.
And the reason for that is we do not send START_ENCRYPTION_EVENT to the slave

Solution:-
Send Start_encryption_log_event as Ignorable_log_event to slave(mysqlbinlog),
So that mysqlbinlog can update its log_pos.
Since Slave can request multiple FORMAT_DESCRIPTION_EVENT while master does not
have so We only update slave master pos when master actually have the
FORMAT_DESCRIPTION_EVENT. Similar logic should be applied for START_ENCRYPTION_EVENT.

Also added the test case when new server reads the data from old server which
does not send START_ENCRYPTION_EVENT to slave.

Master Slave Upgrade Scenario.
When Slave is updated first, Slave will have extra logic of handling
START_ENCRYPTION_EVENT But master willnot be sending START_ENCRYPTION_EVENT.
So there will be no issue.
When Master is updated first, It will send  START_ENCRYPTION_EVENT to
slave , But slave will ignore this event in queue_event.
2019-10-08 14:35:34 +05:30
..
2019-03-01 12:41:05 -05:00
2019-05-13 17:54:04 +03:00
2010-10-01 15:32:03 +02:00
2006-12-06 21:47:29 +04:00
2007-12-23 11:18:46 +02:00
2007-12-23 11:18:46 +02:00
2008-03-28 23:39:47 +03:00
2011-03-08 09:41:57 +01:00
2019-05-11 21:29:06 +03:00
2019-03-01 12:41:05 -05:00
2001-12-13 15:53:18 +02:00
2009-10-12 11:22:53 +05:00
2017-07-18 14:59:33 +02:00
2003-09-25 00:14:46 +02:00
2019-03-01 12:41:05 -05:00
2019-03-01 12:41:05 -05:00
2019-03-01 12:41:05 -05:00