polardbxengine/mysql-test/include/rpl_start_server.inc

140 lines
4.7 KiB
PHP

# ==== Purpose ====
#
# Start the server given by $rpl_server_number. This should normally
# be invoked after rpl_stop_server.inc.
#
# ==== Usage ====
#
# --let $rpl_server_number= N
# [--let $rpl_start_with_gtids= [0|1]]
# [--let $rpl_server_parameters= --flag1 --flag2 ...]
# [--let $rpl_omit_print_server_parameters= 0]
# [--let $rpl_debug_trace= 1]
# [--let $rpl_debug= 1]
# [--let $rpl_server_error= 0]
# --source include/rpl_start_server.inc
#
# Parameters:
#
# $rpl_server_number
# Number to identify the server that needs to reconnect. 1 is the
# master server, 2 the slave server, 3 the 3rd server, and so on.
# Cf. include/rpl_init.inc
#
# $rpl_start_with_gtids
# If set to 1, the server will start with GTIDs on, i.e.:
# --gtid-mode=on --enforce-gtid-consistency
# --log-bin --log-slave-updates
# --default-storage-engine=InnoDB --default-tmp-storage-engine=InnoDB
# If set to 0, the server will start without GTIDs, i.e.:
# --gtid-mode=off
# If not set, the server will start with default parameters (depends on
# my.cnf and .opt file).
#
# $rpl_server_parameters
# If set, extra parameters given by this variable are passed to
# mysqld.
#
# $rpl_omit_print_server_parameters
# If set, server parameters are not printed.
#
# $rpl_debug_trace
# Start the server with debug traces enabled, as with mtr --debug.
# Normally, you can just pass --debug to mtr. However, mtr --debug
# will cancel the effect of any --debug parameters specified in
# $rpl_server_parameters. If $rpl_server_parameters contains
# --debug, set $rpl_debug_trace=1 instead of passing --debug to
# mtr.
#
# $rpl_debug
# See include/rpl_init.inc
#
# $rpl_server_error
# If set, failure of the server startup is expected.
#
# ==== See also ====
#
# rpl_stop_server.inc
# rpl_restart_server.inc
# Pretty-printed text
--let $_rpl_start_server_info= server_number=$rpl_server_number
# Actual arguments sent to mysqld
--let _RPL_START_SERVER_PARAMETERS= $rpl_server_parameters
if ($rpl_start_with_gtids == 1)
{
--let $_rpl_start_server_info= $_rpl_start_server_info gtids=on
--let _RPL_START_SERVER_PARAMETERS= $_RPL_START_SERVER_PARAMETERS --log-bin --log-slave-updates --enforce-gtid-consistency --gtid-mode=on --default-storage-engine=InnoDB --default-tmp-storage-engine=InnoDB
}
if ($rpl_start_with_gtids == 0)
{
--let $_rpl_start_server_info= $_rpl_start_server_info gtids=off
--let _RPL_START_SERVER_PARAMETERS= $_RPL_START_SERVER_PARAMETERS --gtid-mode=off
}
if ($rpl_server_parameters != '')
{
if (!$rpl_omit_print_server_parameters)
{
--let $_rpl_start_server_info= $_rpl_start_server_info parameters: $rpl_server_parameters
}
}
if ($rpl_debug)
{
--echo # debug: rpl_server_number='$rpl_server_number' rpl_start_with_gtids='$rpl_start_with_gtids' rpl_server_parameters='$rpl_server_parameters' _RPL_START_SERVER_PARAMETERS='$_RPL_START_SERVER_PARAMETERS'
}
--let $include_filename= rpl_start_server.inc [$_rpl_start_server_info]
--source include/begin_include_file.inc
--let $rpl_connection_name= server_$rpl_server_number
--source include/rpl_connection.inc
--let _RPL_DEBUG_TRACE= $rpl_debug_trace
--let _RPL_SERVER_NUMBER= $rpl_server_number
--let _RPL_DEBUG= $rpl_debug
# Write file to make mysql-test-run.pl start up the server again
# Because mysqltest is such a wonderful language, we use perl instead.
perl;
my $vardir= $ENV{'MYSQLTEST_VARDIR'};
my $params= $ENV{'_RPL_START_SERVER_PARAMETERS'};
my $server_number= $ENV{'_RPL_SERVER_NUMBER'};
my $trace_file= "$vardir/log/mysqld.$server_number.trace";
my $expect_file= "$vardir/tmp/mysqld.$server_number.expect";
if ($ENV{'_RPL_DEBUG_TRACE'})
{
my $flags="d:i:a$trace_file:t";
($params =~ s/(?<=--debug=)/$flags:/) or ($params .= " --debug=$flags");
}
if ($ENV{'_RPL_DEBUG'})
{
print "# debug: params='$params'\n";
}
# Write trace file
open FILE, ">> $trace_file" or die "Error opening trace file '$trace_file': $!";
print FILE "\n======== SERVER START \[" . scalar(localtime()) . "\] ========\n"
or die "Error printing to trace file '$trace_file': $!";
close FILE or die "Error closing trace file '$trace_file': $!";
# Write expect file
open FILE, "> $expect_file" or die "Error opening $expect_file: $!";
print FILE ($params eq '' ? 'restart' : "restart:$params")
or die "Error printing to $expect_file: $!";
close FILE or die "Error closing $expect_file: $!";
EOF
#--exec echo "$_rpl_start_server_command" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
if (!$rpl_server_error)
{
--source include/rpl_reconnect.inc
--let $include_filename= rpl_start_server.inc [$_rpl_start_server_info]
--source include/end_include_file.inc
}
if ($rpl_server_error)
{
--dec $_include_file_depth
}