diff --git a/mysql-test/suite/encryption/r/innodb-checksum-algorithm.result b/mysql-test/suite/encryption/r/innodb-checksum-algorithm.result new file mode 100644 index 00000000000..09a61af2a2f --- /dev/null +++ b/mysql-test/suite/encryption/r/innodb-checksum-algorithm.result @@ -0,0 +1,741 @@ +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum."); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum."); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum."); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum."); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum."); +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum."); +set GLOBAL innodb_default_encryption_key_id=4; +create table t1(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes; +create table t2(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes; +create table t3(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no; +create table t4(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=no; +create table t5(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes page_compressed=yes; +begin; +insert into t1(b) values (repeat('secret',20)); +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t2(b) select b from t1; +insert into t3(b) select b from t1; +insert into t4(b) select b from t1; +insert into t5(b) select b from t1; +commit; +# 1 Restart mysqld --innodb-checksum-algorithm=crc32 +select count(*) from t1; +count(*) +32 +select count(*) from t2; +count(*) +32 +select count(*) from t3; +count(*) +32 +select count(*) from t4; +count(*) +32 +select count(*) from t5; +count(*) +32 +insert into t1(b) select b from t1; +insert into t2(b) select b from t1; +insert into t3(b) select b from t1; +insert into t4(b) select b from t1; +insert into t5(b) select b from t1; +# 2 Restart mysqld --innodb-checksum-algorithm=innodb +select count(*) from t1; +count(*) +64 +select count(*) from t2; +count(*) +96 +select count(*) from t3; +count(*) +96 +select count(*) from t4; +count(*) +96 +select count(*) from t5; +count(*) +96 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 3 Restart mysqld --innodb-checksum-algorithm=none +select count(*) from t1; +count(*) +128 +select count(*) from t2; +count(*) +196 +select count(*) from t3; +count(*) +196 +select count(*) from t4; +count(*) +196 +select count(*) from t5; +count(*) +196 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 4 Restart mysqld --innodb-checksum-algorithm=innodb +select count(*) from t1; +count(*) +228 +select count(*) from t2; +count(*) +296 +select count(*) from t3; +count(*) +296 +select count(*) from t4; +count(*) +296 +select count(*) from t5; +count(*) +296 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 5 Restart mysqld --innodb-checksum-algorithm=strict_innodb +select count(*) from t1; +count(*) +328 +select count(*) from t2; +count(*) +396 +select count(*) from t3; +count(*) +396 +select count(*) from t4; +count(*) +396 +select count(*) from t5; +count(*) +396 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 6 Restart mysqld --innodb-checksum-algorithm=innodb +select count(*) from t1; +count(*) +428 +select count(*) from t2; +count(*) +496 +select count(*) from t3; +count(*) +496 +select count(*) from t4; +count(*) +496 +select count(*) from t5; +count(*) +496 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 7 Restart mysqld --innodb-checksum-algorithm=strict_none +select count(*) from t1; +count(*) +528 +select count(*) from t2; +count(*) +596 +select count(*) from t3; +count(*) +596 +select count(*) from t4; +count(*) +596 +select count(*) from t5; +count(*) +596 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 8 Restart mysqld --innodb-checksum-algorithm=innodb +select count(*) from t1; +count(*) +628 +select count(*) from t2; +count(*) +696 +select count(*) from t3; +count(*) +696 +select count(*) from t4; +count(*) +696 +select count(*) from t5; +count(*) +696 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 9 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +select count(*) from t1; +count(*) +728 +select count(*) from t2; +count(*) +796 +select count(*) from t3; +count(*) +796 +select count(*) from t4; +count(*) +796 +select count(*) from t5; +count(*) +796 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 10 Restart mysqld --innodb-checksum-algorithm=innodb +select count(*) from t1; +count(*) +828 +select count(*) from t2; +count(*) +896 +select count(*) from t3; +count(*) +896 +select count(*) from t4; +count(*) +896 +select count(*) from t5; +count(*) +896 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# Restart mysqld --innodb-checksum-algorithm=crc32 +select count(*) from t1; +count(*) +928 +select count(*) from t2; +count(*) +996 +select count(*) from t3; +count(*) +996 +select count(*) from t4; +count(*) +996 +select count(*) from t5; +count(*) +996 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 11 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +select count(*) from t1; +count(*) +1028 +select count(*) from t2; +count(*) +1096 +select count(*) from t3; +count(*) +1096 +select count(*) from t4; +count(*) +1096 +select count(*) from t5; +count(*) +1096 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 12 Restart mysqld --innodb-checksum-algorithm=crc32 +select count(*) from t1; +count(*) +1128 +select count(*) from t2; +count(*) +1196 +select count(*) from t3; +count(*) +1196 +select count(*) from t4; +count(*) +1196 +select count(*) from t5; +count(*) +1196 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 13 Restart mysqld --innodb-checksum-algorithm=strict_none +select count(*) from t1; +count(*) +1228 +select count(*) from t2; +count(*) +1296 +select count(*) from t3; +count(*) +1296 +select count(*) from t4; +count(*) +1296 +select count(*) from t5; +count(*) +1296 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 14 Restart mysqld --innodb-checksum-algorithm=crc32 +select count(*) from t1; +count(*) +1328 +select count(*) from t2; +count(*) +1396 +select count(*) from t3; +count(*) +1396 +select count(*) from t4; +count(*) +1396 +select count(*) from t5; +count(*) +1396 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 15 Restart mysqld --innodb-checksum-algorithm=strict_innodb +select count(*) from t1; +count(*) +1428 +select count(*) from t2; +count(*) +1496 +select count(*) from t3; +count(*) +1496 +select count(*) from t4; +count(*) +1496 +select count(*) from t5; +count(*) +1496 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 16 Restart mysqld --innodb-checksum-algorithm=crc32 +select count(*) from t1; +count(*) +1528 +select count(*) from t2; +count(*) +1596 +select count(*) from t3; +count(*) +1596 +select count(*) from t4; +count(*) +1596 +select count(*) from t5; +count(*) +1596 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 17 Restart mysqld --innodb-checksum-algorithm=none +select count(*) from t1; +count(*) +1628 +select count(*) from t2; +count(*) +1696 +select count(*) from t3; +count(*) +1696 +select count(*) from t4; +count(*) +1696 +select count(*) from t5; +count(*) +1696 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 18 Restart mysqld --innodb-checksum-algorithm=crc32 +select count(*) from t1; +count(*) +1728 +select count(*) from t2; +count(*) +1796 +select count(*) from t3; +count(*) +1796 +select count(*) from t4; +count(*) +1796 +select count(*) from t5; +count(*) +1796 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# Restart mysqld --innodb-checksum-algorithm=strict_crc32 +select count(*) from t1; +count(*) +1828 +select count(*) from t2; +count(*) +1896 +select count(*) from t3; +count(*) +1896 +select count(*) from t4; +count(*) +1896 +select count(*) from t5; +count(*) +1896 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 19 Restart mysqld --innodb-checksum-algorithm=strict_none +select count(*) from t1; +count(*) +1928 +select count(*) from t2; +count(*) +1996 +select count(*) from t3; +count(*) +1996 +select count(*) from t4; +count(*) +1996 +select count(*) from t5; +count(*) +1996 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 20 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +select count(*) from t1; +count(*) +2028 +select count(*) from t2; +count(*) +2096 +select count(*) from t3; +count(*) +2096 +select count(*) from t4; +count(*) +2096 +select count(*) from t5; +count(*) +2096 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 21 Restart mysqld --innodb-checksum-algorithm=strict_innodb +select count(*) from t1; +count(*) +2128 +select count(*) from t2; +count(*) +2196 +select count(*) from t3; +count(*) +2196 +select count(*) from t4; +count(*) +2196 +select count(*) from t5; +count(*) +2196 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 22 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +select count(*) from t1; +count(*) +2228 +select count(*) from t2; +count(*) +2296 +select count(*) from t3; +count(*) +2296 +select count(*) from t4; +count(*) +2296 +select count(*) from t5; +count(*) +2296 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 23 Restart mysqld --innodb-checksum-algorithm=none +select count(*) from t1; +count(*) +2328 +select count(*) from t2; +count(*) +2396 +select count(*) from t3; +count(*) +2396 +select count(*) from t4; +count(*) +2396 +select count(*) from t5; +count(*) +2396 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 24 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +select count(*) from t1; +count(*) +2428 +select count(*) from t2; +count(*) +2496 +select count(*) from t3; +count(*) +2496 +select count(*) from t4; +count(*) +2496 +select count(*) from t5; +count(*) +2496 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# Restart mysqld --innodb-checksum-algorithm=strict_none +select count(*) from t1; +count(*) +2528 +select count(*) from t2; +count(*) +2596 +select count(*) from t3; +count(*) +2596 +select count(*) from t4; +count(*) +2596 +select count(*) from t5; +count(*) +2596 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 25 Restart mysqld --innodb-checksum-algorithm=none +select count(*) from t1; +count(*) +2628 +select count(*) from t2; +count(*) +2696 +select count(*) from t3; +count(*) +2696 +select count(*) from t4; +count(*) +2696 +select count(*) from t5; +count(*) +2696 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 26 Restart mysqld --innodb-checksum-algorithm=strict_none +select count(*) from t1; +count(*) +2728 +select count(*) from t2; +count(*) +2796 +select count(*) from t3; +count(*) +2796 +select count(*) from t4; +count(*) +2796 +select count(*) from t5; +count(*) +2796 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 27 Restart mysqld --innodb-checksum-algorithm=strict_innodb +select count(*) from t1; +count(*) +2828 +select count(*) from t2; +count(*) +2896 +select count(*) from t3; +count(*) +2896 +select count(*) from t4; +count(*) +2896 +select count(*) from t5; +count(*) +2896 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 28 Restart mysqld --innodb-checksum-algorithm=strict_none +select count(*) from t1; +count(*) +2928 +select count(*) from t2; +count(*) +2996 +select count(*) from t3; +count(*) +2996 +select count(*) from t4; +count(*) +2996 +select count(*) from t5; +count(*) +2996 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# Restart mysqld --innodb-checksum-algorithm=none +select count(*) from t1; +count(*) +3028 +select count(*) from t2; +count(*) +3096 +select count(*) from t3; +count(*) +3096 +select count(*) from t4; +count(*) +3096 +select count(*) from t5; +count(*) +3096 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 29 Restart mysqld --innodb-checksum-algorithm=strict_innodb +select count(*) from t1; +count(*) +3128 +select count(*) from t2; +count(*) +3196 +select count(*) from t3; +count(*) +3196 +select count(*) from t4; +count(*) +3196 +select count(*) from t5; +count(*) +3196 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +# 30 Restart mysqld --innodb-checksum-algorithm=none +select count(*) from t1; +count(*) +3228 +select count(*) from t2; +count(*) +3296 +select count(*) from t3; +count(*) +3296 +select count(*) from t4; +count(*) +3296 +select count(*) from t5; +count(*) +3296 +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; +drop table t1,t2,t3,t4,t5; diff --git a/mysql-test/suite/encryption/r/innodb-compressed-blob.result b/mysql-test/suite/encryption/r/innodb-compressed-blob.result index 43506092498..15c2a410948 100644 --- a/mysql-test/suite/encryption/r/innodb-compressed-blob.result +++ b/mysql-test/suite/encryption/r/innodb-compressed-blob.result @@ -1,7 +1,6 @@ call mtr.add_suppression("InnoDB: However key management plugin or used key_version .*"); -call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t1 cannot be decrypted."); -call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t2 cannot be decrypted."); -call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t3 cannot be decrypted."); +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[0-9]+\\] in file test/t[1-3] cannot be decrypted."); +call mtr.add_suppression("Unable to decompress space ..test.t[1-3].ibd \\[[1-9][0-9]*:[0-9]+\\]"); # Restart mysqld --file-key-management-filename=keys2.txt SET GLOBAL innodb_file_format = `Barracuda`; SET GLOBAL innodb_file_per_table = ON; diff --git a/mysql-test/suite/encryption/t/innodb-checksum-algorithm.opt b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.opt new file mode 100644 index 00000000000..8a13b909879 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.opt @@ -0,0 +1,4 @@ +--innodb_checksum_algorithm=innodb +--innodb-tablespaces-encryption +--innodb-encrypt-tables=on +--innodb-encryption-threads=4 diff --git a/mysql-test/suite/encryption/t/innodb-checksum-algorithm.test b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.test new file mode 100644 index 00000000000..baea1b8a3eb --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-checksum-algorithm.test @@ -0,0 +1,652 @@ +-- source include/have_innodb.inc +-- source include/have_file_key_management_plugin.inc + +# embedded does not support restart +-- source include/not_embedded.inc + +# +# Tests: +# +# innodb +# 1) innodb => crc32 +# 2) crc32 => innodb +# 3) innodb => none +# 4) none => innodb +# 5) innodb => strict_innodb +# 6) strict_innodb => innodb +# 7) innodb => strict_none +# 8) strict_none => innodb +# 9) innodb => strict_crc32 +# 10) strict_crc32 => innodb +# +# crc32 +# 11) crc32 => strict_crc32 +# 12) strict_crc32 => crc32 +# 13) crc32 => strict_none +# 14) strict_none => crc32 +# 15) crc32 => strict_innodb +# 16) strict_innodb => crc32 +# 17) crc32 => none +# 18) none => crc32 +# (note that innodb is handled on 1 and 2) +# +# strict_crc32 +# 19) strict_crc32 => strict_none +# 20) strict_none => strict_crc32 +# 21) strict_crc32 => strict_innodb +# 22) strict_innodb => strict_crc32 +# 23) strict_crc32 => none +# 24) none => strict_crc32 +# (note that innodb is handled on 9 and 10) +# (note that crc32 is handled on 11 and 12) +# +# strict_none +# 25) strict_none => none +# 26) none => strict_none +# 27) strict_none = strict_innodb +# 28) strict_innodb => strict_none +# (note that innodb is handled on 7 and 8) +# (note that crc32 is handled on 13 and 14) +# (note that strict_crc32 is handled 19 and 20) +# +# none +# 29) none => strict_innodb +# 30) strict_innodb => none +# (note that innodb is handled on 3 and 4) +# (note that crc32 is handled on 17 and 18) +# (note that strict_crc32 is handled on 23 and 24) +# (note that strict_none is handled on 25 and 26) +# +# strict_innodb +# (note that innodb is handled on 5 and 6) +# (note that crc32 is handled on 15 and 16) +# (note that strict_crc32 is handled on 21 and 22) +# (note that strict_none is handled on 27 and 28) +# (note that none is handled on 29 and 30) +# +--disable_warnings +SET GLOBAL innodb_file_format = `Barracuda`; +SET GLOBAL innodb_file_per_table = ON; + +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum."); + +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"innodb\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum."); + +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_crc32\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"crc32\" to silently accept such pages or rewrite all pages so that they contain \"crc32\" checksum."); + +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"none\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum."); + +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_innodb\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"innodb\" to silently accept such pages or rewrite all pages so that they contain \"innodb\" checksum."); + +call mtr.add_suppression("InnoDB: innodb_checksum_algorithm is set to \"strict_none\" but the page \\[page id: space=[0-9]+, page number=[0-9]+\\] contains a valid checksum \"crc32\". Accepting the page as valid. Change innodb_checksum_algorithm to \"none\" to silently accept such pages or rewrite all pages so that they contain \"none\" checksum."); + +--enable_warnings + +set GLOBAL innodb_default_encryption_key_id=4; +create table t1(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes; +create table t2(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes; +create table t3(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no; +create table t4(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=no; +create table t5(a int not null auto_increment primary key, b blob, index(b(10))) engine=innodb encrypted=yes page_compressed=yes; + +begin; +insert into t1(b) values (repeat('secret',20)); +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t1(b) select b from t1; +insert into t2(b) select b from t1; +insert into t3(b) select b from t1; +insert into t4(b) select b from t1; +insert into t5(b) select b from t1; +commit; + +--echo # 1 Restart mysqld --innodb-checksum-algorithm=crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1; +insert into t2(b) select b from t1; +insert into t3(b) select b from t1; +insert into t4(b) select b from t1; +insert into t5(b) select b from t1; + +--echo # 2 Restart mysqld --innodb-checksum-algorithm=innodb +-- let $restart_parameters=--innodb-checksum-algorithm=innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 3 Restart mysqld --innodb-checksum-algorithm=none +-- let $restart_parameters=--innodb-checksum-algorithm=none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 4 Restart mysqld --innodb-checksum-algorithm=innodb +-- let $restart_parameters=--innodb-checksum-algorithm=innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 5 Restart mysqld --innodb-checksum-algorithm=strict_innodb +-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 6 Restart mysqld --innodb-checksum-algorithm=innodb +-- let $restart_parameters=--innodb-checksum-algorithm=innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 7 Restart mysqld --innodb-checksum-algorithm=strict_none +-- let $restart_parameters=--innodb-checksum-algorithm=strict_none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 8 Restart mysqld --innodb-checksum-algorithm=innodb +-- let $restart_parameters=--innodb-checksum-algorithm=innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 9 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 10 Restart mysqld --innodb-checksum-algorithm=innodb +-- let $restart_parameters=--innodb-checksum-algorithm=innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # Restart mysqld --innodb-checksum-algorithm=crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 11 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 12 Restart mysqld --innodb-checksum-algorithm=crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 13 Restart mysqld --innodb-checksum-algorithm=strict_none +-- let $restart_parameters=--innodb-checksum-algorithm=strict_none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 14 Restart mysqld --innodb-checksum-algorithm=crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 15 Restart mysqld --innodb-checksum-algorithm=strict_innodb +-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 16 Restart mysqld --innodb-checksum-algorithm=crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 17 Restart mysqld --innodb-checksum-algorithm=none +-- let $restart_parameters=--innodb-checksum-algorithm=none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 18 Restart mysqld --innodb-checksum-algorithm=crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # Restart mysqld --innodb-checksum-algorithm=strict_crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 19 Restart mysqld --innodb-checksum-algorithm=strict_none +-- let $restart_parameters=--innodb-checksum-algorithm=strict_none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 20 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 21 Restart mysqld --innodb-checksum-algorithm=strict_innodb +-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 22 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 23 Restart mysqld --innodb-checksum-algorithm=none +-- let $restart_parameters=--innodb-checksum-algorithm=none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 24 Restart mysqld --innodb-checksum-algorithm=strict_crc32 +-- let $restart_parameters=--innodb-checksum-algorithm=strict_crc32 +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # Restart mysqld --innodb-checksum-algorithm=strict_none +-- let $restart_parameters=--innodb-checksum-algorithm=strict_none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 25 Restart mysqld --innodb-checksum-algorithm=none +-- let $restart_parameters=--innodb-checksum-algorithm=none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 26 Restart mysqld --innodb-checksum-algorithm=strict_none +-- let $restart_parameters=--innodb-checksum-algorithm=strict_none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 27 Restart mysqld --innodb-checksum-algorithm=strict_innodb +-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 28 Restart mysqld --innodb-checksum-algorithm=strict_none +-- let $restart_parameters=--innodb-checksum-algorithm=strict_none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # Restart mysqld --innodb-checksum-algorithm=none +-- let $restart_parameters=--innodb-checksum-algorithm=none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 29 Restart mysqld --innodb-checksum-algorithm=strict_innodb +-- let $restart_parameters=--innodb-checksum-algorithm=strict_innodb +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +--echo # 30 Restart mysqld --innodb-checksum-algorithm=none +-- let $restart_parameters=--innodb-checksum-algorithm=none +-- source include/restart_mysqld.inc + +select count(*) from t1; +select count(*) from t2; +select count(*) from t3; +select count(*) from t4; +select count(*) from t5; + +insert into t1(b) select b from t1 limit 100; +insert into t2(b) select b from t1 limit 100; +insert into t3(b) select b from t1 limit 100; +insert into t4(b) select b from t1 limit 100; +insert into t5(b) select b from t1 limit 100; + +drop table t1,t2,t3,t4,t5; + + + diff --git a/mysql-test/suite/encryption/t/innodb-compressed-blob.combinations b/mysql-test/suite/encryption/t/innodb-compressed-blob.combinations new file mode 100644 index 00000000000..e096b023b52 --- /dev/null +++ b/mysql-test/suite/encryption/t/innodb-compressed-blob.combinations @@ -0,0 +1,12 @@ +[crc32] +loose-innodb-tablespaces-encryption +loose-innodb-encrypt-tables=on +loose-innodb-encryption-threads=4 +max_allowed_packet=64K +loose-innodb-checksum-algorithm=crc32 +[none] +loose-innodb-tablespaces-encryption +loose-innodb-encrypt-tables=on +loose-innodb-encryption-threads=4 +max_allowed_packet=64K +loose-innodb-checksum-algorithm=none diff --git a/mysql-test/suite/encryption/t/innodb-compressed-blob.opt b/mysql-test/suite/encryption/t/innodb-compressed-blob.opt deleted file mode 100644 index 36dcb6c6f26..00000000000 --- a/mysql-test/suite/encryption/t/innodb-compressed-blob.opt +++ /dev/null @@ -1,4 +0,0 @@ ---innodb-tablespaces-encryption ---innodb-encrypt-tables=on ---innodb-encryption-threads=2 ---max_allowed_packet=64K diff --git a/mysql-test/suite/encryption/t/innodb-compressed-blob.test b/mysql-test/suite/encryption/t/innodb-compressed-blob.test index 4024c8fa641..cb69f22f745 100644 --- a/mysql-test/suite/encryption/t/innodb-compressed-blob.test +++ b/mysql-test/suite/encryption/t/innodb-compressed-blob.test @@ -5,10 +5,8 @@ -- source include/not_embedded.inc call mtr.add_suppression("InnoDB: However key management plugin or used key_version .*"); -call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t1 cannot be decrypted."); -call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t2 cannot be decrypted."); -call mtr.add_suppression("InnoDB: The page \[page id: space=[0-9]+, page number=[0-9]+\] in file test/t3 cannot be decrypted."); - +call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[0-9]+\\] in file test/t[1-3] cannot be decrypted."); +call mtr.add_suppression("Unable to decompress space ..test.t[1-3].ibd \\[[1-9][0-9]*:[0-9]+\\]"); --echo # Restart mysqld --file-key-management-filename=keys2.txt -- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt diff --git a/storage/innobase/buf/buf0buf.cc b/storage/innobase/buf/buf0buf.cc index 2cb2673f7fb..9b9d0b37f13 100644 --- a/storage/innobase/buf/buf0buf.cc +++ b/storage/innobase/buf/buf0buf.cc @@ -354,6 +354,15 @@ bool buf_page_decrypt_after_read(buf_page_t* bpage, fil_space_t* space) MY_ATTRIBUTE((nonnull)); +/********************************************************************//** +Mark a table with the specified space pointed by bpage->space corrupted. +Also remove the bpage from LRU list. +@param[in,out] bpage Block */ +static +void +buf_mark_space_corrupt( + buf_page_t* bpage); + /* prototypes for new functions added to ha_innodb.cc */ trx_t* innobase_get_trx(); @@ -2526,17 +2535,26 @@ buf_zip_decompress( { const byte* frame = block->page.zip.data; ulint size = page_zip_get_size(&block->page.zip); + /* Space is not found if this function is called during IMPORT */ + fil_space_t* space = fil_space_acquire_for_io(block->page.space); + const unsigned key_version = mach_read_from_4(frame + + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + fil_space_crypt_t* crypt_data = space ? space->crypt_data : NULL; + const bool encrypted = crypt_data + && crypt_data->type != CRYPT_SCHEME_UNENCRYPTED + && (!crypt_data->is_default_encryption() + || srv_encrypt_tables); ut_ad(buf_block_get_zip_size(block)); ut_a(buf_block_get_space(block) != 0); if (UNIV_UNLIKELY(check && !page_zip_verify_checksum(frame, size))) { - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: compressed page checksum mismatch" - " (space %u page %u): stored: %lu, crc32: %lu " - "innodb: %lu, none: %lu\n", + ib_logf(IB_LOG_LEVEL_ERROR, + "Compressed page checksum mismatch" + " for %s [%u:%u]: stored: " ULINTPF ", crc32: " ULINTPF + " innodb: " ULINTPF ", none: " ULINTPF ".", + space ? space->chain.start->name : "N/A", block->page.space, block->page.offset, mach_read_from_4(frame + FIL_PAGE_SPACE_OR_CHKSUM), page_zip_calc_checksum(frame, size, @@ -2545,22 +2563,28 @@ buf_zip_decompress( SRV_CHECKSUM_ALGORITHM_INNODB), page_zip_calc_checksum(frame, size, SRV_CHECKSUM_ALGORITHM_NONE)); - return(FALSE); + goto err_exit; } switch (fil_page_get_type(frame)) { - case FIL_PAGE_INDEX: + case FIL_PAGE_INDEX: { + if (page_zip_decompress(&block->page.zip, block->frame, TRUE)) { + if (space) { + fil_space_release_for_io(space); + } return(TRUE); } - fprintf(stderr, - "InnoDB: unable to decompress space %u page %u\n", + ib_logf(IB_LOG_LEVEL_ERROR, + "Unable to decompress space %s [%u:%u]", + space ? space->chain.start->name : "N/A", block->page.space, block->page.offset); - return(FALSE); + goto err_exit; + } case FIL_PAGE_TYPE_ALLOCATED: case FIL_PAGE_INODE: case FIL_PAGE_IBUF_BITMAP: @@ -2571,14 +2595,36 @@ buf_zip_decompress( /* Copy to uncompressed storage. */ memcpy(block->frame, frame, buf_block_get_zip_size(block)); + + if (space) { + fil_space_release_for_io(space); + } + return(TRUE); } - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: unknown compressed page" - " type %lu\n", - fil_page_get_type(frame)); + ib_logf(IB_LOG_LEVEL_ERROR, + "Unknown compressed page in %s [%u:%u]" + " type %s [" ULINTPF "].", + space ? space->chain.start->name : "N/A", + block->page.space, block->page.offset, + fil_get_page_type_name(fil_page_get_type(frame)), fil_page_get_type(frame)); + +err_exit: + if (encrypted) { + ib_logf(IB_LOG_LEVEL_INFO, + "Row compressed page could be encrypted with key_version %u.", + key_version); + block->page.encrypted = true; + dict_set_encrypted_by_space(block->page.space); + } else { + dict_set_corrupted_by_space(block->page.space); + } + + if (space) { + fil_space_release_for_io(space); + } + return(FALSE); } @@ -3031,9 +3077,9 @@ loop: } ib_logf(IB_LOG_LEVEL_FATAL, "Unable" - " to read tablespace %lu page no" - " %lu into the buffer pool after" - " %lu attempts" + " to read tablespace " ULINTPF " page no " + ULINTPF " into the buffer pool after " + ULINTPF " attempts." " The most probable cause" " of this error may be that the" " table has been corrupted." @@ -3232,12 +3278,21 @@ got_block: /* Decompress the page while not holding buf_pool->mutex or block->mutex. */ - /* Page checksum verification is already done when - the page is read from disk. Hence page checksum - verification is not necessary when decompressing the page. */ { - bool success = buf_zip_decompress(block, FALSE); - ut_a(success); + bool success = buf_zip_decompress(block, TRUE); + + if (!success) { + buf_pool_mutex_enter(buf_pool); + buf_block_mutex_enter(fix_block); + buf_block_set_io_fix(fix_block, BUF_IO_NONE); + buf_block_mutex_exit(fix_block); + + --buf_pool->n_pend_unzip; + buf_block_unfix(fix_block); + buf_pool_mutex_exit(buf_pool); + rw_lock_x_unlock(&fix_block->lock); + return NULL; + } } if (!recv_no_ibuf_operations) { diff --git a/storage/innobase/fil/fil0crypt.cc b/storage/innobase/fil/fil0crypt.cc index a6d85fb89bf..2131a936656 100644 --- a/storage/innobase/fil/fil0crypt.cc +++ b/storage/innobase/fil/fil0crypt.cc @@ -887,7 +887,7 @@ fil_space_decrypt( Calculate post encryption checksum @param[in] zip_size zip_size or 0 @param[in] dst_frame Block where checksum is calculated -@return page checksum or BUF_NO_CHECKSUM_MAGIC +@return page checksum not needed. */ UNIV_INTERN ulint @@ -896,30 +896,13 @@ fil_crypt_calculate_checksum( const byte* dst_frame) { ib_uint32_t checksum = 0; - srv_checksum_algorithm_t algorithm = - static_cast(srv_checksum_algorithm); + /* For encrypted tables we use only crc32 and strict_crc32 */ if (zip_size == 0) { - switch (algorithm) { - case SRV_CHECKSUM_ALGORITHM_CRC32: - case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: - checksum = buf_calc_page_crc32(dst_frame); - break; - case SRV_CHECKSUM_ALGORITHM_INNODB: - case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: - checksum = (ib_uint32_t) buf_calc_page_new_checksum( - dst_frame); - break; - case SRV_CHECKSUM_ALGORITHM_NONE: - case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: - checksum = BUF_NO_CHECKSUM_MAGIC; - break; - /* no default so the compiler will emit a warning - * if new enum is added and not handled here */ - } + checksum = buf_calc_page_crc32(dst_frame); } else { checksum = page_zip_calc_checksum(dst_frame, zip_size, - algorithm); + SRV_CHECKSUM_ALGORITHM_CRC32); } return checksum; @@ -953,14 +936,6 @@ fil_space_verify_crypt_checksum( return(false); } - srv_checksum_algorithm_t algorithm = - static_cast(srv_checksum_algorithm); - - /* If no checksum is used, can't continue checking. */ - if (algorithm == SRV_CHECKSUM_ALGORITHM_NONE) { - return(true); - } - /* Read stored post encryption checksum. */ ib_uint32_t checksum = mach_read_from_4( page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION + 4); @@ -1044,7 +1019,6 @@ fil_space_verify_crypt_checksum( checksum2 = mach_read_from_4( page + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM); valid = (buf_page_is_checksum_valid_crc32(page,checksum1,checksum2) - || buf_page_is_checksum_valid_none(page,checksum1,checksum2) || buf_page_is_checksum_valid_innodb(page,checksum1, checksum2)); } diff --git a/storage/xtradb/buf/buf0buf.cc b/storage/xtradb/buf/buf0buf.cc index 7c30ff92b69..da4ab059d07 100644 --- a/storage/xtradb/buf/buf0buf.cc +++ b/storage/xtradb/buf/buf0buf.cc @@ -86,6 +86,15 @@ bool buf_page_decrypt_after_read(buf_page_t* bpage, fil_space_t* space) MY_ATTRIBUTE((nonnull)); +/********************************************************************//** +Mark a table with the specified space pointed by bpage->space corrupted. +Also remove the bpage from LRU list. +@param[in,out] bpage Block */ +static +void +buf_mark_space_corrupt( + buf_page_t* bpage); + /* prototypes for new functions added to ha_innodb.cc */ trx_t* innobase_get_trx(); @@ -2538,17 +2547,26 @@ buf_zip_decompress( { const byte* frame = block->page.zip.data; ulint size = page_zip_get_size(&block->page.zip); + /* Space is not found if this function is called during IMPORT */ + fil_space_t* space = fil_space_acquire_for_io(block->page.space); + const unsigned key_version = mach_read_from_4(frame + + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION); + fil_space_crypt_t* crypt_data = space ? space->crypt_data : NULL; + const bool encrypted = crypt_data + && crypt_data->type != CRYPT_SCHEME_UNENCRYPTED + && (!crypt_data->is_default_encryption() + || srv_encrypt_tables); ut_ad(buf_block_get_zip_size(block)); ut_a(buf_block_get_space(block) != 0); if (UNIV_UNLIKELY(check && !page_zip_verify_checksum(frame, size))) { - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: compressed page checksum mismatch" - " (space %u page %u): stored: %lu, crc32: %lu " - "innodb: %lu, none: %lu\n", + ib_logf(IB_LOG_LEVEL_ERROR, + "Compressed page checksum mismatch" + " for %s [%u:%u]: stored: " ULINTPF ", crc32: " ULINTPF + " innodb: " ULINTPF ", none: " ULINTPF ".", + space ? space->chain.start->name : "N/A", block->page.space, block->page.offset, mach_read_from_4(frame + FIL_PAGE_SPACE_OR_CHKSUM), page_zip_calc_checksum(frame, size, @@ -2557,22 +2575,28 @@ buf_zip_decompress( SRV_CHECKSUM_ALGORITHM_INNODB), page_zip_calc_checksum(frame, size, SRV_CHECKSUM_ALGORITHM_NONE)); - return(FALSE); + goto err_exit; } switch (fil_page_get_type(frame)) { - case FIL_PAGE_INDEX: + case FIL_PAGE_INDEX: { + if (page_zip_decompress(&block->page.zip, block->frame, TRUE)) { + if (space) { + fil_space_release_for_io(space); + } return(TRUE); } - fprintf(stderr, - "InnoDB: unable to decompress space %u page %u\n", + ib_logf(IB_LOG_LEVEL_ERROR, + "Unable to decompress space %s [%u:%u]", + space ? space->chain.start->name : "N/A", block->page.space, block->page.offset); - return(FALSE); + goto err_exit; + } case FIL_PAGE_TYPE_ALLOCATED: case FIL_PAGE_INODE: case FIL_PAGE_IBUF_BITMAP: @@ -2583,14 +2607,36 @@ buf_zip_decompress( /* Copy to uncompressed storage. */ memcpy(block->frame, frame, buf_block_get_zip_size(block)); + + if (space) { + fil_space_release_for_io(space); + } + return(TRUE); } - ut_print_timestamp(stderr); - fprintf(stderr, - " InnoDB: unknown compressed page" - " type %lu\n", - fil_page_get_type(frame)); + ib_logf(IB_LOG_LEVEL_ERROR, + "Unknown compressed page in %s [%u:%u]" + " type %s [" ULINTPF "].", + space ? space->chain.start->name : "N/A", + block->page.space, block->page.offset, + fil_get_page_type_name(fil_page_get_type(frame)), fil_page_get_type(frame)); + +err_exit: + if (encrypted) { + ib_logf(IB_LOG_LEVEL_INFO, + "Row compressed page could be encrypted with key_version %u.", + key_version); + block->page.encrypted = true; + dict_set_encrypted_by_space(block->page.space); + } else { + dict_set_corrupted_by_space(block->page.space); + } + + if (space) { + fil_space_release_for_io(space); + } + return(FALSE); } @@ -3073,9 +3119,9 @@ loop: } ib_logf(IB_LOG_LEVEL_FATAL, "Unable" - " to read tablespace %lu page no" - " %lu into the buffer pool after" - " %lu attempts" + " to read tablespace " ULINTPF " page no " + ULINTPF " into the buffer pool after " + ULINTPF " attempts." " The most probable cause" " of this error may be that the" " table has been corrupted." @@ -3288,12 +3334,21 @@ got_block: /* Decompress the page while not holding any buf_pool or block->mutex. */ - /* Page checksum verification is already done when - the page is read from disk. Hence page checksum - verification is not necessary when decompressing the page. */ { - bool success = buf_zip_decompress(block, FALSE); - ut_a(success); + bool success = buf_zip_decompress(block, TRUE); + + if (!success) { + buf_block_mutex_enter(fix_block); + buf_block_set_io_fix(fix_block, BUF_IO_NONE); + buf_block_mutex_exit(fix_block); + + os_atomic_decrement_ulint(&buf_pool->n_pend_unzip, 1); + rw_lock_x_unlock(&fix_block->lock); + mutex_enter(&buf_pool->LRU_list_mutex); + buf_block_unfix(fix_block); + mutex_exit(&buf_pool->LRU_list_mutex); + return NULL; + } } if (!recv_no_ibuf_operations) { diff --git a/storage/xtradb/fil/fil0crypt.cc b/storage/xtradb/fil/fil0crypt.cc index da78d4dd85d..21c1e3b730e 100644 --- a/storage/xtradb/fil/fil0crypt.cc +++ b/storage/xtradb/fil/fil0crypt.cc @@ -887,7 +887,7 @@ fil_space_decrypt( Calculate post encryption checksum @param[in] zip_size zip_size or 0 @param[in] dst_frame Block where checksum is calculated -@return page checksum or BUF_NO_CHECKSUM_MAGIC +@return page checksum not needed. */ UNIV_INTERN ulint @@ -896,30 +896,13 @@ fil_crypt_calculate_checksum( const byte* dst_frame) { ib_uint32_t checksum = 0; - srv_checksum_algorithm_t algorithm = - static_cast(srv_checksum_algorithm); + /* For encrypted tables we use only crc32 and strict_crc32 */ if (zip_size == 0) { - switch (algorithm) { - case SRV_CHECKSUM_ALGORITHM_CRC32: - case SRV_CHECKSUM_ALGORITHM_STRICT_CRC32: - checksum = buf_calc_page_crc32(dst_frame); - break; - case SRV_CHECKSUM_ALGORITHM_INNODB: - case SRV_CHECKSUM_ALGORITHM_STRICT_INNODB: - checksum = (ib_uint32_t) buf_calc_page_new_checksum( - dst_frame); - break; - case SRV_CHECKSUM_ALGORITHM_NONE: - case SRV_CHECKSUM_ALGORITHM_STRICT_NONE: - checksum = BUF_NO_CHECKSUM_MAGIC; - break; - /* no default so the compiler will emit a warning - * if new enum is added and not handled here */ - } + checksum = buf_calc_page_crc32(dst_frame); } else { checksum = page_zip_calc_checksum(dst_frame, zip_size, - algorithm); + SRV_CHECKSUM_ALGORITHM_CRC32); } return checksum; @@ -953,14 +936,6 @@ fil_space_verify_crypt_checksum( return(false); } - srv_checksum_algorithm_t algorithm = - static_cast(srv_checksum_algorithm); - - /* If no checksum is used, can't continue checking. */ - if (algorithm == SRV_CHECKSUM_ALGORITHM_NONE) { - return(true); - } - /* Read stored post encryption checksum. */ ib_uint32_t checksum = mach_read_from_4( page + FIL_PAGE_FILE_FLUSH_LSN_OR_KEY_VERSION + 4); @@ -1044,7 +1019,6 @@ fil_space_verify_crypt_checksum( checksum1 = mach_read_from_4( page + UNIV_PAGE_SIZE - FIL_PAGE_END_LSN_OLD_CHKSUM); valid = (buf_page_is_checksum_valid_crc32(page,checksum1,checksum2) - || buf_page_is_checksum_valid_none(page,checksum1,checksum2) || buf_page_is_checksum_valid_innodb(page,checksum1, checksum2)); }