diff --git a/share/messages_to_error_log.txt b/share/messages_to_error_log.txt index 21fe39bd8d3..cc27f5b5e28 100644 --- a/share/messages_to_error_log.txt +++ b/share/messages_to_error_log.txt @@ -11587,6 +11587,8 @@ ER_INVALID_TLS_VERSION ER_RPL_RELAY_LOG_RECOVERY_GTID_ONLY eng "Relay log recovery on channel with GTID_ONLY=1. The channel will switch to a new relay log and the GTID protocol will be used to replicate unapplied transactions." +ER_BINLOG_FORMAT_BINLOG_TX_DEPEDENCY_TRACKING + eng "The binlog_format must be set to %s when binlog_transaction_dependency_tracking is %s." # DO NOT add server-to-client messages here; # they go in messages_to_clients.txt # in the same directory as this file. diff --git a/sql/mysqld.cc b/sql/mysqld.cc index a1016601968..d1dd696ea1c 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -5109,6 +5109,14 @@ int init_common_variables() { return 1; } + if (global_system_variables.binlog_format != BINLOG_FORMAT_ROW && + mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode != + DEPENDENCY_TRACKING_COMMIT_ORDER) { + LogErr(ERROR_LEVEL, ER_BINLOG_FORMAT_BINLOG_TX_DEPEDENCY_TRACKING, "ROW", + "WRITESET or WRITESET_SESSION"); + return 1; + } + if (global_system_variables.transaction_write_set_extraction == HASH_ALGORITHM_OFF && mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode != diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index d83f340ce92..155078f89ce 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -1332,6 +1332,15 @@ static bool binlog_format_check(sys_var *self, THD *thd, set_var *var) { } } + if (var->save_result.ulonglong_value != BINLOG_FORMAT_ROW) { + if (mysql_bin_log.m_dependency_tracker.m_opt_tracking_mode != + DEPENDENCY_TRACKING_COMMIT_ORDER) { + my_error(ER_WRONG_USAGE, MYF(0), "binlog_format (!= ROW)", + "binlog_transaction_dependency_tracking (!= COMMIT_ORDER)"); + return true; + } + } + return false; } @@ -4081,6 +4090,14 @@ static bool check_binlog_transaction_dependency_tracking(sys_var *, THD *, return true; } + if (global_system_variables.binlog_format != BINLOG_FORMAT_ROW && + var->save_result.ulonglong_value != DEPENDENCY_TRACKING_COMMIT_ORDER) { + my_error(ER_WRONG_USAGE, MYF(0), + "binlog_transaction_dependency_tracking (!= COMMIT_ORDER)", + "binlog_format (!= ROW)"); + + return true; + } return false; }