• Aleksey Midenkov's avatar
    MDEV-28254 Wrong position for row_start, row_end after adding column to implicit versioned table · 9286c9e6
    Aleksey Midenkov authored
    Implicit system-versioned table does not contain system fields in SHOW
    CREATE. Therefore after mysqldump recovery such table has system
    fields in the last place in frm image. The original table meanwhile
    does not guarantee these system fields on last place because adding
    new fields via ALTER TABLE places them last. Thus the order of fields
    may be different between master and slave, so row-based replication
    may fail.
    
    To fix this on ALTER TABLE we now place system-invisible fields always
    last in frm image. If the table was created via old revision and has
    an incorrect order of fields it can be fixed via any copy operation of
    ALTER TABLE, f.ex.:
    
      ALTER TABLE t1 FORCE;
    
    To check the order of fields in frm file one can use hexdump:
    
      hexdump -C t1.frm
    
    Note, the replication fails only when all 3 conditions are met:
    
      1. row-based or mixed mode replication;
      2. table has new fields added via ALTER TABLE;
      3. table was rebuilt on some, but not all nodes via mysqldump image.
    
    Otherwise it will operate properly even with incorrect order of
    fields.
    9286c9e6
rpl_row.result 1.42 KB