📄 mysql-test-run.pl
字号:
path_myerr => "$opt_vardir/log/slave2.err", path_mylog => "$opt_vardir/log/slave2.log", path_mypid => "$opt_vardir/run/slave2.pid", path_mysock => "$sockdir/slave2.sock", path_myport => $opt_slave_myport + 2, start_timeout => 300, }; $instance_manager= { path_err => "$opt_vardir/log/im.err", path_log => "$opt_vardir/log/im.log", path_pid => "$opt_vardir/run/im.pid", path_sock => "$sockdir/im.sock", port => $im_port, start_timeout => $master->[0]->{'start_timeout'}, admin_login => 'im_admin', admin_password => 'im_admin_secret', admin_sha1 => '*598D51AD2DFF7792045D6DF3DDF9AA1AF737B295', password_file => "$opt_vardir/im.passwd", defaults_file => "$opt_vardir/im.cnf", }; $instance_manager->{'instances'}->[0]= { server_id => 1, port => $im_mysqld1_port, path_datadir => "$opt_vardir/im_mysqld_1.data", path_sock => "$sockdir/mysqld_1.sock", path_pid => "$opt_vardir/run/mysqld_1.pid", old_log_format => 1 }; $instance_manager->{'instances'}->[1]= { server_id => 2, port => $im_mysqld2_port, path_datadir => "$opt_vardir/im_mysqld_2.data", path_sock => "$sockdir/mysqld_2.sock", path_pid => "$opt_vardir/run/mysqld_2.pid", nonguarded => 1, old_log_format => 1 }; if ( $opt_extern ) { $glob_use_running_server= 1; $opt_skip_rpl= 1; # We don't run rpl test cases $master->[0]->{'path_mysock'}= $opt_socket; } $path_timefile= "$opt_vardir/log/mysqltest-time"; $path_mysqltest_log= "$opt_vardir/log/mysqltest.log";}################################################################################ Set paths to various executable programs###############################################################################sub executable_setup () { if ( $opt_source_dist ) { if ( $glob_win32 ) { $path_client_bindir= mtr_path_exists("$glob_basedir/client_release", "$glob_basedir/bin"); $exe_mysqld= mtr_exe_exists ("$path_client_bindir/mysqld-max", "$path_client_bindir/mysqld-nt", "$path_client_bindir/mysqld", "$path_client_bindir/mysqld-debug",); $path_language= mtr_path_exists("$glob_basedir/share/english/"); $path_charsetsdir= mtr_path_exists("$glob_basedir/share/charsets"); $exe_my_print_defaults= mtr_exe_exists("$path_client_bindir/my_print_defaults"); } else { $path_client_bindir= mtr_path_exists("$glob_basedir/client"); $exe_mysqld= mtr_exe_exists ("$glob_basedir/sql/mysqld"); $exe_mysqlslap= mtr_exe_exists ("$path_client_bindir/mysqlslap"); $path_language= mtr_path_exists("$glob_basedir/sql/share/english/"); $path_charsetsdir= mtr_path_exists("$glob_basedir/sql/share/charsets"); $exe_im= mtr_exe_exists( "$glob_basedir/server-tools/instance-manager/mysqlmanager"); $exe_my_print_defaults= mtr_exe_exists("$glob_basedir/extra/my_print_defaults"); } if ( $glob_use_embedded_server ) { my $path_examples= "$glob_basedir/libmysqld/examples"; $exe_mysqltest= mtr_exe_exists("$path_examples/mysqltest_embedded"); $exe_mysql_client_test= mtr_exe_exists("$path_examples/mysql_client_test_embedded", "/usr/bin/false"); } else { if ( $opt_valgrind_mysqltest ) { # client/mysqltest might be a libtool .sh script, so look for real exe # to avoid valgrinding bash ;) $exe_mysqltest= mtr_exe_exists("$path_client_bindir/.libs/lt-mysqltest", "$path_client_bindir/.libs/mysqltest", "$path_client_bindir/mysqltest"); } else { $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest"); } $exe_mysql_client_test= mtr_exe_exists("$glob_basedir/tests/mysql_client_test", "/usr/bin/false"); } $exe_mysqlcheck= mtr_exe_exists("$path_client_bindir/mysqlcheck"); $exe_mysqldump= mtr_exe_exists("$path_client_bindir/mysqldump"); $exe_mysqlimport= mtr_exe_exists("$path_client_bindir/mysqlimport"); $exe_mysqlshow= mtr_exe_exists("$path_client_bindir/mysqlshow"); $exe_mysqlbinlog= mtr_exe_exists("$path_client_bindir/mysqlbinlog"); $exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin"); $exe_mysql= mtr_exe_exists("$path_client_bindir/mysql"); $exe_mysql_fix_system_tables= mtr_script_exists("$glob_basedir/scripts/mysql_fix_privilege_tables"); $path_ndb_tools_dir= mtr_path_exists("$glob_basedir/storage/ndb/tools"); $exe_ndb_mgm= "$glob_basedir/storage/ndb/src/mgmclient/ndb_mgm"; } else { $path_client_bindir= mtr_path_exists("$glob_basedir/bin"); $exe_mysqlcheck= mtr_exe_exists("$path_client_bindir/mysqlcheck"); $exe_mysqldump= mtr_exe_exists("$path_client_bindir/mysqldump"); $exe_mysqlimport= mtr_exe_exists("$path_client_bindir/mysqlimport"); $exe_mysqlshow= mtr_exe_exists("$path_client_bindir/mysqlshow"); $exe_mysqlbinlog= mtr_exe_exists("$path_client_bindir/mysqlbinlog"); $exe_mysqladmin= mtr_exe_exists("$path_client_bindir/mysqladmin"); $exe_mysql= mtr_exe_exists("$path_client_bindir/mysql"); $exe_mysql_fix_system_tables= mtr_script_exists("$path_client_bindir/mysql_fix_privilege_tables", "$glob_basedir/scripts/mysql_fix_privilege_tables"); $exe_my_print_defaults= mtr_exe_exists("$path_client_bindir/my_print_defaults"); $path_language= mtr_path_exists("$glob_basedir/share/mysql/english/", "$glob_basedir/share/english/"); $path_charsetsdir= mtr_path_exists("$glob_basedir/share/mysql/charsets", "$glob_basedir/share/charsets"); if ( $glob_win32 ) { $exe_mysqld= mtr_exe_exists ("$glob_basedir/bin/mysqld-nt", "$glob_basedir/bin/mysqld", "$glob_basedir/bin/mysqld-debug",); } else { $exe_mysqld= mtr_exe_exists ("$glob_basedir/libexec/mysqld", "$glob_basedir/bin/mysqld"); $exe_mysqlslap= mtr_exe_exists("$path_client_bindir/mysqlslap"); } $exe_im= mtr_exe_exists("$glob_basedir/libexec/mysqlmanager", "$glob_basedir/bin/mysqlmanager"); if ( $glob_use_embedded_server ) { $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest_embedded"); $exe_mysql_client_test= mtr_exe_exists("$glob_basedir/tests/mysql_client_test_embedded", "$path_client_bindir/mysql_client_test_embedded", "/usr/bin/false"); } else { $exe_mysqltest= mtr_exe_exists("$path_client_bindir/mysqltest"); $exe_mysql_client_test= mtr_exe_exists("$path_client_bindir/mysql_client_test", "/usr/bin/false"); # FIXME temporary } $path_ndb_tools_dir= "$glob_basedir/bin"; $exe_ndb_mgm= "$glob_basedir/bin/ndb_mgm"; } $exe_master_mysqld= $exe_master_mysqld || $exe_mysqld; $exe_slave_mysqld= $exe_slave_mysqld || $exe_mysqld; $path_ndb_backup_dir= "$opt_vardir/ndbcluster-$opt_ndbcluster_port"; $file_ndb_testrun_log= "$opt_vardir/log/ndb_testrun.log";}################################################################################ Set environment to be used by childs of this process################################################################################ Note that some env is setup in spawn/run, in "mtr_process.pl"sub environment_setup () { # -------------------------------------------------------------------------- # We might not use a standard installation directory, like /usr/lib. # Set LD_LIBRARY_PATH to make sure we find our installed libraries. # -------------------------------------------------------------------------- unless ( $opt_source_dist ) { $ENV{'LD_LIBRARY_PATH'}= "$glob_basedir/lib" . ($ENV{'LD_LIBRARY_PATH'} ? ":$ENV{'LD_LIBRARY_PATH'}" : ""); $ENV{'DYLD_LIBRARY_PATH'}= "$glob_basedir/lib" . ($ENV{'DYLD_LIBRARY_PATH'} ? ":$ENV{'DYLD_LIBRARY_PATH'}" : ""); } # -------------------------------------------------------------------------- # Also command lines in .opt files may contain env vars # -------------------------------------------------------------------------- $ENV{'UMASK'}= "0660"; # The octal *string* $ENV{'UMASK_DIR'}= "0770"; # The octal *string* $ENV{'LC_COLLATE'}= "C"; $ENV{'USE_RUNNING_SERVER'}= $glob_use_running_server; $ENV{'MYSQL_TEST_DIR'}= $glob_mysql_test_dir; $ENV{'MYSQL_TEST_WINDIR'}= $glob_mysql_test_dir; $ENV{'MASTER_MYSOCK'}= $master->[0]->{'path_mysock'}; $ENV{'MASTER_WINMYSOCK'}= $master->[0]->{'path_mysock'}; $ENV{'MASTER_MYSOCK1'}= $master->[1]->{'path_mysock'}; $ENV{'MASTER_MYPORT'}= $master->[0]->{'path_myport'}; $ENV{'MASTER_MYPORT1'}= $master->[1]->{'path_myport'}; $ENV{'SLAVE_MYPORT'}= $slave->[0]->{'path_myport'};# $ENV{'MYSQL_TCP_PORT'}= '@MYSQL_TCP_PORT@'; # FIXME $ENV{'MYSQL_TCP_PORT'}= 3306; $ENV{'NDBCLUSTER_PORT'}= $opt_ndbcluster_port; $ENV{'NDBCLUSTER_PORT_SLAVE'}=$opt_ndbcluster_port_slave; $ENV{'IM_PATH_PID'}= $instance_manager->{path_pid}; $ENV{'IM_MYSQLD1_SOCK'}= $instance_manager->{instances}->[0]->{path_sock}; $ENV{'IM_MYSQLD1_PORT'}= $instance_manager->{instances}->[0]->{port}; $ENV{'IM_MYSQLD1_PATH_PID'}=$instance_manager->{instances}->[0]->{path_pid}; $ENV{'IM_MYSQLD2_SOCK'}= $instance_manager->{instances}->[1]->{path_sock}; $ENV{'IM_MYSQLD2_PORT'}= $instance_manager->{instances}->[1]->{port}; $ENV{'IM_MYSQLD2_PATH_PID'}=$instance_manager->{instances}->[1]->{path_pid}; if ( $glob_cygwin_perl ) { foreach my $key ('MYSQL_TEST_WINDIR','MASTER_MYSOCK') { $ENV{$key}= `cygpath -w $ENV{$key}`; $ENV{$key} =~ s,\\,\\\\,g; chomp($ENV{$key}); } } # We are nice and report a bit about our settings print "Using MTR_BUILD_THREAD = ",$ENV{MTR_BUILD_THREAD} || 0,"\n"; print "Using MASTER_MYPORT = $ENV{MASTER_MYPORT}\n"; print "Using MASTER_MYPORT1 = $ENV{MASTER_MYPORT1}\n"; print "Using SLAVE_MYPORT = $ENV{SLAVE_MYPORT}\n"; print "Using NDBCLUSTER_PORT = $ENV{NDBCLUSTER_PORT}\n"; print "Using NDBCLUSTER_PORT_SLAVE = $ENV{NDBCLUSTER_PORT_SLAVE}\n"; print "Using IM_MYSQLD1_PORT = $ENV{'IM_MYSQLD1_PORT'}\n"; print "Using IM_MYSQLD2_PORT = $ENV{'IM_MYSQLD2_PORT'}\n";}################################################################################ If we get a ^C, we try to clean up before termination################################################################################ FIXME check restrictions what to do in a signal handlersub signal_setup () { $SIG{INT}= \&handle_int_signal;}sub handle_int_signal () { $SIG{INT}= 'DEFAULT'; # If we get a ^C again, we die... mtr_warning("got INT signal, cleaning up....."); stop_masters_slaves(); mtr_error("We die from ^C signal from user");}################################################################################ Handle left overs from previous runs###############################################################################sub kill_running_server () { if ( $opt_fast or $glob_use_embedded_server ) { # FIXME is embedded server really using PID files?! unlink($master->[0]->{'path_mypid'}); unlink($master->[1]->{'path_mypid'}); unlink($slave->[0]->{'path_mypid'}); unlink($slave->[1]->{'path_mypid'}); unlink($slave->[2]->{'path_mypid'}); } else { # Ensure that no old mysqld test servers are running # This is different from terminating processes we have # started from ths run of the script, this is terminating # leftovers from previous runs. mtr_report("Killing Possible Leftover Processes"); mkpath("$opt_vardir/log"); # Needed for mysqladmin log mtr_kill_leftovers(); ndbcluster_stop(); $master->[0]->{'ndbcluster'}= 1; ndbcluster_stop_slave(); $slave->[0]->{'ndbcluster'}= 1; }}sub kill_and_cleanup () { kill_running_server (); mtr_report("Removing Stale Files"); rmtree("$opt_vardir/log"); rmtree("$opt_vardir/ndbcluster-$opt_ndbcluster_port"); rmtree("$opt_vardir/run"); rmtree("$opt_vardir/tmp"); mkpath("$opt_vardir/log"); mkpath("$opt_vardir/run"); mkpath("$opt_vardir/tmp"); mkpath($opt_tmpdir) if $opt_tmpdir ne "$opt_vardir/tmp"; # FIXME do we really need to create these all, or are they # created for us when tables are created? my @data_dir_lst = ( $master->[0]->{'path_myddir'}, $master->[1]->{'path_myddir'}, $slave->[0]->{'path_myddir'}, $slave->[1]->{'path_myddir'}, $slave->[2]->{'path_myddir'}); foreach my $instance (@{$instance_manager->{'instances'}}) { push(@data_dir_lst, $instance->{'path_datadir'}); } foreach my $data_dir (@data_dir_lst) { rmtree("$data_dir"); mkpath("$data_dir/mysql"); mkpath("$data_dir/test"); } # To make some old test cases work, we create a soft # link from the old "var" location to the new one if ( ! $glob_win32 and $opt_vardir ne "$glob_mysql_test_dir/var" ) { # FIXME why bother with the above, why not always remove all of var?! rmtree("$glob_mysql_test_dir/var"); # Clean old var, FIXME or rename it?! symlink($opt_vardir, "$glob_mysql_test_dir/var"); }}sub check_ssl_support () { if ($opt_skip_ssl) { mtr_report("Skipping SSL"); $opt_ssl_supported= 0; $opt_ssl= 0; return; } # check ssl support by testing using a switch # that is only available in that case if ( mtr_run($exe_mysqld, ["--no-defaults", "--ssl", "--help"], "", "/dev/null", "/dev/null", "") != 0 ) { if ( $opt_ssl) { mtr_error("Couldn't find support for SSL"); return; } mtr_report("Skipping SSL, mysqld not compiled with SSL"); $opt_ssl_supported= 0; $opt_ssl= 0; return; } mtr_report("Setting mysqld to support SSL connections"); $opt_ssl_supported= 1;}################################################################################ Start the ndb cluster###############################################################################sub check_ndbcluster_support () { if ($opt_skip_ndbcluster) { mtr_report("Skipping ndbcluster"); $opt_skip_ndbcluster_slave= 1; $opt_with_ndbcluster= 0; $opt_with_ndbcluster_slave= 0; return; } # check ndbcluster support by testing using a switch # that is only available in that case if ( mtr_run($exe_mysqld, ["--no-defaults", "--ndb-use-exact-count", "--help"], "", "/dev/null", "/dev/null", "") != 0 ) { mtr_report("Skipping ndbcluster, mysqld not compiled with ndbcluster"); $opt_skip_ndbcluster= 1; $opt_skip_ndbcluster_slave= 1; $opt_with_ndbcluster= 0; $opt_with_ndbcluster_slave= 0;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -