• Sujatha's avatar
    MDEV-16146: MariaDB slave stops with following errors. · abe6eb10
    Sujatha authored
    Problem:
    ========
    180511 11:07:58 [ERROR] Slave I/O: Unexpected master's heartbeat data:
    heartbeat is not compatible with local info;the event's data: log_file_name
    mysql-bin.000009 log_pos 1054262041, Error_code: 1623
    
    Analysis:
    =========
    In replication setup when master server doesn't have any events to send to
    slave server it sends an 'Heartbeat_log_event'. This event carries the
    current binary log filename and offset details. The offset values is stored
    within 4 bytes of event header. When the size of binary log is higher than
    UINT32_MAX the log_pos values will not fit in 4 bytes memory.  It overflows
    and hence slave stops with an error.
    
    Fix:
    ===
    Since we cannot extend the common_header of Log_event class, a greater than
    4GB value of Log_event::log_pos is made to be transported with a HeartBeat
    event's sub-header.  Log_event::log_pos in such case is set to zero to
    indicate that the 8 byte sub-header is allocated in the event.
    
    In case of cross version replication following behaviour is expected
    
    OLD - Server without fix
    NEW - Server with fix
    
    OLD<->NEW : works bidirectionally as long as the binlog offset is
                (normally) within 4GB.
    
    When log_pos > UINT32_MAX
    OLD->NEW  : The 'log_pos' is bound to overflow and NEW slave may report
                an invalid event/incompatible heart beat event error.
    NEW->OLD  : Since patched server sets log_pos=0 on overflow, OLD slave will
                report invalid event error.
    abe6eb10
sql_repl.cc 143 KB