192 lines
6.8 KiB
Plaintext
192 lines
6.8 KiB
Plaintext
# InnoDB transparent tablespace data encryption
|
|
# This test case will test export/import encrypted tablespace.
|
|
|
|
--source include/no_valgrind_without_big.inc
|
|
--source include/have_debug.inc
|
|
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
-- send_shutdown
|
|
-- source include/wait_until_disconnected.inc
|
|
--exec echo "restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring2 $KEYRING_PLUGIN_OPT" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--enable_reconnect
|
|
--source include/wait_until_connected_again.inc
|
|
--disable_reconnect
|
|
|
|
|
|
--disable_query_log
|
|
call mtr.add_suppression("Trying to import a encrypted tablespace, but could not get encryption information from .cfp file");
|
|
call mtr.add_suppression("Operating system error number .* in a file operation");
|
|
call mtr.add_suppression("The error means the system cannot find the path specified.");
|
|
call mtr.add_suppression("'delete' returned OS error 7");
|
|
call mtr.add_suppression("Trying to import a tablespace, but could not open the tablespace file");
|
|
call mtr.add_suppression("Table is not in an encrypted tablespace, but the data file intended for import is an encrypted tablespace");
|
|
--enable_query_log
|
|
|
|
--disable_warnings
|
|
DROP TABLE IF EXISTS t1;
|
|
--enable_warnings
|
|
|
|
let $innodb_file_per_table = `SELECT @@innodb_file_per_table`;
|
|
|
|
SET GLOBAL innodb_file_per_table = 1;
|
|
SELECT @@innodb_file_per_table;
|
|
|
|
--echo # Create a table with encryption
|
|
CREATE TABLE t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB;
|
|
|
|
SHOW CREATE TABLE t1;
|
|
INSERT INTO t1 VALUES(0, "aaaaa");
|
|
INSERT INTO t1 VALUES(1, "bbbbb");
|
|
INSERT INTO t1 VALUES(2, "ccccc");
|
|
INSERT INTO t1 VALUES(3, "ddddd");
|
|
INSERT INTO t1 VALUES(4, "eeeee");
|
|
INSERT INTO t1 VALUES(5, "fffff");
|
|
INSERT INTO t1 VALUES(6, "ggggg");
|
|
INSERT INTO t1 VALUES(7, "hhhhh");
|
|
INSERT INTO t1 VALUES(8, "iiiii");
|
|
INSERT INTO t1 VALUES(9, "jjjjj");
|
|
INSERT INTO t1 select * from t1;
|
|
INSERT INTO t1 select * from t1;
|
|
INSERT INTO t1 select * from t1;
|
|
INSERT INTO t1 select * from t1;
|
|
INSERT INTO t1 select * from t1;
|
|
INSERT INTO t1 select * from t1;
|
|
|
|
SELECT * FROM t1 LIMIT 10;
|
|
|
|
--echo # Test export/import encrypted tablespace.
|
|
let $MYSQLD_DATADIR = `SELECT @@datadir`;
|
|
|
|
if(!$source_db) {
|
|
let $source_db = test;
|
|
}
|
|
|
|
if(!$dest_db) {
|
|
let $dest_db = test;
|
|
}
|
|
|
|
eval FLUSH TABLES $source_db.t1 FOR EXPORT;
|
|
|
|
--copy_file $MYSQLD_DATADIR/$source_db/t1.cfg $MYSQLD_DATADIR/t1.cfg_back
|
|
--copy_file $MYSQLD_DATADIR/$source_db/t1.cfp $MYSQLD_DATADIR/t1.cfp_back
|
|
--copy_file $MYSQLD_DATADIR/$source_db/t1.ibd $MYSQLD_DATADIR/t1.ibd_back
|
|
|
|
UNLOCK TABLES;
|
|
|
|
if($source_db != $dest_db) {
|
|
eval USE $dest_db;
|
|
let $create1 = query_get_value(SHOW CREATE TABLE $source_db.t1, Create Table, 1);
|
|
eval $create1;
|
|
}
|
|
|
|
eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE;
|
|
|
|
--copy_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--copy_file $MYSQLD_DATADIR/t1.cfp_back $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--copy_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
|
|
eval CHECK TABLE $dest_db.t1;
|
|
eval SHOW CREATE TABLE $dest_db.t1;
|
|
eval SELECT * FROM $dest_db.t1 LIMIT 10;
|
|
|
|
if($source_db != $dest_db) {
|
|
eval DROP TABLE $dest_db.t1;
|
|
}
|
|
|
|
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
-- send_shutdown
|
|
-- source include/wait_until_disconnected.inc
|
|
--exec echo "restart:--early-plugin-load="keyring_file=$KEYRING_PLUGIN" --loose-keyring_file_data=$MYSQL_TMP_DIR/mysecret_keyring2 $KEYRING_PLUGIN_OPT" > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
|
|
--enable_reconnect
|
|
|
|
--source include/wait_until_connected_again.inc
|
|
--disable_reconnect
|
|
|
|
eval SELECT * FROM $dest_db.t1 LIMIT 10;
|
|
|
|
eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE;
|
|
|
|
--copy_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--copy_file $MYSQLD_DATADIR/t1.cfp_back $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--copy_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
|
|
--echo # Try import in another session.
|
|
connect (con1,localhost,root);
|
|
--disable_warnings
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
--enable_warnings
|
|
disconnect con1;
|
|
|
|
connection default;
|
|
|
|
eval SELECT * FROM $dest_db.t1 LIMIT 10;
|
|
|
|
# Try negative case
|
|
eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE;
|
|
|
|
--echo # Import without .cfg file is posible
|
|
--echo # copying .cfp and .ibd file
|
|
--copy_file $MYSQLD_DATADIR/t1.cfp_back $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--copy_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
eval SELECT * FROM $dest_db.t1 LIMIT 10;
|
|
ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
|
eval SELECT * FROM $dest_db.t1 LIMIT 10;
|
|
eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE;
|
|
|
|
|
|
--echo # Import without .cfp file
|
|
--echo # copying .cfg and .ibd file
|
|
--copy_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
--copy_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--error 1808
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
|
|
--echo # Import without .idb file
|
|
--echo # copying .cfp and .cfg file
|
|
--copy_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--copy_file $MYSQLD_DATADIR/t1.cfp_back $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--error 1815
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
ALTER INSTANCE ROTATE INNODB MASTER KEY;
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
|
|
--echo # Schema mismatch dest table without encryption - fix result
|
|
DROP TABLE t1;
|
|
eval CREATE TABLE $dest_db.t1(c1 INT, c2 char(20)) ENGINE = InnoDB;
|
|
eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE;
|
|
--copy_file $MYSQLD_DATADIR/t1.cfp_back $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--copy_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
--copy_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--error 1808
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
|
|
--echo # Import got expected error.
|
|
DROP TABLE t1;
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--remove_file $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
eval CREATE TABLE $dest_db.t1(c1 INT, c2 char(20)) ENCRYPTION="Y" ENGINE = InnoDB;
|
|
eval ALTER TABLE $dest_db.t1 DISCARD TABLESPACE;
|
|
--copy_file $MYSQLD_DATADIR/t1.cfp_back $MYSQLD_DATADIR/$dest_db/t1.cfp
|
|
--copy_file $MYSQLD_DATADIR/t1.ibd_back $MYSQLD_DATADIR/$dest_db/t1.ibd
|
|
--copy_file $MYSQLD_DATADIR/t1.cfg_back $MYSQLD_DATADIR/$dest_db/t1.cfg
|
|
SET SESSION DEBUG="+d, fsp_header_rotate_encryption_failure";
|
|
--error ER_GET_ERRNO
|
|
eval ALTER TABLE $dest_db.t1 IMPORT TABLESPACE;
|
|
|
|
# Cleanup
|
|
--disable_query_log
|
|
eval DROP TABLE IF EXISTS $dest_db.t1;
|
|
eval DROP TABLE IF EXISTS $source_db.t1;
|
|
--enable_query_log
|
|
--remove_file $MYSQLD_DATADIR/t1.cfg_back
|
|
--remove_file $MYSQLD_DATADIR/t1.cfp_back
|
|
--remove_file $MYSQLD_DATADIR/t1.ibd_back
|