• Alfranio Correia's avatar
    BUG#28976 Mixing trans and non-trans tables in one transaction results in incorrect · 6c2b3251
    Alfranio Correia authored
    binlog
    
    Mixing transactional (T) and non-transactional (N) tables on behalf of a
    transaction may lead to inconsistencies among masters and slaves in STATEMENT
    mode. The problem stems from the fact that although modifications done to
    non-transactional tables on behalf of a transaction become immediately visible
    to other connections they do not immediately get to the binary log and therefore
    consistency is broken. Although there may be issues in mixing T and M tables in
    STATEMENT mode, there are safe combinations that clients find useful.
    
    In this bug, we fix the following issue. Mixing N and T tables in multi-level
    (e.g. a statement that fires a trigger) or multi-table table statements (e.g.
    update t1, t2...) were not handled correctly. In such cases, it was not possible
    to distinguish when a T table was updated if the sequence of changes was N and T.
    In a nutshell, just the flag "modified_non_trans_table" was not enough to reflect
    that both a N and T tables were changed. To circumvent this issue, we check if an
    engine is registered in the handler's list and changed something which means that
    a T table was modified.
    
    Check WL 2687 for a full-fledged patch that will make the use of either the MIXED or
    ROW modes completely safe.
    
    mysql-test/suite/binlog/r/binlog_row_mix_innodb_myisam.result:
      Truncate statement is wrapped in BEGIN/COMMIT.
    mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result:
      Truncate statement is wrapped in BEGIN/COMMIT.
    6c2b3251
rpl_stm_mixing_engines.result 38.6 KB