Browse Source
MDEV-8708: InnoDB temp file encryption
MDEV-8708: InnoDB temp file encryption
Added encryption support for online alter table where InnoDB temporary files are used. Added similar support also for tables containing full text-indexes. Made sure that table remains encrypted during discard and import tablespace.pull/100/head
22 changed files with 1739 additions and 254 deletions
-
136mysql-test/suite/encryption/r/innodb_encryption_discard_import.result
-
176mysql-test/suite/encryption/r/innodb_onlinealter_encryption.result
-
8mysql-test/suite/encryption/t/innodb_encryption_discard_import.opt
-
211mysql-test/suite/encryption/t/innodb_encryption_discard_import.test
-
8mysql-test/suite/encryption/t/innodb_onlinealter_encryption.opt
-
191mysql-test/suite/encryption/t/innodb_onlinealter_encryption.test
-
83storage/innobase/fil/fil0crypt.cc
-
69storage/innobase/fil/fil0fil.cc
-
2storage/innobase/handler/ha_innodb.cc
-
14storage/innobase/include/fil0crypt.h
-
6storage/innobase/include/row0ftsort.h
-
23storage/innobase/include/row0merge.h
-
84storage/innobase/row/row0ftsort.cc
-
353storage/innobase/row/row0merge.cc
-
76storage/xtradb/fil/fil0crypt.cc
-
69storage/xtradb/fil/fil0fil.cc
-
2storage/xtradb/handler/ha_innodb.cc
-
16storage/xtradb/include/fil0crypt.h
-
6storage/xtradb/include/row0ftsort.h
-
23storage/xtradb/include/row0merge.h
-
84storage/xtradb/row/row0ftsort.cc
-
353storage/xtradb/row/row0merge.cc
@ -0,0 +1,136 @@ |
|||
SET GLOBAL innodb_file_format = `Barracuda`; |
|||
SET GLOBAL innodb_file_per_table = ON; |
|||
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; |
|||
CREATE TABLE t3 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encrypted=yes; |
|||
create procedure innodb_insert_proc (repeat_count int) |
|||
begin |
|||
declare current_num int; |
|||
set current_num = 0; |
|||
while current_num < repeat_count do |
|||
insert into t1 values (current_num,repeat('foobar',42)); |
|||
insert into t2 values (current_num,repeat('temp', 42)); |
|||
insert into t3 values (current_num,repeat('barfoo',42)); |
|||
set current_num = current_num + 1; |
|||
end while; |
|||
end// |
|||
commit; |
|||
set autocommit=0; |
|||
call innodb_insert_proc(10000); |
|||
commit; |
|||
set autocommit=1; |
|||
# Wait max 10 min for key encryption threads to encrypt all spaces |
|||
# tablespaces should be now encrypted |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
FLUSH TABLE t1, t2, t3 FOR EXPORT; |
|||
# List before copying files |
|||
t1.cfg |
|||
t1.frm |
|||
t1.ibd |
|||
t2.cfg |
|||
t2.frm |
|||
t2.ibd |
|||
t3.cfg |
|||
t3.frm |
|||
t3.ibd |
|||
UNLOCK TABLES; |
|||
# Restarting server |
|||
# Done restarting server |
|||
# List before t1 DISCARD |
|||
t1.frm |
|||
t1.ibd |
|||
t2.frm |
|||
t2.ibd |
|||
t3.frm |
|||
t3.ibd |
|||
SET GLOBAL innodb_file_format = `Barracuda`; |
|||
SET GLOBAL innodb_file_per_table = ON; |
|||
ALTER TABLE t1 DISCARD TABLESPACE; |
|||
ALTER TABLE t2 DISCARD TABLESPACE; |
|||
ALTER TABLE t3 DISCARD TABLESPACE; |
|||
# Discarded tablespaces should be encrypted |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
# List after t1 DISCARD |
|||
t1.frm |
|||
t2.frm |
|||
t3.frm |
|||
# Tablespaces should be still encrypted |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
ALTER TABLE t1 IMPORT TABLESPACE; |
|||
ALTER TABLE t2 IMPORT TABLESPACE; |
|||
ALTER TABLE t3 IMPORT TABLESPACE; |
|||
# tablespaces should remain encrypted after import |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
ALTER TABLE t1 ENGINE InnoDB; |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
PRIMARY KEY (`id`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes |
|||
ALTER TABLE t2 ENGINE InnoDB; |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE `t2` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
PRIMARY KEY (`id`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
ALTER TABLE t3 ENGINE InnoDB; |
|||
SHOW CREATE TABLE t3; |
|||
Table Create Table |
|||
t3 CREATE TABLE `t3` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
PRIMARY KEY (`id`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED `encrypted`=yes |
|||
# Wait max 10 min for key encryption threads to encrypt all spaces |
|||
# Tablespaces should be encrypted after alter table |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
# Restarting server |
|||
# Done restarting server |
|||
# Verify that tables are still usable |
|||
SELECT COUNT(1) FROM t1; |
|||
COUNT(1) |
|||
10000 |
|||
SELECT COUNT(1) FROM t2; |
|||
COUNT(1) |
|||
10000 |
|||
SELECT COUNT(1) FROM t3; |
|||
COUNT(1) |
|||
10000 |
|||
# Tablespaces should be encrypted after restart |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
DROP PROCEDURE innodb_insert_proc; |
|||
DROP TABLE t1, t2, t3; |
@ -0,0 +1,176 @@ |
|||
SET GLOBAL innodb_file_format = `Barracuda`; |
|||
SET GLOBAL innodb_file_per_table = ON; |
|||
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; |
|||
CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t4 (id INT, a VARCHAR(255)) engine=InnoDB; |
|||
CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; |
|||
CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encrypted=yes; |
|||
create procedure innodb_insert_proc (repeat_count int) |
|||
begin |
|||
declare current_num int; |
|||
set current_num = 0; |
|||
while current_num < repeat_count do |
|||
insert into t1 values (current_num,repeat('foobar',42)); |
|||
insert into t2 values (current_num,repeat('temp', 42)); |
|||
insert into t3 values (current_num,repeat('barfoo',42)); |
|||
insert into t4 values (current_num,repeat('repeat',42)); |
|||
insert into t5 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('author new',22)); |
|||
insert into t6 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('mangled old',22)); |
|||
insert into t7 values (current_num,repeat('mysql',42)); |
|||
set current_num = current_num + 1; |
|||
end while; |
|||
end// |
|||
commit; |
|||
set autocommit=0; |
|||
call innodb_insert_proc(15000); |
|||
commit; |
|||
set autocommit=1; |
|||
# Wait max 10 min for key encryption threads to encrypt all spaces |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
# t4 ... on expecting NOT FOUND |
|||
NOT FOUND /repeat/ in t4.ibd |
|||
# t5 ... on expecting NOT FOUND |
|||
NOT FOUND /author/ in t5.ibd |
|||
# t6 ... on expecting NOT FOUND |
|||
NOT FOUND /mangled/ in t6.ibd |
|||
# t7 ... on expecting NOT FOUND |
|||
NOT FOUND /mysql/ in t7.ibd |
|||
ALTER TABLE t1 ADD COLUMN b int default 2; |
|||
ALTER TABLE t2 ADD COLUMN b int default 2; |
|||
ALTER TABLE t7 ADD COLUMN b int default 2; |
|||
ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); |
|||
ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); |
|||
ALTER TABLE t3 ADD COLUMN c int default 5; |
|||
ALTER TABLE t4 ADD COLUMN c int default 5; |
|||
ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); |
|||
ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); |
|||
ALTER TABLE t5 ADD FULLTEXT(a); |
|||
ALTER TABLE t6 ADD FULLTEXT(a); |
|||
ALTER TABLE t7 ADD KEY a(a), ADD key b(b); |
|||
SHOW CREATE TABLE t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
`b` int(11) DEFAULT '2', |
|||
PRIMARY KEY (`id`), |
|||
KEY `a` (`a`), |
|||
KEY `b` (`b`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes |
|||
SHOW CREATE TABLE t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE `t2` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
`b` int(11) DEFAULT '2', |
|||
PRIMARY KEY (`id`), |
|||
KEY `a` (`a`), |
|||
KEY `b` (`b`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
SHOW CREATE TABLE t3; |
|||
Table Create Table |
|||
t3 CREATE TABLE `t3` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
`c` int(11) DEFAULT '5', |
|||
KEY `a` (`a`), |
|||
KEY `c` (`c`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes |
|||
SHOW CREATE TABLE t4; |
|||
Table Create Table |
|||
t4 CREATE TABLE `t4` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
`c` int(11) DEFAULT '5', |
|||
KEY `a` (`a`), |
|||
KEY `c` (`c`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
SHOW CREATE TABLE t5; |
|||
Table Create Table |
|||
t5 CREATE TABLE `t5` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` text, |
|||
`b` varchar(255) DEFAULT NULL, |
|||
PRIMARY KEY (`id`), |
|||
FULLTEXT KEY `b` (`b`), |
|||
FULLTEXT KEY `a` (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 `encrypted`=yes |
|||
SHOW CREATE TABLE t6; |
|||
Table Create Table |
|||
t6 CREATE TABLE `t6` ( |
|||
`id` int(11) DEFAULT NULL, |
|||
`a` text, |
|||
`b` varchar(255) DEFAULT NULL, |
|||
FULLTEXT KEY `b` (`b`), |
|||
FULLTEXT KEY `a` (`a`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
SHOW CREATE TABLE t7; |
|||
Table Create Table |
|||
t7 CREATE TABLE `t7` ( |
|||
`id` int(11) NOT NULL, |
|||
`a` varchar(255) DEFAULT NULL, |
|||
`b` int(11) DEFAULT '2', |
|||
PRIMARY KEY (`id`), |
|||
KEY `a` (`a`), |
|||
KEY `b` (`b`) |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPRESSED `encrypted`=yes |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
# t4 ... on expecting NOT FOUND |
|||
NOT FOUND /repeat/ in t4.ibd |
|||
# t5 ... on expecting NOT FOUND |
|||
NOT FOUND /author/ in t5.ibd |
|||
# t6 ... on expecting NOT FOUND |
|||
NOT FOUND /mangled/ in t6.ibd |
|||
# t7 ... on expecting NOT FOUND |
|||
NOT FOUND /mysql/ in t7.ibd |
|||
# Restarting server |
|||
# Done restarting server |
|||
select count(1) from t1; |
|||
count(1) |
|||
15000 |
|||
select count(1) from t2; |
|||
count(1) |
|||
15000 |
|||
select count(1) from t3; |
|||
count(1) |
|||
15000 |
|||
select count(1) from t4; |
|||
count(1) |
|||
15000 |
|||
select count(1) from t5; |
|||
count(1) |
|||
15000 |
|||
select count(1) from t6; |
|||
count(1) |
|||
15000 |
|||
select count(1) from t7; |
|||
count(1) |
|||
15000 |
|||
# t1 yes on expecting NOT FOUND |
|||
NOT FOUND /foobar/ in t1.ibd |
|||
# t2 ... on expecting NOT FOUND |
|||
NOT FOUND /temp/ in t2.ibd |
|||
# t3 ... on expecting NOT FOUND |
|||
NOT FOUND /barfoo/ in t3.ibd |
|||
# t4 ... on expecting NOT FOUND |
|||
NOT FOUND /repeat/ in t4.ibd |
|||
# t5 ... on expecting NOT FOUND |
|||
NOT FOUND /author/ in t5.ibd |
|||
# t6 ... on expecting NOT FOUND |
|||
NOT FOUND /mangled/ in t6.ibd |
|||
# t7 ... on expecting NOT FOUND |
|||
NOT FOUND /mysql/ in t7.ibd |
|||
DROP PROCEDURE innodb_insert_proc; |
|||
DROP TABLE t1, t2, t3, t4, t5, t6, t7; |
@ -0,0 +1,8 @@ |
|||
--innodb-encrypt-tables=ON |
|||
--innodb-encrypt-log=ON |
|||
--innodb-encryption-rotate-key-age=15 |
|||
--innodb-encryption-threads=4 |
|||
--innodb-tablespaces-encryption |
|||
--innodb-max-dirty-pages-pct=0.001 |
|||
|
|||
|
@ -0,0 +1,211 @@ |
|||
-- source include/have_innodb.inc |
|||
-- source include/have_example_key_management_plugin.inc |
|||
-- source include/not_valgrind.inc |
|||
-- source include/not_embedded.inc |
|||
-- source include/not_windows.inc |
|||
|
|||
--let $MYSQLD_TMPDIR = `SELECT @@tmpdir` |
|||
--let $MYSQLD_DATADIR = `SELECT @@datadir` |
|||
--let SEARCH_RANGE = 10000000 |
|||
--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd |
|||
--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd |
|||
--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd |
|||
--let t1_IBD_1 = $MYSQLD_TMPDIR/t1.ibd |
|||
--let t2_IBD_1 = $MYSQLD_TMPDIR/t2.ibd |
|||
--let t3_IBD_1 = $MYSQLD_TMPDIR/t3.ibd |
|||
|
|||
--disable_query_log |
|||
let $innodb_file_format_orig = `SELECT @@innodb_file_format`; |
|||
let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; |
|||
--enable_query_log |
|||
|
|||
SET GLOBAL innodb_file_format = `Barracuda`; |
|||
SET GLOBAL innodb_file_per_table = ON; |
|||
|
|||
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; |
|||
CREATE TABLE t3 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encrypted=yes; |
|||
|
|||
delimiter //; |
|||
create procedure innodb_insert_proc (repeat_count int) |
|||
begin |
|||
declare current_num int; |
|||
set current_num = 0; |
|||
while current_num < repeat_count do |
|||
insert into t1 values (current_num,repeat('foobar',42)); |
|||
insert into t2 values (current_num,repeat('temp', 42)); |
|||
insert into t3 values (current_num,repeat('barfoo',42)); |
|||
set current_num = current_num + 1; |
|||
end while; |
|||
end// |
|||
delimiter ;// |
|||
commit; |
|||
|
|||
set autocommit=0; |
|||
call innodb_insert_proc(10000); |
|||
commit; |
|||
set autocommit=1; |
|||
|
|||
--echo # Wait max 10 min for key encryption threads to encrypt all spaces |
|||
--let $wait_timeout= 600 |
|||
--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 |
|||
--source include/wait_condition.inc |
|||
|
|||
--sleep 5 |
|||
--echo # tablespaces should be now encrypted |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=barfoo |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
FLUSH TABLE t1, t2, t3 FOR EXPORT; |
|||
|
|||
--echo # List before copying files |
|||
--list_files $MYSQLD_DATADIR/test |
|||
--copy_file $MYSQLD_DATADIR/test/t1.cfg $MYSQLD_TMPDIR/t1.cfg |
|||
--copy_file $MYSQLD_DATADIR/test/t1.ibd $MYSQLD_TMPDIR/t1.ibd |
|||
--copy_file $MYSQLD_DATADIR/test/t2.cfg $MYSQLD_TMPDIR/t2.cfg |
|||
--copy_file $MYSQLD_DATADIR/test/t2.ibd $MYSQLD_TMPDIR/t2.ibd |
|||
--copy_file $MYSQLD_DATADIR/test/t3.cfg $MYSQLD_TMPDIR/t3.cfg |
|||
--copy_file $MYSQLD_DATADIR/test/t3.ibd $MYSQLD_TMPDIR/t3.ibd |
|||
UNLOCK TABLES; |
|||
|
|||
--echo # Restarting server |
|||
-- source include/restart_mysqld.inc |
|||
--echo # Done restarting server |
|||
--echo # List before t1 DISCARD |
|||
--list_files $MYSQLD_DATADIR/test |
|||
|
|||
SET GLOBAL innodb_file_format = `Barracuda`; |
|||
SET GLOBAL innodb_file_per_table = ON; |
|||
|
|||
ALTER TABLE t1 DISCARD TABLESPACE; |
|||
ALTER TABLE t2 DISCARD TABLESPACE; |
|||
ALTER TABLE t3 DISCARD TABLESPACE; |
|||
|
|||
--sleep 5 |
|||
--echo # Discarded tablespaces should be encrypted |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD_1 |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD_1 |
|||
-- source include/search_pattern_in_file.inc |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
--let SEARCH_PATTERN=barfoo |
|||
-- let SEARCH_FILE=$t3_IBD_1 |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
--echo # List after t1 DISCARD |
|||
--list_files $MYSQLD_DATADIR/test |
|||
--copy_file $MYSQLD_TMPDIR/t1.cfg $MYSQLD_DATADIR/test/t1.cfg |
|||
--copy_file $MYSQLD_TMPDIR/t1.ibd $MYSQLD_DATADIR/test/t1.ibd |
|||
--copy_file $MYSQLD_TMPDIR/t2.cfg $MYSQLD_DATADIR/test/t2.cfg |
|||
--copy_file $MYSQLD_TMPDIR/t2.ibd $MYSQLD_DATADIR/test/t2.ibd |
|||
--copy_file $MYSQLD_TMPDIR/t3.cfg $MYSQLD_DATADIR/test/t3.cfg |
|||
--copy_file $MYSQLD_TMPDIR/t3.ibd $MYSQLD_DATADIR/test/t3.ibd |
|||
|
|||
--sleep 5 |
|||
--echo # Tablespaces should be still encrypted |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
--let SEARCH_PATTERN=barfoo |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
ALTER TABLE t1 IMPORT TABLESPACE; |
|||
ALTER TABLE t2 IMPORT TABLESPACE; |
|||
ALTER TABLE t3 IMPORT TABLESPACE; |
|||
|
|||
--sleep 5 |
|||
--echo # tablespaces should remain encrypted after import |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
--let SEARCH_PATTERN=barfoo |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
ALTER TABLE t1 ENGINE InnoDB; |
|||
SHOW CREATE TABLE t1; |
|||
ALTER TABLE t2 ENGINE InnoDB; |
|||
SHOW CREATE TABLE t2; |
|||
ALTER TABLE t3 ENGINE InnoDB; |
|||
SHOW CREATE TABLE t3; |
|||
|
|||
--echo # Wait max 10 min for key encryption threads to encrypt all spaces |
|||
--let $wait_timeout= 600 |
|||
--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 |
|||
--source include/wait_condition.inc |
|||
|
|||
--sleep 5 |
|||
--echo # Tablespaces should be encrypted after alter table |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
--let SEARCH_PATTERN=barfoo |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
--echo # Restarting server |
|||
-- source include/restart_mysqld.inc |
|||
--echo # Done restarting server |
|||
|
|||
--echo # Verify that tables are still usable |
|||
SELECT COUNT(1) FROM t1; |
|||
SELECT COUNT(1) FROM t2; |
|||
SELECT COUNT(1) FROM t3; |
|||
|
|||
--sleep 5 |
|||
--echo # Tablespaces should be encrypted after restart |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
--let SEARCH_PATTERN=barfoo |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
|
|||
DROP PROCEDURE innodb_insert_proc; |
|||
DROP TABLE t1, t2, t3; |
|||
|
|||
# reset system |
|||
--disable_query_log |
|||
EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; |
|||
EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; |
|||
--enable_query_log |
@ -0,0 +1,8 @@ |
|||
--innodb-encrypt-tables=ON |
|||
--innodb-encrypt-log=ON |
|||
--innodb-encryption-rotate-key-age=15 |
|||
--innodb-encryption-threads=4 |
|||
--innodb-tablespaces-encryption |
|||
--innodb-max-dirty-pages-pct=0.001 |
|||
|
|||
|
@ -0,0 +1,191 @@ |
|||
-- source include/have_innodb.inc |
|||
-- source include/have_example_key_management_plugin.inc |
|||
-- source include/not_valgrind.inc |
|||
-- source include/not_embedded.inc |
|||
-- source include/not_windows.inc |
|||
|
|||
--disable_query_log |
|||
let $innodb_file_format_orig = `SELECT @@innodb_file_format`; |
|||
let $innodb_file_per_table_orig = `SELECT @@innodb_file_per_table`; |
|||
--enable_query_log |
|||
|
|||
SET GLOBAL innodb_file_format = `Barracuda`; |
|||
SET GLOBAL innodb_file_per_table = ON; |
|||
|
|||
--let $MYSQLD_DATADIR=`select @@datadir` |
|||
--let SEARCH_RANGE = 10000000 |
|||
--let t1_IBD = $MYSQLD_DATADIR/test/t1.ibd |
|||
--let t2_IBD = $MYSQLD_DATADIR/test/t2.ibd |
|||
--let t3_IBD = $MYSQLD_DATADIR/test/t3.ibd |
|||
--let t4_IBD = $MYSQLD_DATADIR/test/t4.ibd |
|||
--let t5_IBD = $MYSQLD_DATADIR/test/t5.ibd |
|||
--let t6_IBD = $MYSQLD_DATADIR/test/t6.ibd |
|||
--let t7_IBD = $MYSQLD_DATADIR/test/t7.ibd |
|||
|
|||
CREATE TABLE t1 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t2 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB; |
|||
CREATE TABLE t3 (id INT, a VARCHAR(255)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t4 (id INT, a VARCHAR(255)) engine=InnoDB; |
|||
CREATE TABLE t5 (id INT NOT NULL PRIMARY KEY, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB encrypted=yes; |
|||
CREATE TABLE t6 (id INT, a TEXT(500), b VARCHAR(255), FULLTEXT(b)) ENGINE=InnoDB; |
|||
CREATE TABLE t7 (id INT NOT NULL PRIMARY KEY, a VARCHAR(255)) ENGINE=InnoDB row_format=compressed encrypted=yes; |
|||
|
|||
delimiter //; |
|||
create procedure innodb_insert_proc (repeat_count int) |
|||
begin |
|||
declare current_num int; |
|||
set current_num = 0; |
|||
while current_num < repeat_count do |
|||
insert into t1 values (current_num,repeat('foobar',42)); |
|||
insert into t2 values (current_num,repeat('temp', 42)); |
|||
insert into t3 values (current_num,repeat('barfoo',42)); |
|||
insert into t4 values (current_num,repeat('repeat',42)); |
|||
insert into t5 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('author new',22)); |
|||
insert into t6 values (current_num,substring('A BC DEF GHIJ KLM NOPQRS TUV WXYZ 012 3456789', rand()*36+1, 100), repeat('mangled old',22)); |
|||
insert into t7 values (current_num,repeat('mysql',42)); |
|||
set current_num = current_num + 1; |
|||
end while; |
|||
end// |
|||
delimiter ;// |
|||
commit; |
|||
|
|||
set autocommit=0; |
|||
call innodb_insert_proc(15000); |
|||
commit; |
|||
set autocommit=1; |
|||
|
|||
--echo # Wait max 10 min for key encryption threads to encrypt all spaces |
|||
--let $wait_timeout= 600 |
|||
--let $wait_condition=SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 |
|||
--source include/wait_condition.inc |
|||
|
|||
--sleep 5 |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=barfoo |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=repeat |
|||
--echo # t4 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t4_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=author |
|||
--echo # t5 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t5_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=mangled |
|||
--echo # t6 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t6_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=mysql |
|||
--echo # t7 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t7_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
ALTER TABLE t1 ADD COLUMN b int default 2; |
|||
ALTER TABLE t2 ADD COLUMN b int default 2; |
|||
ALTER TABLE t7 ADD COLUMN b int default 2; |
|||
ALTER TABLE t1 ADD KEY a(a), ADD KEY b(b); |
|||
ALTER TABLE t2 ADD KEY a(a), ADD KEY b(b); |
|||
ALTER TABLE t3 ADD COLUMN c int default 5; |
|||
ALTER TABLE t4 ADD COLUMN c int default 5; |
|||
ALTER TABLE t3 ADD KEY (a), ADD KEY c(c); |
|||
ALTER TABLE t4 ADD KEY (a), ADD KEY c(c); |
|||
ALTER TABLE t5 ADD FULLTEXT(a); |
|||
ALTER TABLE t6 ADD FULLTEXT(a); |
|||
ALTER TABLE t7 ADD KEY a(a), ADD key b(b); |
|||
|
|||
SHOW CREATE TABLE t1; |
|||
SHOW CREATE TABLE t2; |
|||
SHOW CREATE TABLE t3; |
|||
SHOW CREATE TABLE t4; |
|||
SHOW CREATE TABLE t5; |
|||
SHOW CREATE TABLE t6; |
|||
SHOW CREATE TABLE t7; |
|||
|
|||
--sleep 5 |
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=barfoo |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=repeat |
|||
--echo # t4 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t4_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=author |
|||
--echo # t5 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t5_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=mangled |
|||
--echo # t6 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t6_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=mysql |
|||
--echo # t7 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t7_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
--echo # Restarting server |
|||
-- source include/restart_mysqld.inc |
|||
--echo # Done restarting server |
|||
|
|||
select count(1) from t1; |
|||
select count(1) from t2; |
|||
select count(1) from t3; |
|||
select count(1) from t4; |
|||
select count(1) from t5; |
|||
select count(1) from t6; |
|||
select count(1) from t7; |
|||
|
|||
--let SEARCH_PATTERN=foobar |
|||
--echo # t1 yes on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t1_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=temp |
|||
--echo # t2 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t2_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=barfoo |
|||
--echo # t3 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t3_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=repeat |
|||
--echo # t4 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t4_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=author |
|||
--echo # t5 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t5_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=mangled |
|||
--echo # t6 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t6_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
--let SEARCH_PATTERN=mysql |
|||
--echo # t7 ... on expecting NOT FOUND |
|||
-- let SEARCH_FILE=$t7_IBD |
|||
-- source include/search_pattern_in_file.inc |
|||
|
|||
DROP PROCEDURE innodb_insert_proc; |
|||
DROP TABLE t1, t2, t3, t4, t5, t6, t7; |
|||
|
|||
# reset system |
|||
--disable_query_log |
|||
EVAL SET GLOBAL innodb_file_per_table = $innodb_file_per_table_orig; |
|||
EVAL SET GLOBAL innodb_file_format = $innodb_file_format_orig; |
|||
--enable_query_log |
Write
Preview
Loading…
Cancel
Save
Reference in new issue