• Sachin's avatar
    MDEV-11675 Lag Free Alter On Slave · 0c5d1342
    Sachin authored
    This commit implements two phase binloggable ALTER.
    When a new
    
          @@session.binlog_alter_two_phase = YES
    
    ALTER query gets logged in two parts, the START ALTER and the COMMIT
    or ROLLBACK ALTER. START Alter is written in binlog as soon as
    necessary locks have been acquired for the table. The timing is
    such that any concurrent DML:s that update the same table are either
    committed, thus logged into binary log having done work on the old
    version of the table, or will be queued for execution on its new
    version.
    
    The "COMPLETE" COMMIT or ROLLBACK ALTER are written at the very point
    of a normal "single-piece" ALTER that is after the most of
    the query work is done. When its result is positive COMMIT ALTER is
    written, otherwise ROLLBACK ALTER is written with specific error
    happened after START ALTER phase.
    Replication of two-phase binloggable ALTER is
    cross-version safe. Specifically the OLD slave merely does not
    recognized the start alter part, still being able to process and
    memorize its gtid.
    
    Two phase logged ALTER is read from binlog by mysqlbinlog to produce
    BINLOG 'string', where 'string' contains base64 encoded
    Query_log_event containing either the start part of ALTER, or a
    completion part. The Query details can be displayed with `-v` flag,
    similarly to ROW format events.  Notice, mysqlbinlog output containing
    parts of two-phase binloggable ALTER is processable correctly only by
    binlog_alter_two_phase server.
    
    @@log_warnings > 2 can reveal details of binlogging and slave side
    processing of the ALTER parts.
    
    The current commit also carries fixes to the following list of
    reported bugs:
    MDEV-27511, MDEV-27471, MDEV-27349, MDEV-27628, MDEV-27528.
    
    Thanks to all people involved into early discussion of the feature
    including Kristian Nielsen, those who helped to design, implement and
    test: Sergei Golubchik, Andrei Elkin who took the burden of the
    implemenation completion, Sujatha Sivakumar, Brandon
    Nesterenko, Alice Sherepa, Ramesh Sivaraman, Jan Lindstrom.
    0c5d1342
rpl_start_alter_optimize.test 558 Bytes