mirror of
https://github.com/MariaDB/server.git
synced 2026-04-26 10:15:29 +02:00
BUG#55625 RBR breaks on failing 'CREATE TABLE'
A CREATE...SELECT that fails is written to the binary log if a non-transactional statement is updated. If the logging format is ROW, the CREATE statement and the changes are written to the binary log as distinct events and by consequence the created table is not rolled back in the slave. In this patch, we opted to let the slave goes out of sync by not writting to the binary log the CREATE statement. We do this by simply reseting the binary log's cache. mysql-test/suite/rpl/r/rpl_drop.result: Added a test case. mysql-test/suite/rpl/t/rpl_drop.test: Added a test case. sql/log.cc: Introduced a function to clean up the cache. sql/log.h: Introduced a function to clean up the cache. sql/sql_insert.cc: Cleaned up the binary log cache if a CREATE...SELECT fails.
This commit is contained in:
parent
060db3d325
commit
f62e89fade
5 changed files with 102 additions and 2 deletions
|
|
@ -3873,6 +3873,17 @@ void select_create::abort()
|
|||
|
||||
if (table)
|
||||
{
|
||||
if (thd->lex->sql_command == SQLCOM_CREATE_TABLE &&
|
||||
thd->current_stmt_binlog_row_based &&
|
||||
!(thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) &&
|
||||
mysql_bin_log.is_open())
|
||||
{
|
||||
/*
|
||||
This should be removed after BUG#47899.
|
||||
*/
|
||||
mysql_bin_log.reset_gathered_updates(thd);
|
||||
}
|
||||
|
||||
table->file->extra(HA_EXTRA_NO_IGNORE_DUP_KEY);
|
||||
table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
|
||||
if (!create_info->table_existed)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue