1
0
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:
Vlad Lesin
2022-03-02 21:29:53 +03:00
parent e7cf871dda
commit 1766a18e06
9 changed files with 94 additions and 1 deletions

View File

@@ -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.