• Sachin Setiya's avatar
    MDEV-20574 Position of events reported by mysqlbinlog is wrong with encrypted... · 27664ef2
    Sachin Setiya authored
    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.
    27664ef2
binlog_row_annotate.result 24.8 KB