200 lines
5.5 KiB
PHP
200 lines
5.5 KiB
PHP
# ==== Purpose ====
|
|
#
|
|
# Switch GTID_MODE on all servers or on a subset of them. Step on all
|
|
# servers simultaneously, so that replication does not need to stop.
|
|
#
|
|
# Optionally, sync replication first.
|
|
#
|
|
# This works even if rpl_init.inc has not been invoked; in that case
|
|
# it assumes there is only one server running.
|
|
#
|
|
# ==== Usage ====
|
|
#
|
|
# [--let $rpl_gtid_mode= [OFF|OFF_PERMISSIVE|ON_PERMISSIVE|ON|0|1|2|3]]
|
|
# [--let $rpl_set_enforce_gtid_consistency= [0|1]]
|
|
# [--let $rpl_server_numbers= [X[,Y[,Z...]]]
|
|
# [--let $rpl_skip_sync= 1]
|
|
# [--let $rpl_only_running_threads= 1]
|
|
# [--let $rpl_debug= 1]
|
|
# [--let $no_extra_info= 0]
|
|
# --source include/rpl_set_gtid_mode.inc
|
|
#
|
|
# Parameters:
|
|
# $rpl_gtid_mode= [OFF|OFF_PERMISSIVE|ON_PERMISSIVE|ON|0|1|2|3]
|
|
# By default, switches to ON. Set this to switch to any other mode.
|
|
#
|
|
# $rpl_set_enforce_gtid_consistency
|
|
# By default, leaves ENFORCE_GTID_CONSISTENCY unchagned. If this is
|
|
# set, changes ENFORCE_GTID_CONSISTENCY to the specified value.
|
|
#
|
|
# $rpl_server_numbers= [X[,Y[,Z...]]]
|
|
# By default, switches GTID_MODE on all servers configured by
|
|
# rpl_init. Set $rpl_server_numbers to a comma-separated list if
|
|
# you want to switch on a specific subset of the servers.
|
|
#
|
|
# $rpl_skip_sync
|
|
# By default, all slaves are synced using rpl_sync.inc. Set this
|
|
# option to 1 to disable this behavior (note that you must
|
|
# manually sync all servers in this case). Normally you want to
|
|
# sync, but you need to disable sync if you use multi-source.
|
|
#
|
|
# $rpl_only_running_threads
|
|
# See include/rpl_sync.inc
|
|
#
|
|
# $rpl_debug=1
|
|
# See include/rpl_init.inc
|
|
#
|
|
# $no_extra_info=0
|
|
# Do not print the mode and server after the include file name. This option
|
|
# allows to easly support tests that may invoke with dynamic parameter
|
|
# values.
|
|
#
|
|
|
|
# Get the new gtid_mode
|
|
--let $_rsgm_new_mode= $rpl_gtid_mode
|
|
if ($_rsgm_new_mode == '')
|
|
{
|
|
--let $_rsgm_new_mode= ON
|
|
}
|
|
|
|
# Get list of servers
|
|
--let $_rsgm_server_list= $rpl_server_numbers
|
|
if ($_rsgm_server_list == '')
|
|
{
|
|
if ($rpl_inited)
|
|
{
|
|
--let $_rsgm_server_count= $_rpl_server_count
|
|
if ($_rsgm_server_count == '')
|
|
{
|
|
--die !!!ERROR IN TEST FRAMEWORK: $_rpl_server_count should be set if $rpl_inited is set
|
|
}
|
|
--let $_rsgm_server_list= 1
|
|
--let $_rsgm_server_number= 2
|
|
while ($_rsgm_server_number <= $_rsgm_server_count)
|
|
{
|
|
--let $_rsgm_server_list= $_rsgm_server_list,$_rsgm_server_number
|
|
--inc $_rsgm_server_number
|
|
}
|
|
}
|
|
if (!$rpl_inited)
|
|
{
|
|
--let $_rsgm_server_list= 1
|
|
}
|
|
}
|
|
|
|
--let $_rsgm_mute= $no_extra_info
|
|
if ($_rsgm_mute == '')
|
|
{
|
|
--let $_rsgm_mute= 0
|
|
}
|
|
|
|
--let $include_filename= rpl_set_gtid_mode.inc
|
|
if ($_rsgm_mute == 0)
|
|
{
|
|
--let $include_filename= rpl_set_gtid_mode.inc [$_rsgm_new_mode on servers $_rsgm_server_list]
|
|
}
|
|
--source include/begin_include_file.inc
|
|
|
|
if ($rpl_inited)
|
|
{
|
|
if (!$rpl_skip_sync)
|
|
{
|
|
--source include/rpl_sync.inc
|
|
}
|
|
|
|
--let $_rsgm_server_number= `SELECT SUBSTRING_INDEX('$_rsgm_server_list', ',', 1)`
|
|
--connection server_$_rsgm_server_number
|
|
}
|
|
--let $_rsgm_current_mode= `SELECT FIND_IN_SET(@@GLOBAL.GTID_MODE, 'OFF,OFF_PERMISSIVE,ON_PERMISSIVE,ON')`
|
|
--dec $_rsgm_current_mode
|
|
|
|
--let $_rsgm_new_mode= `SELECT FIND_IN_SET('$_rsgm_new_mode', 'OFF,OFF_PERMISSIVE,ON_PERMISSIVE,ON') + FIND_IN_SET('$_rsgm_new_mode', '0,1,2,3')`
|
|
--dec $_rsgm_new_mode
|
|
if ($_rsgm_new_mode == -1)
|
|
{
|
|
--echo !!!ERROR IN TEST: rpl_gtid_mode was set to '$rpl_gtid_mode'
|
|
--die !!!ERROR IN TEST: Wrong value for $rpl_gtid_mode. Set one of the valid values.
|
|
}
|
|
|
|
if (!$rpl_debug)
|
|
{
|
|
--disable_query_log
|
|
}
|
|
if ($rpl_debug)
|
|
{
|
|
--echo OLD:$_rsgm_current_mode NEW:$_rsgm_new_mode
|
|
}
|
|
|
|
if ($rpl_set_enforce_gtid_consistency == 1)
|
|
{
|
|
--let $_rsgm_server_todo= $_rsgm_server_list
|
|
|
|
while ($_rsgm_server_todo)
|
|
{
|
|
if ($rpl_inited)
|
|
{
|
|
--let $_rsgm_server_number= `SELECT SUBSTRING_INDEX('$_rsgm_server_todo', ',', 1)`
|
|
|
|
--let $rpl_connection_name= server_$_rsgm_server_number
|
|
--source include/rpl_connection.inc
|
|
}
|
|
eval SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY= 1;
|
|
|
|
--let $_rsgm_server_todo= `SELECT SUBSTRING('$_rsgm_server_todo', LENGTH('$_rsgm_server_number') + 2)`
|
|
}
|
|
}
|
|
|
|
while ($_rsgm_current_mode != $_rsgm_new_mode)
|
|
{
|
|
if ($rpl_debug)
|
|
{
|
|
--echo current mode: $_rsgm_current_mode; new mode: $_rsgm_new_mode
|
|
}
|
|
if ($_rsgm_current_mode < $_rsgm_new_mode)
|
|
{
|
|
--inc $_rsgm_current_mode
|
|
}
|
|
if ($_rsgm_current_mode > $_rsgm_new_mode)
|
|
{
|
|
--dec $_rsgm_current_mode
|
|
}
|
|
|
|
--let $_rsgm_server_todo= $_rsgm_server_list
|
|
|
|
while ($_rsgm_server_todo)
|
|
{
|
|
if ($rpl_inited)
|
|
{
|
|
--let $_rsgm_server_number= `SELECT SUBSTRING_INDEX('$_rsgm_server_todo', ',', 1)`
|
|
|
|
--let $rpl_connection_name= server_$_rsgm_server_number
|
|
--source include/rpl_connection.inc
|
|
}
|
|
eval SET @@GLOBAL.GTID_MODE= $_rsgm_current_mode;
|
|
|
|
--let $_rsgm_server_todo= `SELECT SUBSTRING('$_rsgm_server_todo', LENGTH('$_rsgm_server_number') + 2)`
|
|
}
|
|
}
|
|
|
|
if ($rpl_set_enforce_gtid_consistency == 0)
|
|
{
|
|
--let $_rsgm_server_todo= $_rsgm_server_list
|
|
|
|
while ($_rsgm_server_todo)
|
|
{
|
|
if ($rpl_inited)
|
|
{
|
|
--let $_rsgm_server_number= `SELECT SUBSTRING_INDEX('$_rsgm_server_todo', ',', 1)`
|
|
|
|
--let $rpl_connection_name= server_$_rsgm_server_number
|
|
--source include/rpl_connection.inc
|
|
}
|
|
eval SET @@GLOBAL.ENFORCE_GTID_CONSISTENCY= 0;
|
|
|
|
--let $_rsgm_server_todo= `SELECT SUBSTRING('$_rsgm_server_todo', LENGTH('$_rsgm_server_number') + 2)`
|
|
}
|
|
}
|
|
|
|
--let $include_filename= rpl_set_gtid_mode.inc
|
|
--source include/end_include_file.inc
|