-- source include/have_innodb.inc -- source include/have_example_key_management_plugin.inc -- source include/big_test.inc # embedded does not support restart -- source include/not_embedded.inc --disable_query_log let $innodb_encryption_threads_orig = `SELECT @@global.innodb_encryption_threads`; --enable_query_log # empty the change buffer and the undo logs to avoid extra reads SET GLOBAL innodb_fast_shutdown=0; --source include/restart_mysqld.inc SHOW VARIABLES LIKE 'innodb_encrypt%'; # # This will create 100 tables where that could be # encrypted an unencrypt # create database innodb_encrypted_1; use innodb_encrypted_1; show status like 'innodb_pages0_read%'; set autocommit=0; let $tables = 100; --disable_query_log while ($tables) { eval create table t_$tables (a int not null primary key, b varchar(200)) engine=innodb stats_persistent=0; commit; let $rows = 100; while($rows) { eval insert into t_$tables values ($rows, substring(MD5(RAND()), -64)); dec $rows; } commit; dec $tables; } --enable_query_log set autocommit=1; commit work; show status like 'innodb_pages0_read%'; # # Verify # --echo # should be 100 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE NAME LIKE 'innodb_encrypted%'; # # This will create 100 tables that are encrypted always # create database innodb_encrypted_2; use innodb_encrypted_2; show status like 'innodb_pages0_read%'; set autocommit=0; --disable_query_log let $tables = 100; while ($tables) { eval create table t_$tables (a int not null primary key, b varchar(200)) engine=innodb stats_persistent=0 encrypted=yes; commit; let $rows = 100; while($rows) { eval insert into t_$tables values ($rows, substring(MD5(RAND()), -64)); dec $rows; } commit; dec $tables; } --enable_query_log commit work; set autocommit=1; show status like 'innodb_pages0_read%'; # # Verify # --echo # should be 100 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; --echo # should be 100 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; # # This will create 100 tables that are not encrypted # create database innodb_encrypted_3; use innodb_encrypted_3; show status like 'innodb_pages0_read%'; set autocommit=0; --disable_query_log let $tables = 100; while ($tables) { eval create table t_$tables (a int not null primary key, b varchar(200)) engine=innodb stats_persistent=0 encrypted=no; commit; let $rows = 100; while($rows) { eval insert into t_$tables values ($rows, substring(MD5(RAND()), -64)); dec $rows; } commit; dec $tables; } --enable_query_log commit work; set autocommit=1; show status like 'innodb_pages0_read%'; # # Verify # --echo # should be 100 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; --echo # should be 200 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; use test; show status like 'innodb_pages0_read%'; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; SET GLOBAL innodb_encrypt_tables = on; SET GLOBAL innodb_encryption_threads=4; --echo # Wait until all encrypted tables have been encrypted let $cnt=600; while ($cnt) { let $success=`SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0`; if ($success) { let $cnt=0; } if (!$success) { real_sleep 1; dec $cnt; } } if (!$success) { SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; SHOW STATUS LIKE 'innodb_encryption%'; -- die Timeout waiting for encryption threads } SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; show status like 'innodb_pages0_read%'; --echo # Success! --echo # Restart mysqld --innodb_encrypt_tables=0 --innodb_encryption_threads=0 -- let $restart_parameters=--innodb_encrypt_tables=0 --innodb_encryption_threads=0 -- source include/restart_mysqld.inc --echo # Restart Success! show status like 'innodb_pages0_read%'; show status like 'innodb_pages0_read%'; use test; show status like 'innodb_pages0_read%'; use innodb_encrypted_1; show status like 'innodb_pages0_read%'; use innodb_encrypted_2; show status like 'innodb_pages0_read%'; use innodb_encrypted_3; show status like 'innodb_pages0_read%'; use innodb_encrypted_1; show status like 'innodb_pages0_read%'; --disable_result_log --disable_query_log let $tables = 100; while ($tables) { eval select * from t_$tables; dec $tables; } --enable_query_log --enable_result_log show status like 'innodb_pages0_read%'; use innodb_encrypted_2; show status like 'innodb_pages0_read%'; --disable_result_log --disable_query_log let $tables = 100; while ($tables) { eval select * from t_$tables; dec $tables; } --enable_query_log --enable_result_log show status like 'innodb_pages0_read%'; use innodb_encrypted_3; show status like 'innodb_pages0_read%'; --disable_result_log --disable_query_log let $tables = 100; while ($tables) { eval select * from t_$tables; dec $tables; } --enable_query_log --enable_result_log show status like 'innodb_pages0_read%'; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; SET GLOBAL innodb_encrypt_tables = off; SET GLOBAL innodb_encryption_threads=4; --echo # Wait until all default encrypted tables have been decrypted let $cnt=600; while ($cnt) { let $success=`SELECT COUNT(*) = 100 FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0`; if ($success) { let $cnt=0; } if (!$success) { real_sleep 1; dec $cnt; } } if (!$success) { SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; SHOW STATUS LIKE 'innodb_encryption%'; -- die Timeout waiting for encryption threads } --echo # should be 100 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0 AND NAME LIKE 'innodb_encrypted%'; --echo # should be 200 SELECT COUNT(*) FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0 AND NAME LIKE 'innodb_encrypted%'; show status like 'innodb_pages0_read%'; # # Cleanup # use test; drop database innodb_encrypted_1; drop database innodb_encrypted_2; drop database innodb_encrypted_3; --disable_query_log EVAL SET GLOBAL innodb_encryption_threads = $innodb_encryption_threads_orig; --enable_query_log