mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Write proper tests for MDEV-12634: Uninitialised ROW_MERGE_RESERVE_SIZE bytes
Introduce innodb_encrypt_log.combinations and prove that the encryption and decryption take place during both online ADD INDEX (WL#5266) and online table-rebuilding ALTER (WL#6625).
This commit is contained in:
7
mysql-test/include/innodb_encrypt_log.combinations
Normal file
7
mysql-test/include/innodb_encrypt_log.combinations
Normal file
@ -0,0 +1,7 @@
|
||||
[crypt]
|
||||
innodb_encrypt_log=ON
|
||||
innodb_encryption_rotate_key_age=1
|
||||
plugin_load_add=$DEBUG_KEY_MANAGEMENT_SO
|
||||
|
||||
[clear]
|
||||
skip_innodb_encrypt_log
|
4
mysql-test/include/innodb_encrypt_log.inc
Normal file
4
mysql-test/include/innodb_encrypt_log.inc
Normal file
@ -0,0 +1,4 @@
|
||||
# The goal of including this file is to enable innodb_encrypt_log combinations
|
||||
# (see include/innodb_encrypt_log.combinations)
|
||||
|
||||
--source include/have_innodb.inc
|
@ -1,30 +0,0 @@
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
create table t1(id int not null primary key auto_increment, credit_card varchar(200), private varchar(50)) engine=innodb;
|
||||
SET SESSION debug_dbug="+d,ib_merge_wait_after_read";
|
||||
alter table t1 add index secret (credit_card), ALGORITHM=INPLACE, LOCK=NONE;
|
||||
SET GLOBAL innodb_encryption_rotate_key_age = 1;
|
||||
create table t2(id int) engine=innodb;
|
||||
SET SESSION debug_dbug="+d,ib_merge_wait_after_read";
|
||||
alter table t1 add index secret2 (private), ALGORITHM=INPLACE, LOCK=NONE;
|
||||
insert into t1(credit_card) select credit_card from t1;
|
||||
insert into t1(credit_card) select credit_card from t1;
|
||||
insert into t1(credit_card) select credit_card from t1;
|
||||
drop table t2;
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted';
|
||||
variable_value > 0
|
||||
1
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted';
|
||||
variable_value > 0
|
||||
1
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted';
|
||||
variable_value > 0
|
||||
1
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted';
|
||||
variable_value > 0
|
||||
1
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted';
|
||||
variable_value > 0
|
||||
1
|
||||
drop table t1;
|
||||
SET GLOBAL innodb_file_format=Antelope;
|
||||
SET GLOBAL innodb_encryption_rotate_key_age=15;
|
@ -1,7 +0,0 @@
|
||||
--aria-encrypt-tables
|
||||
--encrypt-tmp-disk-tables
|
||||
--innodb-encrypt-tables
|
||||
--innodb-encrypt-log
|
||||
--innodb-encryption-rotate-key-age=15
|
||||
--innodb-encryption-threads=4
|
||||
--innodb-tablespaces-encryption
|
@ -1,90 +0,0 @@
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_example_key_management_plugin.inc
|
||||
# needs dbug_dbug
|
||||
-- source include/have_debug.inc
|
||||
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
let $innodb_file_format_orig = `SELECT @@innodb_file_format`;
|
||||
let $key_age = `SELECT @@innodb_encryption_rotate_key_age`;
|
||||
--enable_query_log
|
||||
|
||||
SET GLOBAL innodb_file_format = `Barracuda`;
|
||||
--enable_warnings
|
||||
|
||||
let $MYSQLD_DATADIR = `SELECT @@datadir`;
|
||||
let $MYSQLD_TMPDIR = `SELECT @@tmpdir`;
|
||||
|
||||
#
|
||||
# Create a table that will be encrypted and put some sensitive data to it (credit card numbers)
|
||||
#
|
||||
|
||||
create table t1(id int not null primary key auto_increment, credit_card varchar(200), private varchar(50)) engine=innodb;
|
||||
|
||||
let $rows = 15000;
|
||||
--disable_query_log
|
||||
begin;
|
||||
while ($rows)
|
||||
{
|
||||
eval insert into t1 values(NULL, '0000-0000-0000-0000','private_data');
|
||||
dec $rows;
|
||||
}
|
||||
commit;
|
||||
--enable_query_log
|
||||
|
||||
--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
|
||||
|
||||
#
|
||||
# Now we create secondary index for credit_card column in parallel we create new rows
|
||||
# forcing alter table to wait so that row log is used.
|
||||
#
|
||||
SET SESSION debug_dbug="+d,ib_merge_wait_after_read";
|
||||
send alter table t1 add index secret (credit_card), ALGORITHM=INPLACE, LOCK=NONE;
|
||||
#
|
||||
# Force key rotation and create second index for same table
|
||||
#
|
||||
connect (con2,localhost,root,,);
|
||||
SET GLOBAL innodb_encryption_rotate_key_age = 1;
|
||||
create table t2(id int) engine=innodb;
|
||||
SET SESSION debug_dbug="+d,ib_merge_wait_after_read";
|
||||
send alter table t1 add index secret2 (private), ALGORITHM=INPLACE, LOCK=NONE;
|
||||
#
|
||||
# Create new rows to row log
|
||||
#
|
||||
connect (con1,localhost,root,,);
|
||||
insert into t1(credit_card) select credit_card from t1;
|
||||
insert into t1(credit_card) select credit_card from t1;
|
||||
insert into t1(credit_card) select credit_card from t1;
|
||||
|
||||
connection default;
|
||||
reap;
|
||||
disconnect con1;
|
||||
|
||||
connection con2;
|
||||
reap;
|
||||
drop table t2;
|
||||
|
||||
connection default;
|
||||
disconnect con2;
|
||||
|
||||
let $wait_condition= select variable_value > 0 from information_schema.global_status where variable_name = 'INNODB_NUM_PAGES_ENCRYPTED';
|
||||
--source include/wait_condition.inc
|
||||
|
||||
#
|
||||
# Verify that both merge blocks and row log blocks are encryted and decrypted
|
||||
#
|
||||
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_num_pages_encrypted';
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted';
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted';
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted';
|
||||
SELECT variable_value > 0 FROM information_schema.global_status WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted';
|
||||
|
||||
drop table t1;
|
||||
|
||||
--disable_warnings
|
||||
eval SET GLOBAL innodb_file_format=$innodb_file_format_orig;
|
||||
eval SET GLOBAL innodb_encryption_rotate_key_age=$key_age;
|
||||
--enable_warnings
|
20
mysql-test/suite/innodb/r/innodb-index-online,crypt.rdiff
Normal file
20
mysql-test/suite/innodb/r/innodb-index-online,crypt.rdiff
Normal file
@ -0,0 +1,20 @@
|
||||
--- innodb-index-online.result
|
||||
+++ innodb-index-online,crypt.reject
|
||||
@@ -260,7 +260,7 @@
|
||||
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
||||
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
||||
sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0
|
||||
-0 0 0 0
|
||||
+0 1 1 1
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
||||
ERROR HY000: Creating index 'c2e' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.
|
||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||
@@ -364,7 +364,7 @@
|
||||
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
||||
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
||||
sort_encrypted sort_decrypted log_encrypted log_decrypted
|
||||
-0 0 0 0
|
||||
+1 1 1 1
|
||||
SELECT COUNT(c22f) FROM t1;
|
||||
COUNT(c22f)
|
||||
320
|
@ -180,6 +180,15 @@ t1 CREATE TABLE `t1` (
|
||||
PRIMARY KEY (`c1`),
|
||||
KEY `c2d` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 STATS_PERSISTENT=1
|
||||
SET @merge_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2e_created WAIT_FOR dml2_done';
|
||||
SET lock_wait_timeout = 10;
|
||||
ALTER TABLE t1 DROP INDEX c2d, ADD INDEX c2e(c2),
|
||||
@ -209,6 +218,22 @@ BEGIN;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
BEGIN;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
BEGIN;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
BEGIN;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
BEGIN;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||
name count
|
||||
ddl_background_drop_indexes 0
|
||||
@ -220,6 +245,22 @@ INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf
|
||||
ON si.index_id = sf.index_id WHERE si.name = '?c2e';
|
||||
name pos
|
||||
c2 0
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SELECT
|
||||
(@merge_encrypt_1-@merge_encrypt_0)-
|
||||
(@merge_decrypt_1-@merge_decrypt_0) as sort_balance,
|
||||
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
||||
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
||||
sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0
|
||||
0 0 0 0
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
||||
ERROR HY000: Creating index 'c2e' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.
|
||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||
@ -245,6 +286,18 @@ ddl_background_drop_indexes 0
|
||||
ddl_background_drop_tables 0
|
||||
ddl_online_create_index 0
|
||||
ddl_pending_alter_table 0
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done';
|
||||
ALTER TABLE t1 ADD INDEX c2f(c2);
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR c2f_created';
|
||||
@ -262,6 +315,14 @@ BEGIN;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
BEGIN;
|
||||
INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 160;
|
||||
DELETE FROM t1 WHERE c1 > 320;
|
||||
ROLLBACK;
|
||||
BEGIN;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||
name count
|
||||
ddl_background_drop_indexes 0
|
||||
@ -278,6 +339,32 @@ ddl_background_drop_indexes 0
|
||||
ddl_background_drop_tables 0
|
||||
ddl_online_create_index 0
|
||||
ddl_pending_alter_table 0
|
||||
SET @merge_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
SELECT
|
||||
(@merge_encrypt_2-@merge_encrypt_1)-
|
||||
(@merge_decrypt_2-@merge_decrypt_1) as sort_balance,
|
||||
(@rowlog_encrypt_2-@rowlog_encrypt_1)-
|
||||
(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance;
|
||||
sort_balance log_balance
|
||||
0 0
|
||||
SELECT
|
||||
@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted,
|
||||
@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted,
|
||||
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
||||
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
||||
sort_encrypted sort_decrypted log_encrypted log_decrypted
|
||||
0 0 0 0
|
||||
SELECT COUNT(c22f) FROM t1;
|
||||
COUNT(c22f)
|
||||
320
|
||||
|
20
mysql-test/suite/innodb/r/innodb-table-online,crypt.rdiff
Normal file
20
mysql-test/suite/innodb/r/innodb-table-online,crypt.rdiff
Normal file
@ -0,0 +1,20 @@
|
||||
--- innodb-table-online.result
|
||||
+++ innodb-table-online,crypt.reject
|
||||
@@ -254,7 +254,7 @@
|
||||
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
||||
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
||||
sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0
|
||||
-0 0 0 0
|
||||
+0 1 1 1
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
||||
# session con1
|
||||
ERROR HY000: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.
|
||||
@@ -345,7 +345,7 @@
|
||||
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
||||
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
||||
sort_encrypted sort_decrypted log_encrypted log_decrypted
|
||||
-0 0 0 0
|
||||
+1 1 1 1
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5));
|
||||
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
||||
UPDATE t1 SET c3 = NULL WHERE c3 = '';
|
@ -3,7 +3,7 @@ call mtr.add_suppression("InnoDB: Error: table 'test/t1'");
|
||||
call mtr.add_suppression("MySQL is trying to open a table handle but the .ibd file for");
|
||||
SET @global_innodb_file_per_table_orig = @@global.innodb_file_per_table;
|
||||
SET GLOBAL innodb_file_per_table = on;
|
||||
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 TEXT NOT NULL)
|
||||
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 CHAR(255) NOT NULL)
|
||||
ENGINE = InnoDB;
|
||||
INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,'');
|
||||
SET GLOBAL innodb_monitor_enable = module_ddl;
|
||||
@ -53,7 +53,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
`c3` text NOT NULL,
|
||||
`c3` char(255) NOT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
||||
BEGIN;
|
||||
@ -81,7 +81,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
`c3` text NOT NULL,
|
||||
`c3` char(255) NOT NULL,
|
||||
UNIQUE KEY `c2` (`c2`),
|
||||
UNIQUE KEY `c2_2` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
@ -92,7 +92,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
`c3` text NOT NULL,
|
||||
`c3` char(255) NOT NULL,
|
||||
UNIQUE KEY `c2` (`c2`),
|
||||
UNIQUE KEY `c2_2` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
@ -118,7 +118,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
`c3` text NOT NULL,
|
||||
`c3` char(255) NOT NULL,
|
||||
UNIQUE KEY `c2` (`c2`),
|
||||
UNIQUE KEY `c2_2` (`c2`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
@ -173,17 +173,26 @@ INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1;
|
||||
INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1;
|
||||
EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 80 Using where
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL ROWS Using where
|
||||
ANALYZE TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 analyze status OK
|
||||
SET @merge_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
# session con1
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c1` int(11) NOT NULL,
|
||||
`c2` int(11) NOT NULL,
|
||||
`c3` text NOT NULL,
|
||||
`c3` char(255) NOT NULL,
|
||||
PRIMARY KEY (`c1`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=COMPACT
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt2 WAIT_FOR dml2_done';
|
||||
@ -230,6 +239,22 @@ ddl_background_drop_indexes 0
|
||||
ddl_background_drop_tables 0
|
||||
ddl_online_create_index 1
|
||||
ddl_pending_alter_table 1
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SELECT
|
||||
(@merge_encrypt_1-@merge_encrypt_0)-
|
||||
(@merge_decrypt_1-@merge_decrypt_0) as sort_balance,
|
||||
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
||||
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
||||
sort_balance @merge_encrypt_1>@merge_encrypt_0 @merge_decrypt_1>@merge_decrypt_0 @rowlog_encrypt_1>@rowlog_encrypt_0
|
||||
0 0 0 0
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
||||
# session con1
|
||||
ERROR HY000: Creating index 'PRIMARY' required more than 'innodb_online_alter_log_max_size' bytes of modification log. Please try again.
|
||||
@ -239,14 +264,26 @@ ddl_background_drop_indexes 0
|
||||
ddl_background_drop_tables 0
|
||||
ddl_online_create_index 0
|
||||
ddl_pending_alter_table 0
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt3 WAIT_FOR dml3_done';
|
||||
ALTER TABLE t1 ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT;
|
||||
ERROR 42000: Multiple primary key defined
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT;
|
||||
ERROR 23000: Duplicate entry '5' for key 'PRIMARY'
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c1,c22f,c4(5)),
|
||||
CHANGE c2 c22f INT, CHANGE c3 c3 TEXT NULL, CHANGE c1 c1 INT AFTER c22f,
|
||||
ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online';
|
||||
CHANGE c2 c22f INT, CHANGE c3 c3 CHAR(255) NULL, CHANGE c1 c1 INT AFTER c22f,
|
||||
ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online', LOCK=NONE;
|
||||
# session default
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt3';
|
||||
SELECT name, count FROM INFORMATION_SCHEMA.INNODB_METRICS WHERE subsystem = 'ddl';
|
||||
@ -283,6 +320,32 @@ COUNT(c22f)
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
SET @merge_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
SELECT
|
||||
(@merge_encrypt_2-@merge_encrypt_1)-
|
||||
(@merge_decrypt_2-@merge_decrypt_1) as sort_balance,
|
||||
(@rowlog_encrypt_2-@rowlog_encrypt_1)-
|
||||
(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance;
|
||||
sort_balance log_balance
|
||||
0 0
|
||||
SELECT
|
||||
@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted,
|
||||
@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted,
|
||||
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
||||
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
||||
sort_encrypted sort_decrypted log_encrypted log_decrypted
|
||||
0 0 0 0
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5));
|
||||
ERROR 23000: Duplicate entry '' for key 'PRIMARY'
|
||||
UPDATE t1 SET c3 = NULL WHERE c3 = '';
|
||||
@ -294,13 +357,13 @@ SET @@sql_mode = 'STRICT_TRANS_TABLES';
|
||||
ALTER TABLE t1 DROP COLUMN c22f, DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)),
|
||||
ALGORITHM = INPLACE;
|
||||
ERROR 22004: Invalid use of NULL value
|
||||
ALTER TABLE t1 MODIFY c3 TEXT NOT NULL;
|
||||
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL;
|
||||
ERROR 22004: Invalid use of NULL value
|
||||
SET @@sql_mode = @old_sql_mode;
|
||||
UPDATE t1 SET c3=CONCAT(c1,REPEAT('foo',c1)) WHERE c3 IS NULL;
|
||||
UPDATE t1 SET c3=LEFT(CONCAT(c1,REPEAT('foo',c1)),255) WHERE c3 IS NULL;
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created0 WAIT_FOR ins_done0';
|
||||
SET @@sql_mode = 'STRICT_TRANS_TABLES';
|
||||
ALTER TABLE t1 MODIFY c3 TEXT NOT NULL, DROP COLUMN c22f,
|
||||
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL, DROP COLUMN c22f,
|
||||
ADD COLUMN c5 CHAR(5) DEFAULT 'tired' FIRST;
|
||||
# session default
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created0';
|
||||
@ -314,7 +377,7 @@ SET @@sql_mode = @old_sql_mode;
|
||||
# session default
|
||||
ROLLBACK;
|
||||
# session con1
|
||||
ALTER TABLE t1 MODIFY c3 TEXT NOT NULL;
|
||||
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL;
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created WAIT_FOR ins_done';
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, DROP COLUMN c22f,
|
||||
ADD COLUMN c6 VARCHAR(1000) DEFAULT
|
||||
@ -361,7 +424,7 @@ Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`c22f` int(11) NOT NULL,
|
||||
`c1` int(11) NOT NULL,
|
||||
`c3` text NOT NULL,
|
||||
`c3` char(255) NOT NULL,
|
||||
`c4` varchar(6) NOT NULL DEFAULT 'Online',
|
||||
PRIMARY KEY (`c1`,`c22f`,`c4`(5))
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ROW_FORMAT=REDUNDANT
|
||||
|
@ -1,5 +1,5 @@
|
||||
--innodb-sort-buffer-size=64k
|
||||
--innodb-online-alter-log-max-size=64k
|
||||
--innodb-online-alter-log-max-size=128k
|
||||
--innodb-buffer-pool-size=5M
|
||||
--innodb-log-buffer-size=256k
|
||||
--innodb-sys-indexes
|
||||
|
@ -1,4 +1,5 @@
|
||||
--source include/innodb_page_size_small.inc
|
||||
--source include/innodb_encrypt_log.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
let $innodb_metrics_select=
|
||||
@ -200,6 +201,18 @@ EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3;
|
||||
|
||||
SHOW CREATE TABLE t1;
|
||||
|
||||
connection default;
|
||||
SET @merge_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
connection con1;
|
||||
|
||||
# Exceed the configured innodb_online_alter_log_max_size.
|
||||
# The actual limit is a multiple of innodb_sort_buf_size,
|
||||
# because that is the size of the in-memory log buffers.
|
||||
@ -223,7 +236,7 @@ SET DEBUG_SYNC = 'now WAIT_FOR c2e_created';
|
||||
# At this point, the clustered index scan must have completed,
|
||||
# but the modification log keeps accumulating due to the DEBUG_SYNC.
|
||||
eval $innodb_metrics_select;
|
||||
let $c= 2;
|
||||
let $c= 4;
|
||||
while ($c)
|
||||
{
|
||||
BEGIN;
|
||||
@ -243,6 +256,22 @@ SELECT sf.name, sf.pos FROM INFORMATION_SCHEMA.INNODB_SYS_INDEXES si
|
||||
INNER JOIN INFORMATION_SCHEMA.INNODB_SYS_FIELDS sf
|
||||
ON si.index_id = sf.index_id WHERE si.name = '?c2e';
|
||||
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
|
||||
SELECT
|
||||
(@merge_encrypt_1-@merge_encrypt_0)-
|
||||
(@merge_decrypt_1-@merge_decrypt_0) as sort_balance,
|
||||
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
||||
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
||||
|
||||
# Release con1.
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
||||
|
||||
@ -270,6 +299,19 @@ ALTER TABLE t1 COMMENT 'testing if c2e will be dropped';
|
||||
# Check that the 'zombie' index c2e was dropped.
|
||||
eval $innodb_metrics_select;
|
||||
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
|
||||
connection con1;
|
||||
# Accumulate and apply some modification log.
|
||||
SET DEBUG_SYNC = 'row_log_apply_before SIGNAL c2f_created WAIT_FOR dml3_done';
|
||||
@ -282,6 +324,9 @@ connection default;
|
||||
SET DEBUG_SYNC = 'now WAIT_FOR c2f_created';
|
||||
# Generate some log (delete-mark, delete-unmark, insert etc.)
|
||||
eval $innodb_metrics_select;
|
||||
let $c= 2;
|
||||
while ($c)
|
||||
{
|
||||
BEGIN;
|
||||
INSERT INTO t1 SELECT 320 + c1, c2, c3 FROM t1 WHERE c1 > 160;
|
||||
DELETE FROM t1 WHERE c1 > 320;
|
||||
@ -290,6 +335,8 @@ BEGIN;
|
||||
UPDATE t1 SET c2 = c2 + 1;
|
||||
DELETE FROM t1;
|
||||
ROLLBACK;
|
||||
dec $c;
|
||||
}
|
||||
eval $innodb_metrics_select;
|
||||
# Release con1.
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml3_done';
|
||||
@ -300,6 +347,34 @@ reap;
|
||||
ALTER TABLE t1 CHANGE c2 c22f INT;
|
||||
|
||||
eval $innodb_metrics_select;
|
||||
|
||||
connection default;
|
||||
|
||||
SET @merge_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
|
||||
SELECT
|
||||
(@merge_encrypt_2-@merge_encrypt_1)-
|
||||
(@merge_decrypt_2-@merge_decrypt_1) as sort_balance,
|
||||
(@rowlog_encrypt_2-@rowlog_encrypt_1)-
|
||||
(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance;
|
||||
SELECT
|
||||
@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted,
|
||||
@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted,
|
||||
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
||||
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
||||
|
||||
connection con1;
|
||||
SELECT COUNT(c22f) FROM t1;
|
||||
CHECK TABLE t1;
|
||||
|
||||
|
@ -1 +1 @@
|
||||
--innodb-sort-buffer-size=64k --innodb-online-alter-log-max-size=64k --innodb-buffer-pool-size=5M --innodb-log-buffer-size=256k
|
||||
--innodb-sort-buffer-size=64k --innodb-online-alter-log-max-size=512k --innodb-buffer-pool-size=5M --innodb-log-buffer-size=256k
|
||||
|
@ -1,4 +1,5 @@
|
||||
--source include/innodb_page_size_small.inc
|
||||
--source include/innodb_encrypt_log.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
|
||||
@ -17,7 +18,7 @@ SET GLOBAL innodb_file_per_table = on;
|
||||
# Save the initial number of concurrent sessions.
|
||||
--source include/count_sessions.inc
|
||||
|
||||
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 TEXT NOT NULL)
|
||||
CREATE TABLE t1 (c1 INT PRIMARY KEY, c2 INT NOT NULL, c3 CHAR(255) NOT NULL)
|
||||
ENGINE = InnoDB;
|
||||
INSERT INTO t1 VALUES (1,1,''), (2,2,''), (3,3,''), (4,4,''), (5,5,'');
|
||||
|
||||
@ -183,10 +184,20 @@ INSERT INTO t1 SELECT 10 + c1, c2, c3 FROM t1;
|
||||
INSERT INTO t1 SELECT 20 + c1, c2, c3 FROM t1;
|
||||
INSERT INTO t1 SELECT 40 + c1, c2, c3 FROM t1;
|
||||
# Purge may or may not have cleaned up the DELETE FROM t1 WHERE c1 = 7;
|
||||
--replace_result 81 80
|
||||
--replace_column 9 ROWS
|
||||
EXPLAIN SELECT COUNT(*) FROM t1 WHERE c2 > 3;
|
||||
ANALYZE TABLE t1;
|
||||
|
||||
SET @merge_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_0=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
|
||||
--echo # session con1
|
||||
connection con1;
|
||||
SHOW CREATE TABLE t1;
|
||||
@ -228,6 +239,22 @@ while ($c)
|
||||
# Temporary table should exist until the DDL thread notices the overflow.
|
||||
eval $innodb_metrics_select;
|
||||
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
|
||||
SELECT
|
||||
(@merge_encrypt_1-@merge_encrypt_0)-
|
||||
(@merge_decrypt_1-@merge_decrypt_0) as sort_balance,
|
||||
@merge_encrypt_1>@merge_encrypt_0, @merge_decrypt_1>@merge_decrypt_0,
|
||||
@rowlog_encrypt_1>@rowlog_encrypt_0;
|
||||
|
||||
# Release con1.
|
||||
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
||||
|
||||
@ -241,6 +268,19 @@ reap;
|
||||
# when the above error was noticed.
|
||||
eval $innodb_metrics_select;
|
||||
|
||||
SET @merge_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_1=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
|
||||
# Accumulate and apply some modification log.
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL rebuilt3 WAIT_FOR dml3_done';
|
||||
--error ER_MULTIPLE_PRI_KEY
|
||||
@ -249,8 +289,8 @@ ALTER TABLE t1 ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT;
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f), CHANGE c2 c22f INT;
|
||||
--send
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c1,c22f,c4(5)),
|
||||
CHANGE c2 c22f INT, CHANGE c3 c3 TEXT NULL, CHANGE c1 c1 INT AFTER c22f,
|
||||
ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online';
|
||||
CHANGE c2 c22f INT, CHANGE c3 c3 CHAR(255) NULL, CHANGE c1 c1 INT AFTER c22f,
|
||||
ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online', LOCK=NONE;
|
||||
|
||||
--echo # session default
|
||||
connection default;
|
||||
@ -276,6 +316,30 @@ eval $innodb_metrics_select;
|
||||
SELECT COUNT(c22f) FROM t1;
|
||||
CHECK TABLE t1;
|
||||
|
||||
SET @merge_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_encrypted');
|
||||
SET @merge_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_merge_blocks_decrypted');
|
||||
SET @rowlog_encrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
||||
SET @rowlog_decrypt_2=
|
||||
(SELECT variable_value FROM information_schema.global_status
|
||||
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_decrypted');
|
||||
|
||||
SELECT
|
||||
(@merge_encrypt_2-@merge_encrypt_1)-
|
||||
(@merge_decrypt_2-@merge_decrypt_1) as sort_balance,
|
||||
(@rowlog_encrypt_2-@rowlog_encrypt_1)-
|
||||
(@rowlog_decrypt_2-@rowlog_decrypt_1) as log_balance;
|
||||
SELECT
|
||||
@merge_encrypt_2-@merge_encrypt_1>0 as sort_encrypted,
|
||||
@merge_decrypt_2-@merge_decrypt_1>0 as sort_decrypted,
|
||||
@rowlog_encrypt_2-@rowlog_encrypt_1>0 as log_encrypted,
|
||||
@rowlog_decrypt_2-@rowlog_decrypt_1>0 as log_decrypted;
|
||||
|
||||
# Create a column prefix index.
|
||||
--error ER_DUP_ENTRY
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5));
|
||||
@ -292,15 +356,15 @@ ALTER TABLE t1 DROP COLUMN c22f, DROP PRIMARY KEY, ADD PRIMARY KEY c3p5(c3(5)),
|
||||
ALGORITHM = INPLACE;
|
||||
|
||||
--error ER_INVALID_USE_OF_NULL
|
||||
ALTER TABLE t1 MODIFY c3 TEXT NOT NULL;
|
||||
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL;
|
||||
SET @@sql_mode = @old_sql_mode;
|
||||
UPDATE t1 SET c3=CONCAT(c1,REPEAT('foo',c1)) WHERE c3 IS NULL;
|
||||
UPDATE t1 SET c3=LEFT(CONCAT(c1,REPEAT('foo',c1)),255) WHERE c3 IS NULL;
|
||||
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created0 WAIT_FOR ins_done0';
|
||||
# NULL -> NOT NULL only allowed INPLACE if strict sql_mode is on.
|
||||
SET @@sql_mode = 'STRICT_TRANS_TABLES';
|
||||
--send
|
||||
ALTER TABLE t1 MODIFY c3 TEXT NOT NULL, DROP COLUMN c22f,
|
||||
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL, DROP COLUMN c22f,
|
||||
ADD COLUMN c5 CHAR(5) DEFAULT 'tired' FIRST;
|
||||
|
||||
--echo # session default
|
||||
@ -324,7 +388,7 @@ ROLLBACK;
|
||||
|
||||
--echo # session con1
|
||||
connection con1;
|
||||
ALTER TABLE t1 MODIFY c3 TEXT NOT NULL;
|
||||
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL;
|
||||
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL c3p5_created WAIT_FOR ins_done';
|
||||
--send
|
||||
ALTER TABLE t1 DROP PRIMARY KEY, DROP COLUMN c22f,
|
||||
|
@ -4037,10 +4037,6 @@ row_merge_build_indexes(
|
||||
/* Now we have files containing index entries ready for
|
||||
sorting and inserting. */
|
||||
|
||||
DBUG_EXECUTE_IF(
|
||||
"ib_merge_wait_after_read",
|
||||
os_thread_sleep(20000000);); /* 20 sec */
|
||||
|
||||
for (i = 0; i < n_indexes; i++) {
|
||||
dict_index_t* sort_idx = indexes[i];
|
||||
|
||||
|
@ -4040,10 +4040,6 @@ row_merge_build_indexes(
|
||||
/* Now we have files containing index entries ready for
|
||||
sorting and inserting. */
|
||||
|
||||
DBUG_EXECUTE_IF(
|
||||
"ib_merge_wait_after_read",
|
||||
os_thread_sleep(20000000);); /* 20 sec */
|
||||
|
||||
for (i = 0; i < n_indexes; i++) {
|
||||
dict_index_t* sort_idx = indexes[i];
|
||||
|
||||
|
Reference in New Issue
Block a user