Bug#20166 mysql-test-run.pl does not test system privilege tables creation
- Add test of bootstrap mode - Make mysqld return error if bootstrap failed
This commit is contained in:
parent
00ee20edaa
commit
bcd368fcfb
@ -2890,8 +2890,6 @@ sub install_db ($$) {
|
|||||||
|
|
||||||
mtr_add_arg($args, "--no-defaults");
|
mtr_add_arg($args, "--no-defaults");
|
||||||
mtr_add_arg($args, "--bootstrap");
|
mtr_add_arg($args, "--bootstrap");
|
||||||
mtr_add_arg($args, "--console");
|
|
||||||
mtr_add_arg($args, "--skip-grant-tables");
|
|
||||||
mtr_add_arg($args, "--basedir=%s", $path_my_basedir);
|
mtr_add_arg($args, "--basedir=%s", $path_my_basedir);
|
||||||
mtr_add_arg($args, "--datadir=%s", $data_dir);
|
mtr_add_arg($args, "--datadir=%s", $data_dir);
|
||||||
mtr_add_arg($args, "--skip-innodb");
|
mtr_add_arg($args, "--skip-innodb");
|
||||||
@ -2918,6 +2916,11 @@ sub install_db ($$) {
|
|||||||
# --bootstrap, to accommodate this.
|
# --bootstrap, to accommodate this.
|
||||||
my $exe_mysqld_bootstrap = $ENV{'MYSQLD_BOOTSTRAP'} || $exe_mysqld;
|
my $exe_mysqld_bootstrap = $ENV{'MYSQLD_BOOTSTRAP'} || $exe_mysqld;
|
||||||
|
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
# export MYSQLD_BOOTSTRAP_CMD variable containing <path>/mysqld <args>
|
||||||
|
# ----------------------------------------------------------------------
|
||||||
|
$ENV{'MYSQLD_BOOTSTRAP_CMD'}= "$exe_mysqld_bootstrap " . join(" ", @$args);
|
||||||
|
|
||||||
# Log bootstrap command
|
# Log bootstrap command
|
||||||
my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log";
|
my $path_bootstrap_log= "$opt_vardir/log/bootstrap.log";
|
||||||
mtr_tofile($path_bootstrap_log,
|
mtr_tofile($path_bootstrap_log,
|
||||||
|
8
mysql-test/r/bootstrap.result
Normal file
8
mysql-test/r/bootstrap.result
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
drop table if exists t1;
|
||||||
|
drop table t1;
|
||||||
|
drop table t1;
|
||||||
|
ERROR 42S02: Unknown table 't1'
|
||||||
|
set @my_max_allowed_packet= @@max_allowed_packet;
|
||||||
|
set global max_allowed_packet=100*@@max_allowed_packet;
|
||||||
|
set global max_allowed_packet=@my_max_allowed_packet;
|
||||||
|
drop table t1;
|
46
mysql-test/t/bootstrap.test
Normal file
46
mysql-test/t/bootstrap.test
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
#
|
||||||
|
# test mysqld in bootstrap mode
|
||||||
|
#
|
||||||
|
--disable_warnings
|
||||||
|
drop table if exists t1;
|
||||||
|
--enable_warnings
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that --bootstrap reads from stdin
|
||||||
|
#
|
||||||
|
--write_file $MYSQLTEST_VARDIR/tmp/bootstrap.sql
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1(a int);
|
||||||
|
EOF
|
||||||
|
--exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/bootstrap.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Check that --bootstrap of file with SQL error returns error
|
||||||
|
#
|
||||||
|
--write_file $MYSQLTEST_VARDIR/tmp/bootstrap_error.sql
|
||||||
|
use test;
|
||||||
|
CREATE TABLE t1;
|
||||||
|
EOF
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/bootstrap_error.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1
|
||||||
|
# Table t1 should not exists
|
||||||
|
--error 1051
|
||||||
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bootstrap with a query larger than 2*thd->net.max_packet
|
||||||
|
#
|
||||||
|
set @my_max_allowed_packet= @@max_allowed_packet;
|
||||||
|
set global max_allowed_packet=100*@@max_allowed_packet;
|
||||||
|
--disable_query_log
|
||||||
|
create table t1 select 2 as a, concat(repeat('MySQL', @@max_allowed_packet/10), ';') as b;
|
||||||
|
eval select * into outfile '$MYSQLTEST_VARDIR/tmp/long_query.sql' from t1;
|
||||||
|
--enable_query_log
|
||||||
|
--error 1
|
||||||
|
--exec $MYSQLD_BOOTSTRAP_CMD < $MYSQLTEST_VARDIR/tmp/long_query.sql >> $MYSQLTEST_VARDIR/tmp/bootstrap.log 2>&1
|
||||||
|
|
||||||
|
set global max_allowed_packet=@my_max_allowed_packet;
|
||||||
|
drop table t1;
|
||||||
|
|
@ -1308,6 +1308,7 @@ pthread_handler_t handle_bootstrap(void *arg)
|
|||||||
thd->query= thd->memdup_w_gap(buff, length+1,
|
thd->query= thd->memdup_w_gap(buff, length+1,
|
||||||
thd->db_length+1+QUERY_CACHE_FLAGS_SIZE);
|
thd->db_length+1+QUERY_CACHE_FLAGS_SIZE);
|
||||||
thd->query[length] = '\0';
|
thd->query[length] = '\0';
|
||||||
|
DBUG_PRINT("query",("%-.4096s",thd->query));
|
||||||
/*
|
/*
|
||||||
We don't need to obtain LOCK_thread_count here because in bootstrap
|
We don't need to obtain LOCK_thread_count here because in bootstrap
|
||||||
mode we have only one thread.
|
mode we have only one thread.
|
||||||
@ -1315,16 +1316,26 @@ pthread_handler_t handle_bootstrap(void *arg)
|
|||||||
thd->query_id=next_query_id();
|
thd->query_id=next_query_id();
|
||||||
mysql_parse(thd,thd->query,length);
|
mysql_parse(thd,thd->query,length);
|
||||||
close_thread_tables(thd); // Free tables
|
close_thread_tables(thd); // Free tables
|
||||||
|
|
||||||
if (thd->is_fatal_error)
|
if (thd->is_fatal_error)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
if (thd->net.report_error)
|
||||||
|
{
|
||||||
|
/* The query failed, send error to log and abort bootstrap */
|
||||||
|
net_send_error(thd);
|
||||||
|
thd->fatal_error();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
|
free_root(thd->mem_root,MYF(MY_KEEP_PREALLOC));
|
||||||
#ifdef USING_TRANSACTIONS
|
#ifdef USING_TRANSACTIONS
|
||||||
free_root(&thd->transaction.mem_root,MYF(MY_KEEP_PREALLOC));
|
free_root(&thd->transaction.mem_root,MYF(MY_KEEP_PREALLOC));
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/* thd->fatal_error should be set in case something went wrong */
|
|
||||||
end:
|
end:
|
||||||
|
/* Remember the exit code of bootstrap */
|
||||||
bootstrap_error= thd->is_fatal_error;
|
bootstrap_error= thd->is_fatal_error;
|
||||||
|
|
||||||
net_end(&thd->net);
|
net_end(&thd->net);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user