412 lines
15 KiB
Plaintext
412 lines
15 KiB
Plaintext
#########################################################################
|
|
# START : WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
|
|
#########
|
|
# SETUP #
|
|
#########
|
|
CREATE TABLESPACE encrypt_ts ADD DATAFILE 'encrypt_ts.ibd' ENGINE=InnoDB ENCRYPTION="N";
|
|
CREATE TABLE t1(c1 char(100)) ENGINE=InnoDB TABLESPACE encrypt_ts;
|
|
set global innodb_buf_flush_list_now = 1;
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='Y';
|
|
ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.
|
|
#-------------------------- TEST 1 -------------------------------------#
|
|
#########################################################################
|
|
# RESTART 1 : WITH KEYRING PLUGIN
|
|
#########################################################################
|
|
########################################################################
|
|
# ALTER TABLESPACE 1 : Unencrypted => Encrypted #
|
|
# crash just before flushing page 0 at the end #
|
|
########################################################################
|
|
# Set process to crash just before flushing page 0 at the end
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_crash_before_flushing_page_0';
|
|
# Encrypt the tablespace. It will cause crash.
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='Y';
|
|
#########################################################################
|
|
# RESTART 2 : WITH KEYRING PLUGIN after crash
|
|
# and INJECT error TOO_MANY_CONCURRENT_TXNS in startup location #1
|
|
#########################################################################
|
|
# Wait for Encryption processing to finish in background thread
|
|
set global innodb_buf_flush_list_now = 1;
|
|
# After restart/recovery, check that Encryption was roll-forward
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts Y
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 3 : WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT * FROM t1 LIMIT 10;
|
|
ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.
|
|
#########################################################################
|
|
# RESTART 4 : WITH KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts Y
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
########################################################################
|
|
# ALTER TABLESPACE 2 : Encrypted => Unencrypted #
|
|
# crash just before flushing page 0 at the end #
|
|
########################################################################
|
|
# Set process to crash just before flushing page 0 at the end
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_crash_before_flushing_page_0';
|
|
# Unencrypt the tablespace. It will cause crash.
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='N';
|
|
#########################################################################
|
|
# RESTART 5 : WITH KEYRING PLUGIN after crash
|
|
# and INJECT error TOO_MANY_CONCURRENT_TXNS in startup location #2
|
|
#########################################################################
|
|
# Wait for Unencryption processing to finish in background thread
|
|
set global innodb_buf_flush_list_now = 1;
|
|
# After restart/recovery, check that Unencryption was roll-forward
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 6 : WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 7 : WITH KEYRING PLUGIN
|
|
#########################################################################
|
|
########################################################################
|
|
# ALTER TABLESPACE 3 : Unencrypted => Encrypted #
|
|
# crash just after flushing page 0 at the end #
|
|
########################################################################
|
|
# Set process to crash just after flushing page 0 at the end
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_crash_after_flushing_page_0';
|
|
# Encrypt the tablespace. It will cause crash.
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='Y';
|
|
#########################################################################
|
|
# RESTART 8 : WITH KEYRING PLUGIN after crash
|
|
#########################################################################
|
|
# Wait for Encryption processing to finish in background thread
|
|
set global innodb_buf_flush_list_now = 1;
|
|
# After restart/recovery, check that Encryption was roll-forward
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts Y
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 9 : WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT * FROM t1 LIMIT 10;
|
|
ERROR HY000: Can't find master key from keyring, please check in the server log if a keyring plugin is loaded and initialized successfully.
|
|
#########################################################################
|
|
# RESTART 10 : WITH KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts Y
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
########################################################################
|
|
# ALTER TABLESPACE 4 : Encrypted => Unencrypted #
|
|
# crash just after flushing page 0 at the end #
|
|
########################################################################
|
|
# Set process to crash just after flushing page 0 at the end
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_crash_after_flushing_page_0';
|
|
# Unencrypt the tablespace. It will cause crash.
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='N';
|
|
#########################################################################
|
|
# RESTART 11 : WITH KEYRING PLUGIN after crash
|
|
#########################################################################
|
|
# Wait for Unencryption processing to finish in background thread
|
|
set global innodb_buf_flush_list_now = 1;
|
|
# After restart/recovery, check that Unencryption was roll-forward
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 12 : WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#-------------------------- TEST 2 -------------------------------------#
|
|
#########################################################################
|
|
# RESTART 13 : WITH KEYRING PLUGIN
|
|
# and INJECT error TOO_MANY_CONCURRENT_TXNS in startup location #3
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
########################################################################
|
|
# ALTER TABLESPACE 5 : Encrypted => unencrypted #
|
|
# crash just before updating ts flags on page0 #
|
|
########################################################################
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='Y';
|
|
# Set process to crash just after flushing page 0 at the end
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_crash_before_updating_flags';
|
|
# Unencrypt the tablespace. It will cause crash.
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='N';
|
|
#########################################################################
|
|
# RESTART 14 : WITH KEYRING PLUGIN after crash
|
|
#########################################################################
|
|
# Wait for Unencryption processing to finish in background thread
|
|
set global innodb_buf_flush_list_now = 1;
|
|
# After restart/recovery, check that Unencryption was roll-forward
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 15 : WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 16 : WITH KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
########################################################################
|
|
# ALTER TABLESPACE 6 : Encrypted => unencrypted #
|
|
# crash just before resetting progress onpage 0 #
|
|
########################################################################
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='Y';
|
|
# Set process to crash just after flushing page 0 at the end
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_crash_before_resetting_progress';
|
|
# Unencrypt the tablespace. It will cause crash.
|
|
ALTER TABLESPACE encrypt_ts ENCRYPTION='N';
|
|
#########################################################################
|
|
# RESTART 17 : WITH KEYRING PLUGIN after crash
|
|
#########################################################################
|
|
# Wait for Unencryption processing to finish in background thread
|
|
set global innodb_buf_flush_list_now = 1;
|
|
# After restart/recovery, check that Unencryption was roll-forward
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#########################################################################
|
|
# RESTART 18: WITHOUT KEYRING PLUGIN
|
|
#########################################################################
|
|
SELECT NAME, ENCRYPTION FROM INFORMATION_SCHEMA.INNODB_TABLESPACES WHERE NAME='encrypt_ts';
|
|
NAME ENCRYPTION
|
|
encrypt_ts N
|
|
SELECT * FROM t1 LIMIT 10;
|
|
c1
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
SOME VALUES
|
|
#-------------------------- TEST 3 -------------------------------------#
|
|
#########################################################################
|
|
# RESTART 19 : WITH KEYRING PLUGIN
|
|
#########################################################################
|
|
DROP TABLE t1;
|
|
DROP TABLESPACE encrypt_ts;
|
|
CREATE TABLESPACE encrypt_ts ADD DATAFILE 'encrypt_ts.ibd';
|
|
CREATE TABLE t1 (C CHAR(10)) TABLESPACE=encrypt_ts;
|
|
SET GLOBAL innodb_limit_optimistic_insert_debug=2;
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
INSERT INTO t1 VALUES("SOMEVALUE");
|
|
# Make sure checkpoint is not moved
|
|
SET GLOBAL innodb_log_checkpoint_now = ON;
|
|
SET GLOBAL innodb_page_cleaner_disabled_debug = 1;
|
|
SET GLOBAL innodb_dict_stats_disabled_debug = 1;
|
|
SET GLOBAL innodb_master_thread_disabled_debug = 1;
|
|
# Following encryption will create a new tablespace key (KEY1)
|
|
# KEY1 will be written on REDO log
|
|
ALTER TABLESPACE encrypt_ts encryption='Y';
|
|
# Following unencryption will remove tablespace key
|
|
ALTER TABLESPACE encrypt_ts encryption='N';
|
|
SET SESSION debug= '+d,alter_encrypt_tablespace_page_6';
|
|
SET SESSION debug= '+d,flush_each_dirtied_page';
|
|
# Following encryption will create a new tablespace key (KEY2)
|
|
# KEY2 will be written on REDO log
|
|
# Flush dirtied pages encrypted with KEY2 before crash
|
|
ALTER TABLESPACE encrypt_ts encryption='Y';
|
|
#########################################################################
|
|
# RESTART 20: WITH KEYRING PLUGIN after crash
|
|
#########################################################################
|
|
###########
|
|
# Cleanup #
|
|
###########
|
|
DROP TABLE t1;
|
|
DROP TABLESPACE encrypt_ts;
|
|
#########################################################################
|
|
# RESTART 21 : final
|
|
#########################################################################
|