• guilhem@gbichot3.local's avatar
    * Mixed replication mode * : · fdb0f85a
    guilhem@gbichot3.local authored
    1) Fix for BUG#19630 "stored function inserting into two auto_increment breaks
    statement-based binlog":
    a stored function inserting into two such tables may fail to replicate
    (inserting wrong data in the slave's copy of the second table) if the slave's
    second table had an internal auto_increment counter different from master's.
    Because the auto_increment value autogenerated by master for the 2nd table
    does not go into binlog, only the first does, so the slave lacks information.
    To fix this, if running in mixed binlogging mode, if the stored function or
    trigger plans to update two different tables both having auto_increment
    columns, we switch to row-based for the whole function.
    We don't have a simple solution for statement-based binlogging mode, there
    the bug remains and will be documented as a known problem.
    Re-enabling rpl_switch_stm_row_mixed.
    2) Fix for BUG#20630 "Mixed binlogging mode does not work with stored
    functions, triggers, views", which was a documented limitation (in mixed
    mode, we didn't detect that a stored function's execution needed row-based
    binlogging (due to some UUID() call for example); same for
    triggers, same for views (a view created from a SELECT UUID(), and doing
    INSERT INTO sometable SELECT theview; would not replicate row-based).
    This is implemented by, after parsing a routine's body, remembering in sp_head
    that this routine needs row-based binlogging. Then when this routine is used,
    the caller is marked to require row-based binlogging too.
    Same for views: when we parse a view and detect that its SELECT needs
    row-based binary logging, we mark the calling LEX as such.
    3) Fix for BUG#20499 "mixed mode with temporary table breaks binlog":
    a temporary table containing e.g. UUID has its changes not binlogged,
    so any query updating a permanent table with data from the temporary table
    will run wrongly on slave. Solution: in mixed mode we don't switch back
    from row-based to statement-based when there exists temporary tables.
    4) Attempt to test mysqlbinlog on a binlog generated by mysqlbinlog;
    impossible due to BUG#11312 and BUG#20329, but test is in place for when
    they are fixed.
    fdb0f85a
sql_yacc.yy 287 KB