polardbxengine/mysql-test/t/dd_bootstrap_debug.test

324 lines
11 KiB
Plaintext

--source include/big_test.inc
--source include/have_debug.inc
--echo #
--echo # This file contains bootstrap test cases that
--echo # need to be run with a debug build. See also the
--echo # test file 'dd_bootstrap.test' for test cases
--echo # that can be run with a non-debug server build.
--echo #
let BASEDIR= `select @@basedir`;
let DDIR= $MYSQL_TMP_DIR/dd_bootstrap_test;
let extra_args= --no-defaults --innodb_dedicated_server=OFF --secure-file-priv="" --loose-skip-auto_generate_certs --loose-skip-sha256_password_auto_generate_rsa_keys --skip-ssl --basedir=$BASEDIR --lc-messages-dir=$MYSQL_SHAREDIR --cluster-id=1 --cluster-start-index=1 --cluster-info='127.0.0.1:22240@1';
let BOOTSTRAP_SQL= $MYSQL_TMP_DIR/tiny_bootstrap.sql;
let PASSWD_FILE= $MYSQL_TMP_DIR/password_file.txt;
--echo # Preparation: Shut server down.
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc
--echo #
--echo # 1. Try restart after setting an invalid version.
--echo # ------------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_1.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 1.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
SET SESSION debug= '+d,skip_dd_table_access_check';
CREATE SCHEMA test;
UPDATE mysql.dd_properties SET properties= 'invalid';
SET SESSION debug= '-d,skip_dd_table_access_check';
EOF
--echo # 1.2 First start the server with --initialize, and update the version.
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --initialize-insecure --datadir=$DDIR --init-file=$BOOTSTRAP_SQL
--echo # 1.3 Restart the server against DDIR - should fail.
--error 1
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --datadir=$DDIR
--echo # 1.4 Look for error.
perl;
use strict;
my $log= $ENV{'ENV_MYSQLD_LOG'} or die;
open(FILE, "$log") or die;
my $c_w= grep(/No data dictionary version number found./gi,<FILE>);
print "# Data Dictionary initialization error found $c_w times.\n";
close(FILE);
EOF
--echo # 1.5 Delete bootstrap file and datadir.
remove_file $BOOTSTRAP_SQL;
--force-rmdir $DDIR
--echo #
--echo # 2. Try restart after dropping the properties table.
--echo # ---------------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_2.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 2.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
CREATE SCHEMA test;
SET SESSION debug= '+d,skip_dd_table_access_check';
DROP TABLE mysql.dd_properties;
SET SESSION debug= '-d,skip_dd_table_access_check';
EOF
--echo # 2.2 First start the server with --initialize, and drop the properties table. Should fail.
--error 1
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --initialize-insecure --datadir=$DDIR --init-file=$BOOTSTRAP_SQL
--echo # 2.3 Look for error.
perl;
use strict;
my $log= $ENV{'ENV_MYSQLD_LOG'} or die;
open(FILE, "$log") or die;
my $c_w= grep(/The used command is not allowed with this MySQL version/gi,<FILE>);
print "# Data Dictionary initialization error found $c_w times.\n";
close(FILE);
EOF
--echo # 2.4 Delete bootstrap file and datadir.
remove_file $BOOTSTRAP_SQL;
--force-rmdir $DDIR
--echo #
--echo # 3. Try restart after dropping the tables table.
--echo # -----------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_3.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 3.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
CREATE SCHEMA test;
SET FOREIGN_KEY_CHECKS= 0;
SET SESSION debug= '+d,skip_dd_table_access_check';
DROP TABLE mysql.tables;
SET SESSION debug= '-d,skip_dd_table_access_check';
EOF
--echo # 3.2 First start the server with --initialize, and drop the tables table: Should fail.
--error 1
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --initialize-insecure --datadir=$DDIR --init-file=$BOOTSTRAP_SQL
--echo # 3.3 Look for error.
perl;
use strict;
my $log= $ENV{'ENV_MYSQLD_LOG'} or die;
open(FILE, "$log") or die;
my $c_w= grep(/The used command is not allowed with this MySQL version/gi,<FILE>);
print "# Data Dictionary initialization error found $c_w times.\n";
close(FILE);
EOF
--echo # 3.4 Delete bootstrap file and datadir.
remove_file $BOOTSTRAP_SQL;
--force-rmdir $DDIR
--echo #
--echo # 4. Try restart after altering the schemata table.
--echo # -------------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_4.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 4.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
CREATE SCHEMA test;
SET SESSION debug= '+d,skip_dd_table_access_check';
ALTER TABLE mysql.schemata COMMENT 'Altered table';
SET SESSION debug= '-d,skip_dd_table_access_check';
EOF
--echo # 4.2 First start the server with --initialize, and alter the schemata table.
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --initialize-insecure --datadir=$DDIR --init-file=$BOOTSTRAP_SQL
--echo # 4.3 Restart the server against DDIR.
--exec echo "restart: --datadir=$DDIR --no-console --log-error=$MYSQLD_LOG" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
--echo # 4.4 Connect as root.
connect(root_con,localhost,root,,mysql);
--echo # 4.5 Verify that the modified table is present.
SET SESSION debug= '+d,skip_dd_table_access_check';
SELECT t.comment FROM mysql.tables AS t, mysql.schemata AS s WHERE
t.name = 'schemata' AND
t.schema_id = s.id AND
s.name = 'mysql';
SET SESSION debug= '-d,skip_dd_table_access_check';
--echo # 4.6 Shut server down.
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc
--echo # 4.7 Close the test connection.
connection default;
disconnect root_con;
--echo # 4.8 Delete bootstrap file and datadir.
remove_file $BOOTSTRAP_SQL;
--force-rmdir $DDIR
--echo #
--echo # 5. Try to access a DD table in an init-file during --initialize.
--echo # ----------------------------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_5.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 5.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
SELECT * FROM mysql.st_spatial_reference_systems;
EOF
--echo # 5.2 First start the server with --initialize, and submit the init file.
--error 1
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --initialize-insecure --datadir=$DDIR --init-file=$BOOTSTRAP_SQL
--echo # 5.3 Look for error.
perl;
use strict;
my $log= $ENV{'ENV_MYSQLD_LOG'} or die;
open(FILE, "$log") or die;
my $c_w= grep(/Access to data dictionary table \'mysql.st_spatial_reference_systems\' is rejected/gi,<FILE>);
print "# Data Dictionary table access error found $c_w times.\n";
close(FILE);
EOF
--echo # 5.4 Delete bootstrap file and datadir.
remove_file $BOOTSTRAP_SQL;
--force-rmdir $DDIR
--echo #
--echo # 6. Try to access a DD table in an init-file during plain restart.
--echo # -----------------------------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_6.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 6.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
CREATE SCHEMA test;
SELECT * FROM mysql.tables;
EOF
--echo # 6.2 First start the server with --initialize.
--exec $MYSQLD $extra_args --log-error=$MYSQLD_LOG --initialize-insecure --datadir=$DDIR
--echo # 6.3 Restart the server against DDIR with an init-file.
--exec echo "restart: --datadir=$DDIR --no-console --log-error=$MYSQLD_LOG --init-file=$BOOTSTRAP_SQL" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
--echo # 6.4 An init file error does not make the server exit, so we need to stop the server.
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc
--echo # 6.5 Look for error.
perl;
use strict;
my $log= $ENV{'ENV_MYSQLD_LOG'} or die;
open(FILE, "$log") or die;
my $c_w= grep(/Access to data dictionary table \'mysql.tables\' is rejected/gi,<FILE>);
print "# Data Dictionary initialization error found $c_w times.\n";
close(FILE);
EOF
--echo # 6.6 Delete bootstrap file and datadir.
remove_file $BOOTSTRAP_SQL;
--force-rmdir $DDIR
--echo #
--echo # 7. Try initialize and start with --require-primary-key
--echo #
--echo # Bug#17468242/Wl#11807: Provide an option to prevent creation of tables
--echo # without a unique/pk
--echo #
--echo # Check that this option can be set on command line without compromising
--echo # bootstrap
--echo # ------------------------------------------------------
let $MYSQLD_LOG= $MYSQLTEST_VARDIR/log/save_dd_bootstrap_7.log;
let ENV_MYSQLD_LOG= $MYSQLD_LOG;
--echo # 7.1 Create bootstrap file.
write_file $BOOTSTRAP_SQL;
CREATE SCHEMA test;
EOF
--echo # 7.2 First start the server with --initialize
--exec $MYSQLD $extra_args --initialize-insecure --datadir=$DDIR --sql-require-primary-key=ON --init-file=$BOOTSTRAP_SQL
--echo # 7.3 Restart the server against DDIR.
--exec echo "restart: --datadir=$DDIR --no-console --log-error=$MYSQLD_LOG --sql-require-primary-key=ON" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
--echo # 7.4 Connect as root.
connect(root_con,localhost,root,,mysql);
--error ER_TABLE_WITHOUT_PK
CREATE TABLE t1(i INT);
--echo # 7.5 Shut server down.
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc
--echo # 7.6 Close the test connection.
connection default;
disconnect root_con;
--echo # 7.7 Delete bootstrap file, log file and datadir.
remove_file $BOOTSTRAP_SQL;
remove_file $MYSQLD_LOG;
--force-rmdir $DDIR
--echo # ------------------------------------------------------
--echo # Check that this option can be set on command line without
--echo # compromising restart against the normal datadir, without
--echo # initialize
--echo # ------------------------------------------------------
--echo # 8.1 Restart the server without initialize against the normal datadir
--exec echo "restart: --no-console --log-error=$MYSQLD_LOG --sql-require-primary-key=ON" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
--echo # 8.2 Connect as root.
connect(root_con,localhost,root,,mysql);
--echo # Verify that the system variable is in effect
--error ER_TABLE_WITHOUT_PK
CREATE TABLE t1(i INT);
--echo # 8.3 Shut server down.
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--shutdown_server
--source include/wait_until_disconnected.inc
--echo # 8.4 Close the test connection.
connection default;
disconnect root_con;
--echo # 8.5 Delete log file.
remove_file $MYSQLD_LOG;
--echo #
--echo # Cleanup: Restarting the server against default datadir.
--exec echo "restart" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc