Loading mysql-test/lib/My/Find.pm +35 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ use Carp; use My::Platform; use base qw(Exporter); our @EXPORT= qw(my_find_bin my_find_dir NOT_REQUIRED); our @EXPORT= qw(my_find_bin my_find_dir my_find_file NOT_REQUIRED); our $vs_config_dir; Loading Loading @@ -77,6 +77,40 @@ sub my_find_bin { } # # my_find_file - find a file with "name_1...name_n" in # paths "path_1...path_n" and return the full path # # Example: # my $mysqld_exe= my_find_file($basedir. # ["sql", "bin"], # "filename"); # # # Also supports NOT_REQUIRED flag # # NOTE: The function honours MTR_VS_CONFIG environment variable # # sub my_find_file { my ($base, $paths, $names, $required)= @_; croak "usage: my_find_file(<base>, <paths>, <names>, [<required>])" unless @_ == 4 or @_ == 3; # ------------------------------------------------------- # Find and return the first executable # ------------------------------------------------------- foreach my $path (my_find_paths($base, $paths, $names, $bin_extension)) { return $path if ( -f $path ); } if (defined $required and $required == NOT_REQUIRED){ # Return empty string to indicate not found return ""; } find_error($base, $paths, $names); } # # my_find_dir - find the first existing directory in one of # the given paths Loading mysql-test/mysql-test-run.pl +73 −44 Original line number Diff line number Diff line Loading @@ -188,8 +188,6 @@ my $exe_ndbd; my $exe_ndb_mgmd; my $exe_ndb_waiter; our $path_sql_dir; our $debug_compiled_binaries; our %mysqld_variables; Loading Loading @@ -651,7 +649,6 @@ sub run_worker ($) { setup_vardir(); check_running_as_root(); mysql_install_db($thread_num); if ( using_extern() ) { create_config_file_for_extern(%opts_extern); Loading Loading @@ -894,21 +891,10 @@ sub command_line_setup { "$basedir/sql/share", "$basedir/share"); $path_language= mtr_path_exists("$path_share/english"); $path_charsetsdir= mtr_path_exists("$path_share/charsets"); # Look for SQL scripts directory if ( mtr_file_exists("$path_share/mysql_system_tables.sql") ne "") { # The SQL scripts are in path_share $path_sql_dir= $path_share; } else { $path_sql_dir= mtr_path_exists("$basedir/share", "$basedir/scripts"); } if (using_extern()) { # Connect to the running mysqld and find out what it supports Loading Loading @@ -2419,7 +2405,7 @@ sub initialize_servers { remove_stale_vardir(); setup_vardir(); mysql_install_db(0); mysql_install_db(default_mysqld(), "$opt_vardir/install.db"); } } } Loading Loading @@ -2474,9 +2460,33 @@ sub sql_to_bootstrap { } sub default_mysqld { # Generate new config file from template my $config= My::ConfigFactory->new_config ( { basedir => $basedir, template_path => "include/default_my.cnf", vardir => $opt_vardir, tmpdir => $opt_tmpdir, baseport => 0, user => $opt_user, password => '', } ); my $mysqld= $config->group('mysqld.1') or mtr_error("Couldn't find mysqld.1 in default config"); return $mysqld; } sub mysql_install_db { my ($thread_num)= @_; my $data_dir= "$opt_vardir/install.db"; my ($mysqld, $datadir)= @_; my $install_datadir= $datadir || $mysqld->value('datadir'); my $install_basedir= $mysqld->value('basedir'); my $install_lang= $mysqld->value('language'); my $install_chsdir= $mysqld->value('character-sets-dir'); mtr_report("Installing system database..."); Loading @@ -2484,8 +2494,8 @@ sub mysql_install_db { mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--bootstrap"); mtr_add_arg($args, "--basedir=%s", $basedir); mtr_add_arg($args, "--datadir=%s", $data_dir); mtr_add_arg($args, "--basedir=%s", $install_basedir); mtr_add_arg($args, "--datadir=%s", $install_datadir); mtr_add_arg($args, "--loose-skip-innodb"); mtr_add_arg($args, "--loose-skip-ndbcluster"); mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/"); Loading @@ -2497,47 +2507,60 @@ sub mysql_install_db { $path_vardir_trace); } mtr_add_arg($args, "--language=%s", $path_language); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); mtr_add_arg($args, "--language=%s", $install_lang); mtr_add_arg($args, "--character-sets-dir=%s", $install_chsdir); # If DISABLE_GRANT_OPTIONS is defined when the server is compiled (e.g., # configure --disable-grant-options), mysqld will not recognize the # --bootstrap or --skip-grant-tables options. The user can set # MYSQLD_BOOTSTRAP to the full path to a mysqld which does accept # --bootstrap, to accommodate this. my $exe_mysqld_bootstrap = $ENV{'MYSQLD_BOOTSTRAP'} || find_mysqld($basedir); my $exe_mysqld_bootstrap = $ENV{'MYSQLD_BOOTSTRAP'} || find_mysqld($install_basedir); # ---------------------------------------------------------------------- # export MYSQLD_BOOTSTRAP_CMD variable containing <path>/mysqld <args> # ---------------------------------------------------------------------- $ENV{'MYSQLD_BOOTSTRAP_CMD'}= "$exe_mysqld_bootstrap " . join(" ", @$args); return if $thread_num > 0; # Only generate MYSQLD_BOOTSTRAP_CMD in workers # ---------------------------------------------------------------------- # Create the bootstrap.sql file # ---------------------------------------------------------------------- my $bootstrap_sql_file= "$opt_vardir/tmp/bootstrap.sql"; if (-f "$path_sql_dir/mysql_system_tables.sql") my $path_sql= my_find_file($install_basedir, ["mysql", "sql/share", "share", "scripts"], "mysql_system_tables.sql", NOT_REQUIRED); if (-f $path_sql ) { my $sql_dir= dirname($path_sql); # Use the mysql database for system tables mtr_tofile($bootstrap_sql_file, "use mysql\n"); # Add the offical mysql system tables # for a production system mtr_appendfile_to_file("$path_sql_dir/mysql_system_tables.sql", mtr_appendfile_to_file("$sql_dir/mysql_system_tables.sql", $bootstrap_sql_file); # Add the mysql system tables initial data # for a production system mtr_appendfile_to_file("$path_sql_dir/mysql_system_tables_data.sql", mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql", $bootstrap_sql_file); # Add test data for timezone - this is just a subset, on a real # system these tables will be populated either by mysql_tzinfo_to_sql # or by downloading the timezone table package from our website mtr_appendfile_to_file("$path_sql_dir/mysql_test_data_timezone.sql", mtr_appendfile_to_file("$sql_dir/mysql_test_data_timezone.sql", $bootstrap_sql_file); # Fill help tables, just an empty file when running from bk repo # but will be replaced by a real fill_help_tables.sql when # building the source dist mtr_appendfile_to_file("$sql_dir/fill_help_tables.sql", $bootstrap_sql_file); } Loading @@ -2545,7 +2568,7 @@ sub mysql_install_db { { # Install db from init_db.sql that exist in early 5.1 and 5.0 # versions of MySQL my $init_file= "$basedir/mysql-test/lib/init_db.sql"; my $init_file= "$install_basedir/mysql-test/lib/init_db.sql"; mtr_report(" - from '$init_file'"); my $text= mtr_grab_file($init_file) or mtr_error("Can't open '$init_file': $!"); Loading @@ -2554,12 +2577,6 @@ sub mysql_install_db { sql_to_bootstrap($text)); } # Fill help tables, just an empty file when running from bk repo # but will be replaced by a real fill_help_tables.sql when # building the source dist mtr_appendfile_to_file("$path_sql_dir/fill_help_tables.sql", $bootstrap_sql_file); # Remove anonymous users mtr_tofile($bootstrap_sql_file, "DELETE FROM mysql.user where user= '';\n"); Loading @@ -2582,8 +2599,8 @@ sub mysql_install_db { "$exe_mysqld_bootstrap " . join(" ", @$args) . "\n"); # Create directories mysql and test mkpath("$data_dir/mysql"); mkpath("$data_dir/test"); mkpath("$install_datadir/mysql"); mkpath("$install_datadir/test"); if ( My::SafeProcess->run ( Loading Loading @@ -4087,6 +4104,9 @@ sub start_servers($) { } } my $mysqld_basedir= $mysqld->value('basedir'); if ( $basedir eq $mysqld_basedir ) { # Copy datadir from installed system db for my $path ( "$opt_vardir", "$opt_vardir/..") { my $install_db= "$path/install.db"; Loading @@ -4095,6 +4115,15 @@ sub start_servers($) { } mtr_error("Failed to copy system db to '$datadir'") unless -d $datadir; } else { mysql_install_db($mysqld); mtr_error("Failed to install system db to '$datadir'") unless -d $datadir; } # Create the servers tmpdir my $tmpdir= $mysqld->value('tmpdir'); Loading Loading
mysql-test/lib/My/Find.pm +35 −1 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ use Carp; use My::Platform; use base qw(Exporter); our @EXPORT= qw(my_find_bin my_find_dir NOT_REQUIRED); our @EXPORT= qw(my_find_bin my_find_dir my_find_file NOT_REQUIRED); our $vs_config_dir; Loading Loading @@ -77,6 +77,40 @@ sub my_find_bin { } # # my_find_file - find a file with "name_1...name_n" in # paths "path_1...path_n" and return the full path # # Example: # my $mysqld_exe= my_find_file($basedir. # ["sql", "bin"], # "filename"); # # # Also supports NOT_REQUIRED flag # # NOTE: The function honours MTR_VS_CONFIG environment variable # # sub my_find_file { my ($base, $paths, $names, $required)= @_; croak "usage: my_find_file(<base>, <paths>, <names>, [<required>])" unless @_ == 4 or @_ == 3; # ------------------------------------------------------- # Find and return the first executable # ------------------------------------------------------- foreach my $path (my_find_paths($base, $paths, $names, $bin_extension)) { return $path if ( -f $path ); } if (defined $required and $required == NOT_REQUIRED){ # Return empty string to indicate not found return ""; } find_error($base, $paths, $names); } # # my_find_dir - find the first existing directory in one of # the given paths Loading
mysql-test/mysql-test-run.pl +73 −44 Original line number Diff line number Diff line Loading @@ -188,8 +188,6 @@ my $exe_ndbd; my $exe_ndb_mgmd; my $exe_ndb_waiter; our $path_sql_dir; our $debug_compiled_binaries; our %mysqld_variables; Loading Loading @@ -651,7 +649,6 @@ sub run_worker ($) { setup_vardir(); check_running_as_root(); mysql_install_db($thread_num); if ( using_extern() ) { create_config_file_for_extern(%opts_extern); Loading Loading @@ -894,21 +891,10 @@ sub command_line_setup { "$basedir/sql/share", "$basedir/share"); $path_language= mtr_path_exists("$path_share/english"); $path_charsetsdir= mtr_path_exists("$path_share/charsets"); # Look for SQL scripts directory if ( mtr_file_exists("$path_share/mysql_system_tables.sql") ne "") { # The SQL scripts are in path_share $path_sql_dir= $path_share; } else { $path_sql_dir= mtr_path_exists("$basedir/share", "$basedir/scripts"); } if (using_extern()) { # Connect to the running mysqld and find out what it supports Loading Loading @@ -2419,7 +2405,7 @@ sub initialize_servers { remove_stale_vardir(); setup_vardir(); mysql_install_db(0); mysql_install_db(default_mysqld(), "$opt_vardir/install.db"); } } } Loading Loading @@ -2474,9 +2460,33 @@ sub sql_to_bootstrap { } sub default_mysqld { # Generate new config file from template my $config= My::ConfigFactory->new_config ( { basedir => $basedir, template_path => "include/default_my.cnf", vardir => $opt_vardir, tmpdir => $opt_tmpdir, baseport => 0, user => $opt_user, password => '', } ); my $mysqld= $config->group('mysqld.1') or mtr_error("Couldn't find mysqld.1 in default config"); return $mysqld; } sub mysql_install_db { my ($thread_num)= @_; my $data_dir= "$opt_vardir/install.db"; my ($mysqld, $datadir)= @_; my $install_datadir= $datadir || $mysqld->value('datadir'); my $install_basedir= $mysqld->value('basedir'); my $install_lang= $mysqld->value('language'); my $install_chsdir= $mysqld->value('character-sets-dir'); mtr_report("Installing system database..."); Loading @@ -2484,8 +2494,8 @@ sub mysql_install_db { mtr_init_args(\$args); mtr_add_arg($args, "--no-defaults"); mtr_add_arg($args, "--bootstrap"); mtr_add_arg($args, "--basedir=%s", $basedir); mtr_add_arg($args, "--datadir=%s", $data_dir); mtr_add_arg($args, "--basedir=%s", $install_basedir); mtr_add_arg($args, "--datadir=%s", $install_datadir); mtr_add_arg($args, "--loose-skip-innodb"); mtr_add_arg($args, "--loose-skip-ndbcluster"); mtr_add_arg($args, "--tmpdir=%s", "$opt_vardir/tmp/"); Loading @@ -2497,47 +2507,60 @@ sub mysql_install_db { $path_vardir_trace); } mtr_add_arg($args, "--language=%s", $path_language); mtr_add_arg($args, "--character-sets-dir=%s", $path_charsetsdir); mtr_add_arg($args, "--language=%s", $install_lang); mtr_add_arg($args, "--character-sets-dir=%s", $install_chsdir); # If DISABLE_GRANT_OPTIONS is defined when the server is compiled (e.g., # configure --disable-grant-options), mysqld will not recognize the # --bootstrap or --skip-grant-tables options. The user can set # MYSQLD_BOOTSTRAP to the full path to a mysqld which does accept # --bootstrap, to accommodate this. my $exe_mysqld_bootstrap = $ENV{'MYSQLD_BOOTSTRAP'} || find_mysqld($basedir); my $exe_mysqld_bootstrap = $ENV{'MYSQLD_BOOTSTRAP'} || find_mysqld($install_basedir); # ---------------------------------------------------------------------- # export MYSQLD_BOOTSTRAP_CMD variable containing <path>/mysqld <args> # ---------------------------------------------------------------------- $ENV{'MYSQLD_BOOTSTRAP_CMD'}= "$exe_mysqld_bootstrap " . join(" ", @$args); return if $thread_num > 0; # Only generate MYSQLD_BOOTSTRAP_CMD in workers # ---------------------------------------------------------------------- # Create the bootstrap.sql file # ---------------------------------------------------------------------- my $bootstrap_sql_file= "$opt_vardir/tmp/bootstrap.sql"; if (-f "$path_sql_dir/mysql_system_tables.sql") my $path_sql= my_find_file($install_basedir, ["mysql", "sql/share", "share", "scripts"], "mysql_system_tables.sql", NOT_REQUIRED); if (-f $path_sql ) { my $sql_dir= dirname($path_sql); # Use the mysql database for system tables mtr_tofile($bootstrap_sql_file, "use mysql\n"); # Add the offical mysql system tables # for a production system mtr_appendfile_to_file("$path_sql_dir/mysql_system_tables.sql", mtr_appendfile_to_file("$sql_dir/mysql_system_tables.sql", $bootstrap_sql_file); # Add the mysql system tables initial data # for a production system mtr_appendfile_to_file("$path_sql_dir/mysql_system_tables_data.sql", mtr_appendfile_to_file("$sql_dir/mysql_system_tables_data.sql", $bootstrap_sql_file); # Add test data for timezone - this is just a subset, on a real # system these tables will be populated either by mysql_tzinfo_to_sql # or by downloading the timezone table package from our website mtr_appendfile_to_file("$path_sql_dir/mysql_test_data_timezone.sql", mtr_appendfile_to_file("$sql_dir/mysql_test_data_timezone.sql", $bootstrap_sql_file); # Fill help tables, just an empty file when running from bk repo # but will be replaced by a real fill_help_tables.sql when # building the source dist mtr_appendfile_to_file("$sql_dir/fill_help_tables.sql", $bootstrap_sql_file); } Loading @@ -2545,7 +2568,7 @@ sub mysql_install_db { { # Install db from init_db.sql that exist in early 5.1 and 5.0 # versions of MySQL my $init_file= "$basedir/mysql-test/lib/init_db.sql"; my $init_file= "$install_basedir/mysql-test/lib/init_db.sql"; mtr_report(" - from '$init_file'"); my $text= mtr_grab_file($init_file) or mtr_error("Can't open '$init_file': $!"); Loading @@ -2554,12 +2577,6 @@ sub mysql_install_db { sql_to_bootstrap($text)); } # Fill help tables, just an empty file when running from bk repo # but will be replaced by a real fill_help_tables.sql when # building the source dist mtr_appendfile_to_file("$path_sql_dir/fill_help_tables.sql", $bootstrap_sql_file); # Remove anonymous users mtr_tofile($bootstrap_sql_file, "DELETE FROM mysql.user where user= '';\n"); Loading @@ -2582,8 +2599,8 @@ sub mysql_install_db { "$exe_mysqld_bootstrap " . join(" ", @$args) . "\n"); # Create directories mysql and test mkpath("$data_dir/mysql"); mkpath("$data_dir/test"); mkpath("$install_datadir/mysql"); mkpath("$install_datadir/test"); if ( My::SafeProcess->run ( Loading Loading @@ -4087,6 +4104,9 @@ sub start_servers($) { } } my $mysqld_basedir= $mysqld->value('basedir'); if ( $basedir eq $mysqld_basedir ) { # Copy datadir from installed system db for my $path ( "$opt_vardir", "$opt_vardir/..") { my $install_db= "$path/install.db"; Loading @@ -4095,6 +4115,15 @@ sub start_servers($) { } mtr_error("Failed to copy system db to '$datadir'") unless -d $datadir; } else { mysql_install_db($mysqld); mtr_error("Failed to install system db to '$datadir'") unless -d $datadir; } # Create the servers tmpdir my $tmpdir= $mysqld->value('tmpdir'); Loading