diff --git a/mysql-test/main/mysqld--help.result b/mysql-test/main/mysqld--help.result index 018a68a3821cc..338b16b96bc5e 100644 --- a/mysql-test/main/mysqld--help.result +++ b/mysql-test/main/mysqld--help.result @@ -264,6 +264,9 @@ The following specify which files/extra groups are read (specified before remain --deadlock-timeout-short=# Short timeout for the two-step deadlock detection (in microseconds) + --default-master-connection=name + Master connection to use for all slave variables and + slave commands --default-password-lifetime=# This defines the global password expiration policy. 0 means automatic password expiration is disabled. If the @@ -1751,6 +1754,7 @@ deadlock-search-depth-long 15 deadlock-search-depth-short 4 deadlock-timeout-long 50000000 deadlock-timeout-short 10000 +default-master-connection default-password-lifetime 0 default-regex-flags default-storage-engine myisam diff --git a/mysql-test/suite/multi_source/syntax.result b/mysql-test/suite/multi_source/syntax.result index 77e7b1d6624ca..fa0527d556c50 100644 --- a/mysql-test/suite/multi_source/syntax.result +++ b/mysql-test/suite/multi_source/syntax.result @@ -43,9 +43,13 @@ select @@default_master_connection; @@default_master_connection select @@global.default_master_connection; -ERROR HY000: Variable 'default_master_connection' is a SESSION variable +@@global.default_master_connection + set @@global.default_master_connection='qqq'; -ERROR HY000: Variable 'default_master_connection' is a SESSION variable and can't be used with SET GLOBAL +select @@global.default_master_connection; +@@global.default_master_connection +qqq +set @@global.default_master_connection=''; set @@default_master_connection='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'; ERROR 42000: Variable 'default_master_connection' can't be set to the value of 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc' select @@default_master_connection; diff --git a/mysql-test/suite/multi_source/syntax.test b/mysql-test/suite/multi_source/syntax.test index 12539d32a6464..95a517310b56c 100644 --- a/mysql-test/suite/multi_source/syntax.test +++ b/mysql-test/suite/multi_source/syntax.test @@ -45,10 +45,10 @@ sync_with_master 0, ''; --echo # select @@default_master_connection; ---error 1238 select @@global.default_master_connection; ---error 1228 set @@global.default_master_connection='qqq'; +select @@global.default_master_connection; +set @@global.default_master_connection=''; --error 1231 set @@default_master_connection='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc'; select @@default_master_connection; diff --git a/mysql-test/suite/sys_vars/r/default_master_connection_basic.result b/mysql-test/suite/sys_vars/r/default_master_connection_basic.result index 2d80241d5ca3d..84ca2da2cb8db 100644 --- a/mysql-test/suite/sys_vars/r/default_master_connection_basic.result +++ b/mysql-test/suite/sys_vars/r/default_master_connection_basic.result @@ -12,9 +12,13 @@ SELECT @@session.default_master_connection = ''; @@session.default_master_connection = '' 1 SET @@global.default_master_connection = 'master1'; -ERROR HY000: Variable 'default_master_connection' is a SESSION variable and can't be used with SET GLOBAL SELECT @@global.default_master_connection; -ERROR HY000: Variable 'default_master_connection' is a SESSION variable +@@global.default_master_connection +master1 +SET @@global.default_master_connection = ''; +SELECT @@global.default_master_connection; +@@global.default_master_connection + SET @@session.default_master_connection = 'master1'; SELECT @@session.default_master_connection; @@session.default_master_connection @@ -61,7 +65,8 @@ master2 SELECT @@global.default_master_connection = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='default_master_connection'; -ERROR HY000: Variable 'default_master_connection' is a SESSION variable +@@global.default_master_connection = VARIABLE_VALUE +1 SELECT @@session.default_master_connection = VARIABLE_VALUE FROM INFORMATION_SCHEMA.SESSION_VARIABLES WHERE VARIABLE_NAME='default_master_connection'; @@ -88,3 +93,27 @@ SET @@session.default_master_connection = @start_session_value; SELECT @@session.default_master_connection; @@session.default_master_connection +SET @@global.default_master_connection = 'global'; +connect con1,localhost,root,,; +connection con1; +SELECT @@session.default_master_connection; +@@session.default_master_connection +global +connection default; +disconnect con1; +SET @@global.default_master_connection = ''; +# restart: --default-master-connection=master1 +SELECT @@global.default_master_connection; +@@global.default_master_connection +master1 +SELECT @@session.default_master_connection; +@@session.default_master_connection +master1 +connect con2,localhost,root,,; +connection con2; +SELECT @@session.default_master_connection; +@@session.default_master_connection +master1 +connection default; +disconnect con2; +# restart diff --git a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result index 17a9a13a0f2dc..5c07aae863de9 100644 --- a/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result +++ b/mysql-test/suite/sys_vars/r/sysvars_server_notembedded.result @@ -903,7 +903,7 @@ ENUM_VALUE_LIST NULL READ_ONLY NO COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DEFAULT_MASTER_CONNECTION -VARIABLE_SCOPE SESSION ONLY +VARIABLE_SCOPE SESSION VARIABLE_TYPE VARCHAR VARIABLE_COMMENT Master connection to use for all slave variables and slave commands NUMERIC_MIN_VALUE NULL @@ -911,7 +911,7 @@ NUMERIC_MAX_VALUE NULL NUMERIC_BLOCK_SIZE NULL ENUM_VALUE_LIST NULL READ_ONLY NO -COMMAND_LINE_ARGUMENT NULL +COMMAND_LINE_ARGUMENT REQUIRED VARIABLE_NAME DEFAULT_PASSWORD_LIFETIME VARIABLE_SCOPE GLOBAL VARIABLE_TYPE INT UNSIGNED diff --git a/mysql-test/suite/sys_vars/t/default_master_connection_basic.test b/mysql-test/suite/sys_vars/t/default_master_connection_basic.test index ae91bc46e1af1..0262df65b9ad5 100644 --- a/mysql-test/suite/sys_vars/t/default_master_connection_basic.test +++ b/mysql-test/suite/sys_vars/t/default_master_connection_basic.test @@ -1,7 +1,7 @@ ############## mysql-test\t\default_master_connection_basic.test ############### # # Implemented in the scope of MDEV-253 -# The variable is SESSION-only +# Updated to SESSION-VAR (Global) scope in MDEV-9247 # --source include/not_embedded.inc @@ -29,12 +29,12 @@ SET @@session.default_master_connection = @start_session_value; SELECT @@session.default_master_connection = ''; ################################################# -# Check that the GLOBAL scope is not applicable # +# Check that the GLOBAL scope is applicable # ################################################# ---error ER_LOCAL_VARIABLE SET @@global.default_master_connection = 'master1'; ---error ER_INCORRECT_GLOBAL_LOCAL_VAR +SELECT @@global.default_master_connection; +SET @@global.default_master_connection = ''; SELECT @@global.default_master_connection; #################################################################################### @@ -77,7 +77,6 @@ SELECT @@session.default_master_connection; # Check if the value in GLOBAL & SESSION Tables matches value in variable # ############################################################################### ---error ER_INCORRECT_GLOBAL_LOCAL_VAR SELECT @@global.default_master_connection = VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME='default_master_connection'; @@ -117,6 +116,37 @@ SELECT default_master_connection = @@session.default_master_connection; SET @@session.default_master_connection = @start_session_value; SELECT @@session.default_master_connection; +##################################################################### +# Check if global value is inherited by new connections (MDEV-9247)# +##################################################################### + +SET @@global.default_master_connection = 'global'; +--connect (con1,localhost,root,,) +--connection con1 +SELECT @@session.default_master_connection; +--connection default +--disconnect con1 +SET @@global.default_master_connection = ''; + +##################################################################### +# Check if global value can be set via command line (MDEV-9247) # +##################################################################### + +--let $restart_parameters=--default-master-connection=master1 +--source include/restart_mysqld.inc + +SELECT @@global.default_master_connection; +SELECT @@session.default_master_connection; + +--connect (con2,localhost,root,,) +--connection con2 +SELECT @@session.default_master_connection; +--connection default +--disconnect con2 + +# Clean up for subsequent tests if any (though this is the end) +--let $restart_parameters= +--source include/restart_mysqld.inc ############################################################# # END OF default_master_connection TESTS # diff --git a/sql/mysqld.cc b/sql/mysqld.cc index b98f5aabae29d..e0dfac7cc7922 100644 --- a/sql/mysqld.cc +++ b/sql/mysqld.cc @@ -9012,6 +9012,9 @@ static int get_options(int *argc_ptr, char ***argv_ptr) opt_init_connect.length=strlen(opt_init_connect.str); opt_init_slave.length=strlen(opt_init_slave.str); + global_system_variables.default_master_connection.length= + global_system_variables.default_master_connection.str ? + strlen(global_system_variables.default_master_connection.str) : 0; if (global_system_variables.low_priority_updates) thr_upgraded_concurrent_insert_lock= TL_WRITE_LOW_PRIORITY; diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 63f3f38bc36df..699e9cae0721a 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -1481,7 +1481,7 @@ static bool check_master_connection(sys_var *self, THD *thd, set_var *var) static Sys_var_lexstring Sys_default_master_connection( "default_master_connection", "Master connection to use for all slave variables and slave commands", - SESSION_ONLY(default_master_connection), NO_CMD_LINE, DEFAULT(""), + SESSION_VAR(default_master_connection), CMD_LINE(REQUIRED_ARG), DEFAULT(""), NO_MUTEX_GUARD, NOT_IN_BINLOG, ON_CHECK(check_master_connection)); #endif