mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-19577 Replication does not work with innodb_autoinc_lock_mode=2
The first step for deprecating innodb_autoinc_lock_mode(see MDEV-27844) is: - to switch statement binlog format to ROW if binlog format is MIXED and the statement changes autoincremented fields - issue warnings if innodb_autoinc_lock_mode == 2 and binlog format is STATEMENT
This commit is contained in:
@@ -6079,6 +6079,10 @@ int THD::decide_logging_format(TABLE_LIST *tables)
|
||||
bool is_write= FALSE; // If any write tables
|
||||
bool has_read_tables= FALSE; // If any read only tables
|
||||
bool has_auto_increment_write_tables= FALSE; // Write with auto-increment
|
||||
/* true if it's necessary to switch current statement log format from
|
||||
STATEMENT to ROW if binary log format is MIXED and autoincrement values
|
||||
are changed in the statement */
|
||||
bool has_unsafe_stmt_autoinc_lock_mode= false;
|
||||
/* If a write table that doesn't have auto increment part first */
|
||||
bool has_write_table_auto_increment_not_first_in_pk= FALSE;
|
||||
bool has_auto_increment_write_tables_not_first= FALSE;
|
||||
@@ -6200,6 +6204,8 @@ int THD::decide_logging_format(TABLE_LIST *tables)
|
||||
has_auto_increment_write_tables_not_first= found_first_not_own_table;
|
||||
if (share->next_number_keypart != 0)
|
||||
has_write_table_auto_increment_not_first_in_pk= true;
|
||||
has_unsafe_stmt_autoinc_lock_mode=
|
||||
table->file->autoinc_lock_mode_stmt_unsafe();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -6268,6 +6274,9 @@ int THD::decide_logging_format(TABLE_LIST *tables)
|
||||
if (has_write_tables_with_unsafe_statements)
|
||||
lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
|
||||
|
||||
if (has_unsafe_stmt_autoinc_lock_mode)
|
||||
lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_AUTOINC_LOCK_MODE);
|
||||
|
||||
/*
|
||||
A query that modifies autoinc column in sub-statement can make the
|
||||
master and slave inconsistent.
|
||||
|
Reference in New Issue
Block a user