mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 14:54:20 +01:00
678eb3d66f
Let - T be a transactional table and N non-transactional table. - B be begin, C commit and R rollback. - M be a mixed statement, i.e. a statement that updates both T and N. - M* be a mixed statement that fails while updating either T or N. This patch restore the behavior presented in 5.1.37 for rows either produced in the RBR or MIXED modes, when a M* statement that happened early in a transaction had their changes written to the binary log outside the boundaries of the transaction and wrapped in a BEGIN/ROLLBACK. This was done to keep the slave consistent with with the master as the rollback would keep the changes on N and undo them on T. In particular, we do what follows: . B M* T C would log - B M* R B T C. Note that, we are not preserving history from the master as we are introducing a rollback that never happened. However, this seems to be more acceptable than making the slave diverge. We do not fix the following case: . B T M* C would log B T M* C. The slave will diverge as the changes on T tables that originated from the M statement are rolled back on the master but not on the slave. Unfortunately, we cannot simply rollback the transaction as this would undo any uncommitted changes on T tables. SBR is not considered in this patch because a failing statement is written to the binary along with the error code and a slave executes and then rolls back the statement when it has an associated error code, thus undoing the effects on T. In RBR and MBR, a full-fledged fix will be pushed after the WL 2687. |
||
---|---|---|
.. | ||
binlog_auto_increment_bug33029-master.opt | ||
binlog_auto_increment_bug33029.test | ||
binlog_base64_flag.test | ||
binlog_database.test | ||
binlog_grant.test | ||
binlog_incident-master.opt | ||
binlog_incident.test | ||
binlog_index.test | ||
binlog_innodb.test | ||
binlog_innodb_row.test | ||
binlog_killed.test | ||
binlog_killed_simulate-master.opt | ||
binlog_killed_simulate.test | ||
binlog_mix_innodb_stat.test | ||
binlog_mixed_failure_mixing_engines.test | ||
binlog_multi_engine.test | ||
binlog_old_versions.test | ||
binlog_row_binlog-master.opt | ||
binlog_row_binlog.test | ||
binlog_row_ctype_cp932.test | ||
binlog_row_ctype_ucs.test | ||
binlog_row_drop_tmp_tbl.test | ||
binlog_row_failure_mixing_engines.test | ||
binlog_row_innodb_stat-master.opt | ||
binlog_row_innodb_stat.test | ||
binlog_row_insert_select.test | ||
binlog_row_mix_innodb_myisam-master.opt | ||
binlog_row_mix_innodb_myisam.test | ||
binlog_row_mysqlbinlog_db_filter.test | ||
binlog_sql_mode.test | ||
binlog_start_comment.test | ||
binlog_statement_insert_delayed.test | ||
binlog_stm_binlog-master.opt | ||
binlog_stm_binlog.test | ||
binlog_stm_blackhole.test | ||
binlog_stm_ctype_cp932.test | ||
binlog_stm_ctype_ucs.test | ||
binlog_stm_drop_tmp_tbl.test | ||
binlog_stm_innodb_stat-master.opt | ||
binlog_stm_innodb_stat.test | ||
binlog_stm_insert_select.test | ||
binlog_stm_mix_innodb_myisam-master.opt | ||
binlog_stm_mix_innodb_myisam.test | ||
binlog_stm_ps.test | ||
binlog_stm_row.test | ||
binlog_stm_unsafe_warning-master.opt | ||
binlog_stm_unsafe_warning.test | ||
binlog_tbl_metadata.test | ||
binlog_tmp_table.test | ||
binlog_truncate_innodb-master.opt | ||
binlog_truncate_innodb.test | ||
binlog_truncate_myisam.test | ||
binlog_unsafe.test | ||
disabled.def |