mirror of
https://github.com/MariaDB/server.git
synced 2026-10-23 18:49:29 +03:00
Implementation of Multi-source replication (MDEV:253)
Documentation of the feature can be found at: http://kb.askmonty.org/en/multi-source-replication/ This code is based on code from Taobao, developed by Plinux Other things: - Added new commands: START ALL SLAVES, STOP ALL SLAVES and SHOW FULL SLAVE STATUS - Almost all usage of 'active_mi' is deleted. - Added parameter to reset_logs() so that one can specify if new logs should be created. - Check wildcard match as early as possible for SHOW STATUS. This makes SHOW STATUS like 'xxx' a lot faster and use less mutex - Made max_relay_log_size depending on master connection. - Added sys_vars.default_master_connection_basic to fix a failure in sys_vars.all_vars, modified sql_slave_skip_counter_basic to allow session-level settings - Added commands to mysqladmin: start-all-slaves & stop-all-slaves - Removed logging of "next log '%s' is currently active | not active" - Fixed bug in my_vsnprintf() when using positional parameters with length - Added fn_ext2(), which returns pointer to last '.' in file name - max_relay_log_size now acts as a normal slave specific variable - Don't store replication position if innobase_overwrite_relay_log_info is not set - max_relay_log_size copies it's values from max_binlog_size at startup BUILD/SETUP.sh: Added -Wno-invalid-offsetof to get rid of warning of offsetof() on C++ class (safe in the contex we use it) client/mysqladmin.cc: Added commands start-all-slaves & stop-all-slaves client/mysqltest.cc: Added support for error names starting with 'W' Added connection_name support to --sync_with_master cmake/maintainer.cmake: Added -Wno-invalid-offsetof to get rid of warning of offsetof() on C++ class (safe in the contex we use it) include/my_sys.h: Added fn_ext2(), which returns pointer to last '.' in file name include/mysql/plugin.h: Added SHOW_SIMPLE_FUNC include/mysql/plugin_audit.h.pp: Updated signature file include/mysql/plugin_auth.h.pp: Updated signature file include/mysql/plugin_ftparser.h.pp: Updated signature file mysql-test/extra/rpl_tests/rpl_max_relay_size.test: Updated test mysql-test/include/setup_fake_relay_log.inc: There is no orphan relay log files anymore mysql-test/mysql-test-run.pl: Added multi_source to test suite mysql-test/r/flush.result: Added test for new syntax of flush relay logs (can't repeat relay logs or slave) mysql-test/r/mysqld--help.result: Updated result mysql-test/r/mysqltest.result: Updated result mysql-test/r/parser.result: Updated result mysql-test/r/signal_code.result: Updated result after introducing new commands mysql-test/r/sp-code.result: Updated result after introducing new commands mysql-test/suite/multi_source: Tests for multi-source mysql-test/suite/multi_source/info_logs-master.opt: Test with strange file names mysql-test/suite/multi_source/info_logs.result: Test of logs mysql-test/suite/multi_source/info_logs.test: Test of logs mysql-test/suite/multi_source/my.cnf: Setup of multi-master tests Added log-warnings to get more information to the log files mysql-test/suite/multi_source/relaylog_events.result: Test relay log handling mysql-test/suite/multi_source/relaylog_events.test: Test relay log handling mysql-test/suite/multi_source/reset_slave.result: Test RESET SLAVE mysql-test/suite/multi_source/reset_slave.test: Test RESET SLAVE mysql-test/suite/multi_source/simple.result: Simple basic test of multi-source functionality mysql-test/suite/multi_source/simple.test: Simple basic test of multi-source functionality mysql-test/suite/multi_source/skip_counter.result: Testing skip_counter and max_relay_log_size mysql-test/suite/multi_source/skip_counter.test: Testing skip_counter and max_relay_log_size mysql-test/suite/multi_source/syntax.result: Test of multi-source syntax mysql-test/suite/multi_source/syntax.test: Test of multi-source syntax mysql-test/suite/rpl/r/rpl_deadlock_innodb.result: New warnings mysql-test/suite/rpl/r/rpl_filter_dbs_dynamic.result: Improved error texts mysql-test/suite/rpl/r/rpl_filter_tables_dynamic.result: Improved error texts mysql-test/suite/rpl/r/rpl_filter_wild_tables_dynamic.result: Improved error texts mysql-test/suite/rpl/r/rpl_flush_logs.result: Update results mysql-test/suite/rpl/r/rpl_heartbeat.result: Warning was removed mysql-test/suite/rpl/r/rpl_heartbeat_basic.result: Warning was removed mysql-test/suite/rpl/r/rpl_rotate_logs.result: Updated results because of new error messages mysql-test/suite/rpl/r/rpl_row_max_relay_size.result: Updated results mysql-test/suite/rpl/r/rpl_row_show_relaylog_events.result: Updated results after improved RESET SLAVE (we now use less relay log files) mysql-test/suite/rpl/r/rpl_skip_replication.result: New error message mysql-test/suite/rpl/r/rpl_start_slave_deadlock_sys_vars.result: Test removed as the old DBUG_SYNC entries doesn't exist anymore mysql-test/suite/rpl/r/rpl_stm_max_relay_size.result: Updated results mysql-test/suite/rpl/r/rpl_stm_mix_show_relaylog_events.result: Updated results after improved RESET SLAVE (we now use less relay log files) mysql-test/suite/rpl/t/rpl_flush_logs.test: Updated tests as relay log files is created a bit differently than before mysql-test/suite/rpl/t/rpl_start_slave_deadlock_sys_vars.test: Test removed as the old DBUG_SYNC entries doesn't exist anymore mysql-test/suite/sys_vars/r/default_master_connection_basic.result: New test to test usage of default_master_connection mysql-test/suite/sys_vars/r/max_relay_log_size_basic.result: Updated results mysql-test/suite/sys_vars/r/sql_slave_skip_counter_basic.result: Updated usage of sql_slave_skip_counter mysql-test/suite/sys_vars/t/default_master_connection_basic.test: New test to test usage of default_master_connection mysql-test/suite/sys_vars/t/max_relay_log_size_basic.test: Updated results mysql-test/suite/sys_vars/t/sql_slave_skip_counter_basic.test: Updated test for multi-source mysql-test/t/flush.test: Added test for new syntax of flush relay logs (can't repeat relay logs or slave) mysql-test/t/parser.test: Updated test as master_pos_wait() now takes more arguments than before mysys/mf_fn_ext.c: Added fn_ext2(), which returns pointer to last '.' in file name plugin/semisync/semisync_master_plugin.cc: Use SHOW_SIMPLE_FUNC to optimize SHOW STATUS sql/event_scheduler.cc: No reason to initialize slave_thread (it's guaranteed to be zero here) sql/item_create.cc: Added connection_name argument to master_pos_wait() Simplified code sql/item_func.cc: Added connection_name argument to master_pos_wait() sql/item_func.h: Added connection_name argument to master_pos_wait() sql/lex.h: Added SLAVES keyword sql/log.cc: Added tag "Master 'connection_name'" to slave errors that has a connection name. Added parameter to reset_logs() so that one can specify if new logs should be created. Removed some wrong casts Changed some constants to defines sql/log.h: Added parameter to reset_logs() Updated comment to reflect new code sql/log_event.cc: Updated DBUG_PRINT sql/mysqld.cc: Added variable mysqld_server_initialized so that other functions can test if server is fully initialized. Free all slave data in one place (fewer ifdef's) Removed not needed call to close_active_mi() Initialize slaves() later in startup to ensure that everthing is really initialized when slaves start. Made status variable slave_running multi-source safe max_relay_log_size copies it's values from max_binlog_size at startup SHOW_FUNC -> SHOW_SIMPLE_FUNC sql/mysqld.h: Added mysqld_server_initialized Removed max_relay_log_size sql/rpl_mi.cc: Store connection name and cmp_connection_name (only used for show full slave status) in Master_info Added code for Master_info_index, which handles storage of multi-master information Don't write the empty "" connection_name to multi-master.info file. This is handled by the original code. Create Master_info_index::index_file_names once at init More DBUG_PRINT Give error if Master_info_index::check_duplicate_master_info fails Added start|stop all slaves sql/rpl_mi.h: Added connection_name and Master_info_index Updated prototypes sql/rpl_rli.cc: Added connection_name to relay log files. If we do a full reset, don't create any new relay log files. Updated comment to reflect new code Made max_relay_log_size depending on master connection. sql/rpl_rli.h: Fixed type of slave_skip_counter as we now access it directly in sys_vars.cc, so it must be ulong Made executed_entries and max_relay_log_size depending on master connection. sql/set_var.cc: Fixed that one can get variable name also when one uses DEFAULT sql/set_var.h: Made option global so that one can check and change min & max values (sorry Sergei) sql/share/errmsg-utf8.txt: Added new error messages needed for multi-source Added multi-source name to error ER_MASTER_INFO and WARN_NO_MASTER_INFO Improved error message if connection exists sql/slave.cc: Moved things a bit around to make it easier to handle error conditions. Create a global master_info_index and add the "" connection to it Ensure that new Master_info doesn't fail. Don't call terminate_slave_threads(active_mi..) on end_slave() as this is now done automaticly when deleting master_info_index. Delete not needed function close_active_mi(). One can achive same thing by calling end_slave(). Added support for SHOW FULL SLAVE STATUS (show status for all master connections with connection_name as first column) Removed logging of "next log '%s' is currently active | not active" Added Slave_received_heartbeats and Slave_heartbeat_period sql/slave.h: Added new defines and prototypes sql/sql_base.cc: More DBUG_PRINT sql/sql_class.cc: Reset thd->connection_name and thd-->default_master_connection sql/sql_class.h: Added thd->connection_name and thd-->default_master_connection Made slave_skip_count and max_relay_log_size depending on master connection. These variables are in THD to make changing them thread safe. sql/sql_const.h: Added MAX_CONNECTION_NAME sql/sql_insert.cc: thd->slave_thread -> thd->rli_slave Removed usage of active_mi sql/sql_lex.cc: Reset 'lex->verbose' (to simplify some sql_yacc.yy code) sql/sql_lex.h: Added connection_name, relay_log_connection_name, SQLCOM_SLAVE_ALL_START and SQLCOM_SLAVE_ALL_STOP sql/sql_load.cc: thd->slave_thread -> thd->rli_slave Removed usage of active_mi sql/sql_parse.cc: Added support for connection_name to all SLAVE commands. - Instead of using active_mi, we now get the current Master_info from master_info_index. - Create new replication threads with CHANGE MASTER - Added support for show_all_master_info()- sql/sql_prepare.cc: Added SQLCOM_SLAVE_ALL_START and SQLCOM_SLAVE_ALL_STOP sql/sql_reload.cc: Made reset/full slave use master_info_index->get_master_info() instead of active_mi. If one uses 'RESET SLAVE "connection_name" all' the connection is removed from master_info_index. Fixed issues with FLUSH RELAY LOGS sql/sql_repl.cc: sql_slave_skip_counter is moved to thd->variables to make it thread safe and fix some bugs with it Add connection name to relay log files. Added connection name to errors. Added some logging for multi-master if log_warnings > 1 stop_slave(): - Don't check if thd is set. It's guaranteed to always be set. change_master(): - Check for duplicate connection names in change_master() - Check for wrong arguments first in file (to simplify error handling) - Register new connections in master_info_index ****** Added multi-source support to show relaylog events ****** check_duplicate_master_info() now generates an error Added parameter to reset_logs() ****** Updated calls to create_signed_file_name() sql/sql_show.cc: Check wildcard match as early as possible for SHOW STATUS. This makes SHOW STATUS like 'xxx' a lot faster and use less mutex sql/sql_yacc.yy: Added optional connection_name to a all relevant master/slave commands Added multi-source support to show relaylog events Added new commands START ALL SLAVES, STOP ALL SLAVES and SHOW FULL SLAVE STATUS sql/strfunc.cc: my_global.h shoud always be included first. sql/sys_vars.cc: Added variable default_master_connection Made variable sql_slave_skip_counter multi-source safe Made max_relay_log_size depending on master connection. Made old code more reusable sql/sys_vars.h: Added Sys_var_session_lexstring (needed for default_master_connection) Added Sys_var_multi_source_uint (needed for sql_slave_skip_counter). Changed Sys_var_multi_source_uint to ulong to be able to handle max_relay_log_size Made old code more reusable storage/example/ha_example.cc: Use SHOW_SIMPLE_FUNC to optimize SHOW STATUS storage/sphinx/ha_sphinx.cc: Use SHOW_SIMPLE_FUNC to optimize SHOW STATUS storage/xtradb/handler/ha_innodb.cc: Don't store replication position if innobase_overwrite_relay_log_info is not set strings/my_vsnprintf.c: Fixed bug when using positional parameters with length
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
SET @start_session_value = @@session.default_master_connection;
|
||||
SELECT @start_session_value;
|
||||
@start_session_value
|
||||
|
||||
SET @@session.default_master_connection = 'bar';
|
||||
SET @@session.default_master_connection = DEFAULT;
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
|
||||
SET @@session.default_master_connection = @start_session_value;
|
||||
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
|
||||
SET @@session.default_master_connection = 'master1';
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
master1
|
||||
SET @@session.default_master_connection = '';
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
|
||||
SET @@session.default_master_connection = '1234-5678';
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
1234-5678
|
||||
SET @@session.default_master_connection = '@!*/"';
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
@!*/"
|
||||
SET @@session.default_master_connection = REPEAT('a',191);
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
|
||||
SET @@session.default_master_connection = master2;
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
master2
|
||||
SET @@session.default_master_connection = 1;
|
||||
ERROR 42000: Incorrect argument type to variable 'default_master_connection'
|
||||
SET @@session.default_master_connection = 65530.30;
|
||||
ERROR 42000: Incorrect argument type to variable 'default_master_connection'
|
||||
SET @@session.default_master_connection = FALSE;
|
||||
ERROR 42000: Incorrect argument type to variable 'default_master_connection'
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
master2
|
||||
SET @@session.default_master_connection = REPEAT('a',192);
|
||||
ERROR 42000: Variable 'default_master_connection' can't be set to the value of 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
master2
|
||||
SET @@session.default_master_connection = NULL;
|
||||
ERROR 42000: Variable 'default_master_connection' can't be set to the value of 'NULL'
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
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
|
||||
SELECT @@session.default_master_connection = VARIABLE_VALUE
|
||||
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
|
||||
WHERE VARIABLE_NAME='default_master_connection';
|
||||
@@session.default_master_connection = VARIABLE_VALUE
|
||||
1
|
||||
SET @@default_master_connection = 'foo';
|
||||
SELECT @@default_master_connection = @@local.default_master_connection;
|
||||
@@default_master_connection = @@local.default_master_connection
|
||||
1
|
||||
SELECT @@local.default_master_connection = @@session.default_master_connection;
|
||||
@@local.default_master_connection = @@session.default_master_connection
|
||||
1
|
||||
SET default_master_connection = 'foo';
|
||||
SELECT @@default_master_connection;
|
||||
@@default_master_connection
|
||||
foo
|
||||
SET local.default_master_connection = 'foo';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'default_master_connection = 'foo'' at line 1
|
||||
SELECT local.default_master_connection;
|
||||
ERROR 42S02: Unknown table 'local' in field list
|
||||
SET session.default_master_connection = 'foo';
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'default_master_connection = 'foo'' at line 1
|
||||
SELECT session.default_master_connection;
|
||||
ERROR 42S02: Unknown table 'session' in field list
|
||||
SELECT default_master_connection = @@session.default_master_connection;
|
||||
ERROR 42S22: Unknown column 'default_master_connection' in 'field list'
|
||||
SET @@session.default_master_connection = @start_session_value;
|
||||
SELECT @@session.default_master_connection;
|
||||
@@session.default_master_connection
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
SET @start_value = @@global.max_relay_log_size;
|
||||
SELECT @start_value;
|
||||
@start_value
|
||||
0
|
||||
1073741824
|
||||
'#--------------------FN_DYNVARS_082_01------------------------#'
|
||||
SET @@global.max_relay_log_size = 5000;
|
||||
Warnings:
|
||||
@@ -9,7 +9,7 @@ Warning 1292 Truncated incorrect max_relay_log_size value: '5000'
|
||||
SET @@global.max_relay_log_size = DEFAULT;
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
1073741824
|
||||
'#---------------------FN_DYNVARS_082_02-------------------------#'
|
||||
SET @@global.max_relay_log_size = @start_value;
|
||||
SELECT @@global.max_relay_log_size = 1024;
|
||||
@@ -17,15 +17,17 @@ SELECT @@global.max_relay_log_size = 1024;
|
||||
0
|
||||
'#--------------------FN_DYNVARS_082_03------------------------#'
|
||||
SET @@global.max_relay_log_size = 0;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '0'
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
4096
|
||||
SET @@global.max_relay_log_size = 1;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '1'
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
4096
|
||||
SET @@global.max_relay_log_size = 1073741824;
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
@@ -48,7 +50,7 @@ Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '-1'
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
4096
|
||||
SET @@global.max_relay_log_size = 100000000000;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '100000000000'
|
||||
@@ -65,7 +67,7 @@ Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '-1024'
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
4096
|
||||
SET @@global.max_relay_log_size = 1073741825;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '1073741825'
|
||||
@@ -90,9 +92,9 @@ SELECT @@global.max_relay_log_size;
|
||||
1073741824
|
||||
'#-------------------FN_DYNVARS_082_05----------------------------#'
|
||||
SET @@session.max_relay_log_size = 4096;
|
||||
ERROR HY000: Variable 'max_relay_log_size' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
SELECT @@session.max_relay_log_size;
|
||||
ERROR HY000: Variable 'max_relay_log_size' is a GLOBAL variable
|
||||
@@session.max_relay_log_size
|
||||
4096
|
||||
'#----------------------FN_DYNVARS_082_06------------------------#'
|
||||
SELECT @@global.max_relay_log_size = VARIABLE_VALUE
|
||||
FROM INFORMATION_SCHEMA.GLOBAL_VARIABLES
|
||||
@@ -110,11 +112,13 @@ Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '1'
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
4096
|
||||
SET @@global.max_relay_log_size = FALSE;
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '0'
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
4096
|
||||
'#---------------------FN_DYNVARS_082_08----------------------#'
|
||||
SET @@global.max_relay_log_size = 5000;
|
||||
Warnings:
|
||||
@@ -124,7 +128,8 @@ SELECT @@max_relay_log_size = @@global.max_relay_log_size;
|
||||
1
|
||||
'#---------------------FN_DYNVARS_082_09----------------------#'
|
||||
SET max_relay_log_size = 6000;
|
||||
ERROR HY000: Variable 'max_relay_log_size' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect max_relay_log_size value: '6000'
|
||||
SELECT @@max_relay_log_size;
|
||||
@@max_relay_log_size
|
||||
4096
|
||||
@@ -141,4 +146,4 @@ ERROR 42S22: Unknown column 'max_relay_log_size' in 'field list'
|
||||
SET @@global.max_relay_log_size = @start_value;
|
||||
SELECT @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size
|
||||
0
|
||||
1073741824
|
||||
|
||||
@@ -35,9 +35,6 @@ VARIABLE_VALUE
|
||||
1024
|
||||
'#--------------------FN_DYNVARS_165_03-------------------------#'
|
||||
SET @@sql_slave_skip_counter = 10;
|
||||
ERROR HY000: Variable 'sql_slave_skip_counter' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
SET @@session.sql_slave_skip_counter = 12;
|
||||
ERROR HY000: Variable 'sql_slave_skip_counter' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
SET @@local.sql_slave_skip_counter = 13;
|
||||
ERROR HY000: Variable 'sql_slave_skip_counter' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
SET @@global.sql_slave_skip_counter = 0;
|
||||
|
||||
128
mysql-test/suite/sys_vars/t/default_master_connection_basic.test
Normal file
128
mysql-test/suite/sys_vars/t/default_master_connection_basic.test
Normal file
@@ -0,0 +1,128 @@
|
||||
############## mysql-test\t\default_master_connection_basic.test ###############
|
||||
#
|
||||
# Implemented in the scope of MDEV-253
|
||||
# The variable is SESSION-only
|
||||
#
|
||||
|
||||
--source include/load_sysvars.inc
|
||||
|
||||
#############################################################
|
||||
# Save initial value #
|
||||
#############################################################
|
||||
|
||||
SET @start_session_value = @@session.default_master_connection;
|
||||
SELECT @start_session_value;
|
||||
|
||||
###################################################################
|
||||
# Display the DEFAULT value of default_master_connection #
|
||||
###################################################################
|
||||
|
||||
SET @@session.default_master_connection = 'bar';
|
||||
SET @@session.default_master_connection = DEFAULT;
|
||||
SELECT @@session.default_master_connection;
|
||||
|
||||
###################################################################
|
||||
# Check the DEFAULT value of default_master_connection #
|
||||
###################################################################
|
||||
|
||||
SET @@session.default_master_connection = @start_session_value;
|
||||
SELECT @@session.default_master_connection = '';
|
||||
|
||||
#################################################
|
||||
# Check that the GLOBAL scope is not applicable #
|
||||
#################################################
|
||||
|
||||
--error ER_LOCAL_VARIABLE
|
||||
SET @@global.default_master_connection = 'master1';
|
||||
--error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SELECT @@global.default_master_connection;
|
||||
|
||||
####################################################################################
|
||||
# Change the value of default_master_connection to a valid value for SESSION Scope #
|
||||
####################################################################################
|
||||
|
||||
SET @@session.default_master_connection = 'master1';
|
||||
SELECT @@session.default_master_connection;
|
||||
SET @@session.default_master_connection = '';
|
||||
SELECT @@session.default_master_connection;
|
||||
SET @@session.default_master_connection = '1234-5678';
|
||||
SELECT @@session.default_master_connection;
|
||||
SET @@session.default_master_connection = '@!*/"';
|
||||
SELECT @@session.default_master_connection;
|
||||
SET @@session.default_master_connection = REPEAT('a',191);
|
||||
SELECT @@session.default_master_connection;
|
||||
SET @@session.default_master_connection = master2;
|
||||
SELECT @@session.default_master_connection;
|
||||
|
||||
|
||||
#####################################################################
|
||||
# Change the value of default_master_connection to an invalid value #
|
||||
#####################################################################
|
||||
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
SET @@session.default_master_connection = 1;
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
SET @@session.default_master_connection = 65530.30;
|
||||
--error ER_WRONG_TYPE_FOR_VAR
|
||||
SET @@session.default_master_connection = FALSE;
|
||||
SELECT @@session.default_master_connection;
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
SET @@session.default_master_connection = REPEAT('a',192);
|
||||
SELECT @@session.default_master_connection;
|
||||
--error ER_WRONG_VALUE_FOR_VAR
|
||||
SET @@session.default_master_connection = NULL;
|
||||
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';
|
||||
|
||||
SELECT @@session.default_master_connection = VARIABLE_VALUE
|
||||
FROM INFORMATION_SCHEMA.SESSION_VARIABLES
|
||||
WHERE VARIABLE_NAME='default_master_connection';
|
||||
|
||||
|
||||
########################################################################################################
|
||||
# Check if accessing variable with SESSION,LOCAL and without SCOPE points to same session variable #
|
||||
########################################################################################################
|
||||
|
||||
SET @@default_master_connection = 'foo';
|
||||
SELECT @@default_master_connection = @@local.default_master_connection;
|
||||
SELECT @@local.default_master_connection = @@session.default_master_connection;
|
||||
|
||||
|
||||
###################################################################################
|
||||
# Check if default_master_connection can be accessed with and without @@ sign #
|
||||
###################################################################################
|
||||
|
||||
SET default_master_connection = 'foo';
|
||||
SELECT @@default_master_connection;
|
||||
--Error ER_PARSE_ERROR
|
||||
SET local.default_master_connection = 'foo';
|
||||
--Error ER_UNKNOWN_TABLE
|
||||
SELECT local.default_master_connection;
|
||||
--Error ER_PARSE_ERROR
|
||||
SET session.default_master_connection = 'foo';
|
||||
--Error ER_UNKNOWN_TABLE
|
||||
SELECT session.default_master_connection;
|
||||
--Error ER_BAD_FIELD_ERROR
|
||||
SELECT default_master_connection = @@session.default_master_connection;
|
||||
|
||||
|
||||
####################################
|
||||
# Restore initial value #
|
||||
####################################
|
||||
|
||||
SET @@session.default_master_connection = @start_session_value;
|
||||
SELECT @@session.default_master_connection;
|
||||
|
||||
|
||||
#############################################################
|
||||
# END OF default_master_connection TESTS #
|
||||
#############################################################
|
||||
|
||||
@@ -105,9 +105,7 @@ SELECT @@global.max_relay_log_size;
|
||||
# Test if accessing session max_relay_log_size gives error #
|
||||
########################################################################
|
||||
|
||||
--Error ER_GLOBAL_VARIABLE
|
||||
SET @@session.max_relay_log_size = 4096;
|
||||
--Error ER_INCORRECT_GLOBAL_LOCAL_VAR
|
||||
SELECT @@session.max_relay_log_size;
|
||||
|
||||
|
||||
@@ -150,7 +148,6 @@ SELECT @@max_relay_log_size = @@global.max_relay_log_size;
|
||||
# Check if max_relay_log_size can be accessed with and without @@ sign #
|
||||
#############################################################################
|
||||
|
||||
--Error ER_GLOBAL_VARIABLE
|
||||
SET max_relay_log_size = 6000;
|
||||
SELECT @@max_relay_log_size;
|
||||
--Error ER_PARSE_ERROR
|
||||
|
||||
@@ -22,6 +22,11 @@
|
||||
# server-system-variables.html #
|
||||
# #
|
||||
###############################################################################
|
||||
# #
|
||||
# Modification date: 2012-09-30 #
|
||||
# With implementation of MDEV-253, the variable scope can be session #
|
||||
# #
|
||||
###############################################################################
|
||||
|
||||
--source include/not_embedded.inc
|
||||
--source include/load_sysvars.inc
|
||||
@@ -88,11 +93,8 @@ WHERE VARIABLE_NAME='sql_slave_skip_counter';
|
||||
# Checking if variable is accessible with session scope #
|
||||
###################################################################
|
||||
|
||||
--Error ER_GLOBAL_VARIABLE
|
||||
SET @@sql_slave_skip_counter = 10;
|
||||
--Error ER_GLOBAL_VARIABLE
|
||||
SET @@session.sql_slave_skip_counter = 12;
|
||||
--Error ER_GLOBAL_VARIABLE
|
||||
SET @@local.sql_slave_skip_counter = 13;
|
||||
|
||||
SET @@global.sql_slave_skip_counter = 0;
|
||||
|
||||
Reference in New Issue
Block a user