polardbxengine/mysql-test/suite/innodb/r/tablespace_encrypt_7.result

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
#########################################################################