diff options
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r-- | sql/sql_base.cc | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc index 0e70eb93725..9e38a4142eb 100644 --- a/sql/sql_base.cc +++ b/sql/sql_base.cc @@ -5183,6 +5183,16 @@ int decide_logging_format(THD *thd, TABLE_LIST *tables) thd->variables.binlog_format)); DBUG_PRINT("info", ("multi_engine: %s", multi_engine ? "TRUE" : "FALSE")); + /* + Reading from a self-logging engine and updating another engine + generates changes that are written to the binary log in the + statement format and may make slaves to diverge. In the mixed + mode, such changes should be written to the binary log in the + row format. + */ + if (multi_engine && + (flags_some_set & HA_HAS_OWN_BINLOGGING)) + thd->lex->set_stmt_unsafe(); int error= 0; if (flags_all_set == 0) |