381 lines
14 KiB
Plaintext
381 lines
14 KiB
Plaintext
# ********************************************************************
|
|
# wl#8619 : Testing the functionality of portability of general
|
|
# and remote tablespace files can be moved into any of the following
|
|
# listed known directories
|
|
# 1) --datadir (mysql home)
|
|
# 2) --innodb-directories= dir1;dir2;etc...
|
|
# 3) --innodb-undo-directory
|
|
# 4) --innodb-data-home-dir
|
|
# Note : --datadir as whole unit should be moved and its
|
|
# folder hierarchy should be preserved
|
|
# User has to follow the MySQL rules while moving the files.
|
|
# Check general tablespaces are allowed to create only in known DIR
|
|
# Check relative path and absolute path
|
|
# ********************************************************************
|
|
--source include/have_innodb_16k.inc
|
|
--source include/have_innodb_default_undo_tablespaces.inc
|
|
--source include/not_valgrind.inc
|
|
|
|
--disable_query_log
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
LET $restart_parameters = restart:--innodb-directories=$MYSQL_TMP_DIR;
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
--source include/restart_mysqld.inc
|
|
--enable_query_log
|
|
|
|
let $MYSQLD_OLD_DATADIR = `select @@datadir`;
|
|
|
|
# Create new datadir folders
|
|
--mkdir $MYSQL_TMP_DIR/undo_directory1
|
|
--mkdir $MYSQL_TMP_DIR/undo_directory2
|
|
--mkdir $MYSQL_TMP_DIR/undo_directory2/test
|
|
--mkdir $MYSQL_TMP_DIR/data_home_dir
|
|
--mkdir $MYSQL_TMP_DIR/new_datadir
|
|
--mkdir $MYSQL_TMP_DIR/new_datadir/data
|
|
let $MYSQLD_NEW_DATADIR = $MYSQL_TMP_DIR/new_datadir/data;
|
|
--mkdir $MYSQLD_NEW_DATADIR/test
|
|
--mkdir $MYSQLD_NEW_DATADIR/mysql
|
|
--mkdir $MYSQLD_NEW_DATADIR/sys
|
|
--mkdir $MYSQLD_NEW_DATADIR/performance_schema
|
|
--mkdir $MYSQLD_NEW_DATADIR/mtr
|
|
|
|
--echo ## create all kinds of tables including absolute paths
|
|
CREATE TABLESPACE ts1 ADD DATAFILE 'ts1.ibd' Engine=InnoDB;
|
|
|
|
CREATE TABLE tab1(c1 int, c2 varchar(10)) TABLESPACE=ts1;
|
|
|
|
INSERT INTO tab1 VALUES(1, 'VISH');
|
|
|
|
CREATE TABLE tab2(c1 int, c2 varchar(10)) Engine=InnoDB;
|
|
|
|
INSERT INTO tab2 VALUES(2, 'VISH');
|
|
|
|
CREATE INDEX ix1 ON tab1(c2) USING BTREE;
|
|
|
|
CREATE INDEX ix1 ON tab2(c2) ;
|
|
|
|
--echo # Create a table with absolute path.
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
eval CREATE TABLE tab3(
|
|
empno INT, ename VARCHAR(30),sal NUMERIC(3))
|
|
ENGINE=InnoDB ROW_FORMAT=COMPRESSED
|
|
PARTITION by hash(empno) (
|
|
PARTITION P0 DATA DIRECTORY '$MYSQL_TMP_DIR/db_directory1',
|
|
PARTITION P1 DATA DIRECTORY '$MYSQL_TMP_DIR/db_directory1');
|
|
|
|
--echo # Create a tablespace in a known location with absolute path.
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
eval CREATE TABLESPACE ts2 ADD DATAFILE '$MYSQL_TMP_DIR/db_directory1/ts2.ibd' Engine=InnoDB;
|
|
DROP TABLESPACE ts2;
|
|
|
|
--echo # Create a tablespace in a known location with relative path.
|
|
eval CREATE TABLESPACE ts2 ADD DATAFILE '../data/ts2.ibd' Engine=InnoDB;
|
|
DROP TABLESPACE ts2;
|
|
|
|
--echo # Try to create a tablespace in an unknown location.
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
--error ER_WRONG_FILE_NAME
|
|
eval CREATE TABLESPACE ts2 ADD DATAFILE '../ts2.ibd' Engine=InnoDB;
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SHOW WARNINGS;
|
|
|
|
CREATE INDEX ix1 ON tab3(ename) USING BTREE;
|
|
|
|
INSERT INTO tab3 VALUES (100,'VISWANATH',100);
|
|
|
|
INSERT INTO tab3 VALUES (300,'VISWANATH',100);
|
|
|
|
SHOW CREATE TABLE tab1;
|
|
|
|
SHOW CREATE TABLE tab2;
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SHOW CREATE TABLE tab3;
|
|
|
|
# Create new undo tablespaces
|
|
CREATE UNDO TABLESPACE undo_003 ADD DATAFILE 'undo_003.ibu';
|
|
CREATE UNDO TABLESPACE undo_004 ADD DATAFILE 'undo_004.ibu';
|
|
|
|
# Show the metadata info.
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT file_name,file_type,tablespace_name FROM INFORMATION_SCHEMA.FILES WHERE file_type LIKE '%undo%';
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT space,path FROM INFORMATION_SCHEMA.INNODB_DATAFILES WHERE path LIKE '%undo_0%' ORDER BY path;
|
|
|
|
--echo ## Stop DB server
|
|
--let $shutdown_server_timeout = 300
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
--echo # Copy whole --datadir files into new locations
|
|
--copy_file $MYSQLD_OLD_DATADIR/auto.cnf $MYSQLD_NEW_DATADIR/auto.cnf
|
|
--copy_file $MYSQLD_OLD_DATADIR/ib_buffer_pool $MYSQL_TMP_DIR/data_home_dir/ib_buffer_pool
|
|
--copy_file $MYSQLD_OLD_DATADIR/ibdata1 $MYSQL_TMP_DIR/data_home_dir/ibdata1
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR $MYSQL_TMP_DIR/data_home_dir ib_logfile*
|
|
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR $MYSQLD_NEW_DATADIR *.ibd
|
|
--copy_file $MYSQLD_OLD_DATADIR/undo_001 $MYSQL_TMP_DIR/undo_directory1/undo_001
|
|
--remove_file $MYSQLD_OLD_DATADIR/undo_002
|
|
--copy_file $MYSQLD_OLD_DATADIR/undo_003.ibu $MYSQL_TMP_DIR/undo_directory1/undo_003.ibu
|
|
--copy_file $MYSQLD_OLD_DATADIR/undo_004.ibu $MYSQL_TMP_DIR/undo_directory2/undo_004.ibu
|
|
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR/test/ $MYSQLD_NEW_DATADIR/test/ *
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR/sys/ $MYSQLD_NEW_DATADIR/sys/ *
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR/performance_schema/ $MYSQLD_NEW_DATADIR/performance_schema/ *
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR/mysql/ $MYSQLD_NEW_DATADIR/mysql/ *
|
|
--copy_files_wildcard $MYSQLD_OLD_DATADIR/mtr/ $MYSQLD_NEW_DATADIR/mtr/ *
|
|
|
|
--echo # Copy absolute path *.ibd files into new location
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/db_directory1/test/ $MYSQL_TMP_DIR/undo_directory2/test tab3*.ibd
|
|
|
|
--echo # Remove the old datadir files and *.ibd files
|
|
--remove_files_wildcard $MYSQL_TMP_DIR/db_directory1/test/ *.ibd
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/ ib_buffer*
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/ ib_log*
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/ ibdata*
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/ undo*
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/ auto*
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/ *.ibd
|
|
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/test/ *
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/sys/ *
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/performance_schema/ *
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/mysql/ *
|
|
--remove_files_wildcard $MYSQLD_OLD_DATADIR/mtr/ *
|
|
|
|
--echo # Start with --innodb-directories along with other initDB options
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
--let $restart_parameters=restart: --datadir=$MYSQLD_NEW_DATADIR --innodb_undo_directory=$MYSQL_TMP_DIR/undo_directory1 --innodb_data_home_dir=$MYSQL_TMP_DIR/data_home_dir --innodb_log_group_home_dir=$MYSQL_TMP_DIR/data_home_dir --innodb-directories=$MYSQL_TMP_DIR
|
|
--source include/start_mysqld_no_echo.inc
|
|
|
|
--echo # Check new datadir
|
|
--replace_result $MYSQLD_NEW_DATADIR NEW_DATADIR
|
|
SELECT @@datadir;
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT @@innodb_undo_directory;
|
|
|
|
--replace_result $MYSQL_TMP_DIR DATA_HOME_DIR
|
|
SELECT @@innodb_data_home_dir;
|
|
|
|
--replace_result $MYSQL_TMP_DIR DATA_HOME_DIR
|
|
SELECT @@innodb_log_group_home_dir;
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SHOW CREATE TABLE tab3;
|
|
|
|
# Check if the metadata info is correct.
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT file_name,file_type,tablespace_name FROM INFORMATION_SCHEMA.FILES WHERE file_type LIKE '%undo%';
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT space,path FROM INFORMATION_SCHEMA.INNODB_DATAFILES WHERE path LIKE '%undo_0%' ORDER BY path;
|
|
|
|
--echo # Stop DB server
|
|
--let $shutdown_server_timeout = 300
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
--echo # Start with new --datadir only
|
|
--replace_result $MYSQLD_NEW_DATADIR NEW_DATADIR $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
--let $restart_parameters=restart: --datadir=$MYSQLD_NEW_DATADIR --innodb_undo_directory=$MYSQL_TMP_DIR/undo_directory1 --innodb_data_home_dir=$MYSQL_TMP_DIR/data_home_dir --innodb_log_group_home_dir=$MYSQL_TMP_DIR/data_home_dir --innodb-directories=$MYSQL_TMP_DIR
|
|
--source include/start_mysqld.inc
|
|
|
|
--echo # Check with new --datadir
|
|
--replace_result $MYSQLD_NEW_DATADIR NEW_DATADIR
|
|
SELECT @@datadir;
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT @@innodb_undo_directory;
|
|
|
|
--replace_result $MYSQL_TMP_DIR DATA_HOME_DIR
|
|
SELECT @@innodb_data_home_dir;
|
|
|
|
--replace_result $MYSQL_TMP_DIR DATA_HOME_DIR
|
|
SELECT @@innodb_log_group_home_dir;
|
|
|
|
--echo # Check the tables with SHOW
|
|
SHOW CREATE TABLE tab1;
|
|
|
|
SHOW CREATE TABLE tab2;
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SHOW CREATE TABLE tab3;
|
|
|
|
# Check if the metadata info is correct.
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT file_name,file_type,tablespace_name FROM INFORMATION_SCHEMA.FILES WHERE file_type LIKE '%undo%';
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SELECT space,path FROM INFORMATION_SCHEMA.INNODB_DATAFILES WHERE path LIKE '%undo_0%' ORDER BY path;
|
|
|
|
ALTER UNDO TABLESPACE innodb_undo_001 SET INACTIVE;
|
|
ALTER UNDO TABLESPACE innodb_undo_002 SET INACTIVE;
|
|
|
|
--echo # Check with DML & DDL operations
|
|
SELECT * FROM tab1;
|
|
|
|
SELECT * FROM tab2;
|
|
|
|
SELECT * FROM tab3;
|
|
|
|
DELETE FROM tab1;
|
|
|
|
DELETE FROM tab2;
|
|
|
|
DELETE FROM tab3;
|
|
|
|
ALTER TABLE tab3 ADD COLUMN c3 VARCHAR(15);
|
|
|
|
INSERT INTO tab1 VALUES(1, 'VISH');
|
|
|
|
INSERT INTO tab2 VALUES(2, 'VISH');
|
|
|
|
INSERT INTO tab3 VALUES (100,'VISWANATH',100,'New Column');
|
|
|
|
INSERT INTO tab3 VALUES (300,'VISWANATH',100,'New Column');
|
|
|
|
SELECT * FROM tab1;
|
|
|
|
SELECT * FROM tab2;
|
|
|
|
SELECT * FROM tab3;
|
|
|
|
let $inactive_undo_space = innodb_undo_001;
|
|
source include/wait_until_undo_space_is_empty.inc;
|
|
let $inactive_undo_space = innodb_undo_002;
|
|
source include/wait_until_undo_space_is_empty.inc;
|
|
|
|
SELECT name,space_type,state FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE space_type = 'Undo';
|
|
|
|
ALTER UNDO TABLESPACE innodb_undo_001 SET ACTIVE;
|
|
ALTER UNDO TABLESPACE innodb_undo_002 SET ACTIVE;
|
|
|
|
SELECT name,space_type,state FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE space_type = 'Undo';
|
|
|
|
--echo # Creating general tablespace in known DIR location
|
|
--replace_result $MYSQL_TMP_DIR DATA_HOME_DIR
|
|
eval CREATE TABLESPACE ts2 ADD DATAFILE '$MYSQL_TMP_DIR/data_home_dir/ts2.ibd' Engine=InnoDB;
|
|
|
|
CREATE TABLE tab4(c1 int, c2 varchar(10)) TABLESPACE=ts2;
|
|
|
|
SHOW CREATE TABLE tab4;
|
|
|
|
INSERT INTO tab4 VALUES(1, 'VISH');
|
|
|
|
--echo # Creating general tablespace in known DIR location
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
eval CREATE TABLESPACE ts3 ADD DATAFILE '$MYSQL_TMP_DIR/undo_directory1/ts3.ibd' Engine=InnoDB;
|
|
|
|
CREATE TABLE tab5(c1 int, c2 varchar(10)) TABLESPACE=ts3;
|
|
|
|
SHOW CREATE TABLE tab5;
|
|
|
|
INSERT INTO tab5 VALUES(1, 'VISH');
|
|
|
|
--echo # Clean up new datadir
|
|
DROP TABLE tab1;
|
|
DROP TABLE tab2;
|
|
DROP TABLESPACE ts1;
|
|
|
|
--echo # Stop DB server with new datadir
|
|
--let $shutdown_server_timeout = 300
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
--echo # Copy back --datadir and *.ibd files into old location
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/undo_directory2/test $MYSQL_TMP_DIR/db_directory1/test *.ibd
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/undo_directory1 $MYSQL_TMP_DIR/db_directory1/test ts3.ibd
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/undo_directory1 $MYSQLD_OLD_DATADIR undo*
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/undo_directory2 $MYSQLD_OLD_DATADIR undo*
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/data_home_dir $MYSQL_TMP_DIR/db_directory1/test ts2.ibd
|
|
|
|
--copy_file $MYSQLD_NEW_DATADIR/auto.cnf $MYSQLD_OLD_DATADIR/auto.cnf
|
|
--copy_file $MYSQL_TMP_DIR/data_home_dir/ib_buffer_pool $MYSQLD_OLD_DATADIR/ib_buffer_pool
|
|
--copy_file $MYSQL_TMP_DIR/data_home_dir/ibdata1 $MYSQLD_OLD_DATADIR/ibdata1
|
|
--copy_files_wildcard $MYSQL_TMP_DIR/data_home_dir $MYSQLD_OLD_DATADIR/ ib_log*
|
|
--copy_files_wildcard $MYSQLD_NEW_DATADIR $MYSQLD_OLD_DATADIR *.ibd
|
|
|
|
--copy_files_wildcard $MYSQLD_NEW_DATADIR/sys/ $MYSQLD_OLD_DATADIR/sys/ *
|
|
--copy_files_wildcard $MYSQLD_NEW_DATADIR/performance_schema/ $MYSQLD_OLD_DATADIR/performance_schema/ *
|
|
--copy_files_wildcard $MYSQLD_NEW_DATADIR/mysql/ $MYSQLD_OLD_DATADIR/mysql/ *
|
|
--copy_files_wildcard $MYSQLD_NEW_DATADIR/mtr/ $MYSQLD_OLD_DATADIR/mtr/ *
|
|
|
|
--echo # Cleanup the new DATA DIRECTORY *.ibd files
|
|
--force-rmdir $MYSQL_TMP_DIR/undo_directory1
|
|
--force-rmdir $MYSQL_TMP_DIR/undo_directory2
|
|
--force-rmdir $MYSQL_TMP_DIR/data_home_dir
|
|
--force-rmdir $MYSQL_TMP_DIR/new_datadir
|
|
|
|
--echo # Test by providing the relative path
|
|
--echo # Re-start with old --datadir with --innodb-directories as remote *.ibd files are existing.
|
|
--replace_result $MYSQLD_OLD_DATADIR OLD_DATADIR $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
--let $restart_parameters= restart: --datadir=$MYSQLD_OLD_DATADIR --innodb-directories=$MYSQL_TMP_DIR
|
|
--source include/start_mysqld.inc
|
|
|
|
--echo # Check --datadir started with old
|
|
--replace_result $MYSQLD_OLD_DATADIR OLD_DATADIR
|
|
SELECT @@datadir;
|
|
|
|
# Check if the metadata info is correct.
|
|
SELECT file_name,file_type,tablespace_name FROM INFORMATION_SCHEMA.FILES WHERE file_type LIKE '%undo%';
|
|
SELECT space,path FROM INFORMATION_SCHEMA.INNODB_DATAFILES WHERE path LIKE '%undo_0%' ORDER BY path;
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SHOW CREATE TABLE tab3;
|
|
|
|
SHOW CREATE TABLE tab4;
|
|
|
|
SHOW CREATE TABLE tab5;
|
|
|
|
# Set implicit undo tablespaces inactive
|
|
ALTER UNDO TABLESPACE undo_003 SET INACTIVE;
|
|
let $inactive_undo_space = undo_003;
|
|
source include/wait_until_undo_space_is_empty.inc;
|
|
|
|
ALTER UNDO TABLESPACE undo_004 SET INACTIVE;
|
|
let $inactive_undo_space = undo_004;
|
|
source include/wait_until_undo_space_is_empty.inc;
|
|
|
|
SELECT name,space_type,state FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE space_type = 'Undo';
|
|
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
SHOW VARIABLES LIKE '%directories%';
|
|
|
|
--echo # Creating general tablespace in known DIR location (DATA DIRECTORY)
|
|
--replace_result $MYSQL_TMP_DIR MYSQL_TMP_DIR
|
|
eval CREATE TABLESPACE ts4 ADD DATAFILE '$MYSQL_TMP_DIR/db_directory1/ts4.ibd' Engine=InnoDB;
|
|
|
|
CREATE TABLE tab6(c1 int, c2 varchar(10)) TABLESPACE=ts4;
|
|
|
|
INSERT INTO tab6 VALUES(1, 'VISH');
|
|
|
|
--echo # Stop DB server
|
|
--let $shutdown_server_timeout = 300
|
|
--source include/shutdown_mysqld.inc
|
|
|
|
--echo # Re-start with old --datadir only
|
|
|
|
--replace_result $MYSQLD_OLD_DATADIR OLD_DATADIR
|
|
--let $restart_parameters="restart: --datadir=$MYSQLD_OLD_DATADIR"
|
|
--source include/start_mysqld.inc
|
|
|
|
# Check DML
|
|
DELETE FROM tab3;
|
|
|
|
DELETE FROM tab4;
|
|
|
|
DELETE FROM tab5;
|
|
|
|
DELETE FROM tab6;
|
|
|
|
--replace_column 1 #
|
|
SELECT TABLESPACE_NAME,TABLE_NAME,ENGINE FROM INFORMATION_SCHEMA.FILES;
|
|
|
|
# Clean up old datadir
|
|
DROP TABLE tab3;
|
|
|
|
DROP TABLE tab4;
|
|
|
|
DROP TABLE tab5;
|
|
|
|
DROP TABLE tab6;
|
|
|
|
DROP UNDO TABLESPACE undo_003;
|
|
DROP UNDO TABLESPACE undo_004;
|