41 changed files with 584 additions and 340 deletions
-
108.gitlab-ci.yml
-
5CMakeLists.txt
-
6cmake/install_macros.cmake
-
5cmake/systemd.cmake
-
4extra/mariabackup/backup_copy.cc
-
11extra/mariabackup/changed_page_bitmap.cc
-
6extra/mariabackup/fil_cur.cc
-
5extra/mariabackup/xtrabackup.cc
-
11include/CMakeLists.txt
-
10man/CMakeLists.txt
-
32mysql-test/suite/encryption/r/encrypt_and_grep,undo3.rdiff
-
32mysql-test/suite/encryption/r/innodb-remove-encryption,undo3.rdiff
-
62mysql-test/suite/encryption/r/innodb_encrypt_freed,undo3.rdiff
-
52mysql-test/suite/encryption/r/innodb_encrypt_key_rotation_age,undo3.rdiff
-
8mysql-test/suite/encryption/r/innodb_encrypt_log_corruption.result
-
3mysql-test/suite/encryption/t/debug_key_management.test
-
4mysql-test/suite/encryption/t/encrypt_and_grep.test
-
3mysql-test/suite/encryption/t/innodb-remove-encryption.test
-
11mysql-test/suite/encryption/t/innodb_encrypt_freed.test
-
9mysql-test/suite/encryption/t/innodb_encrypt_key_rotation_age.test
-
2mysql-test/suite/encryption/t/innodb_first_page.test
-
8mysql-test/suite/innodb/r/log_corruption.result
-
16mysql-test/suite/innodb/r/log_upgrade.result
-
36mysql-test/suite/innodb/t/log_corruption.test
-
120mysql-test/suite/innodb/t/log_upgrade.test
-
4sql/CMakeLists.txt
-
6storage/innobase/buf/buf0dblwr.cc
-
5storage/innobase/fil/fil0fil.cc
-
5storage/innobase/fsp/fsp0file.cc
-
9storage/innobase/handler/i_s.cc
-
9storage/innobase/include/fil0fil.h
-
65storage/innobase/include/os0file.h
-
46storage/innobase/include/os0file.inl
-
3storage/innobase/log/log0log.cc
-
2storage/innobase/log/log0recv.cc
-
121storage/innobase/os/os0file.cc
-
37storage/innobase/row/row0import.cc
-
12storage/innobase/row/row0log.cc
-
14storage/innobase/row/row0merge.cc
-
3storage/innobase/srv/srv0start.cc
-
14support-files/CMakeLists.txt
@ -0,0 +1,32 @@ |
|||
--- encrypt_and_grep.result 2022-09-02 22:36:21.669650278 +0530 |
|||
+++ encrypt_and_grep.reject 2022-11-29 19:01:22.080027528 +0530 |
|||
@@ -14,6 +14,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -35,6 +38,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -62,6 +68,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
@ -0,0 +1,32 @@ |
|||
--- innodb-remove-encryption.result 2022-09-02 20:44:59.960430396 +0530 |
|||
+++ innodb-remove-encryption,undo3.reject 2022-11-29 19:02:24.813094277 +0530 |
|||
@@ -13,6 +13,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -24,6 +27,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -36,6 +42,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
@ -0,0 +1,62 @@ |
|||
--- innodb_encrypt_freed.result 2021-03-23 15:44:14.466377983 +0530 |
|||
+++ innodb_encrypt_freed,undo3.reject 2022-11-29 19:04:24.987010571 +0530 |
|||
@@ -14,6 +14,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -29,6 +32,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -40,6 +46,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -55,6 +64,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -70,6 +82,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -87,6 +102,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
@ -0,0 +1,52 @@ |
|||
--- innodb_encrypt_key_rotation_age.result 2022-06-02 16:15:08.395122720 +0530 |
|||
+++ innodb_encrypt_key_rotation_age,undo3.reject 2022-11-29 19:06:07.964542115 +0530 |
|||
@@ -12,6 +12,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -27,6 +30,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -39,6 +45,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION = 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -59,6 +68,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
|||
@@ -71,6 +83,9 @@ |
|||
SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLESPACES_ENCRYPTION WHERE MIN_KEY_VERSION <> 0; |
|||
NAME |
|||
innodb_system |
|||
+innodb_undo001 |
|||
+innodb_undo002 |
|||
+innodb_undo003 |
|||
mysql/innodb_index_stats |
|||
mysql/innodb_table_stats |
|||
mysql/transaction_registry |
@ -0,0 +1,16 @@ |
|||
call mtr.add_suppression("InnoDB: The change buffer is corrupted"); |
|||
# |
|||
# MDEV-24412 InnoDB: Upgrade after a crash is not supported |
|||
# |
|||
# restart: --innodb-data-home-dir=MYSQLTEST_VARDIR/tmp/log_upgrade --innodb-log-group-home-dir=MYSQLTEST_VARDIR/tmp/log_upgrade --innodb-force-recovery=5 --innodb-log-file-size=4m |
|||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
COUNT(*) |
|||
1 |
|||
FOUND 1 /InnoDB: Upgrading redo log:/ in mysqld.1.err |
|||
ib_buffer_pool |
|||
ib_logfile0 |
|||
ibdata1 |
|||
# restart |
|||
# End of 10.5 tests |
@ -0,0 +1,120 @@ |
|||
--source include/have_innodb.inc |
|||
--source include/have_innodb_16k.inc |
|||
# Some operating systems or file systems do not support sparse files. |
|||
# For example, tmpfs on FreeBSD does not support them. |
|||
# On Microsoft Windows, sparse files have to be created in a special way. |
|||
--source include/big_test.inc |
|||
# include/shutdown_mysqld.inc does not work in ./mtr --embedded |
|||
--source include/not_embedded.inc |
|||
|
|||
call mtr.add_suppression("InnoDB: The change buffer is corrupted"); |
|||
|
|||
--source include/shutdown_mysqld.inc |
|||
|
|||
let bugdir= $MYSQLTEST_VARDIR/tmp/log_upgrade; |
|||
--mkdir $bugdir |
|||
--let SEARCH_FILE = $MYSQLTEST_VARDIR/log/mysqld.1.err |
|||
|
|||
--let $dirs= --innodb-data-home-dir=$bugdir --innodb-log-group-home-dir=$bugdir |
|||
|
|||
--echo # |
|||
--echo # MDEV-24412 InnoDB: Upgrade after a crash is not supported |
|||
--echo # |
|||
|
|||
perl; |
|||
do "$ENV{MTR_SUITE_DIR}/../innodb/include/crc32.pl"; |
|||
my $polynomial = 0x82f63b78; # CRC-32C |
|||
|
|||
# Create a dummy system tablespace file using the default innodb_page_size=16k |
|||
die unless open OUT, ">", "$ENV{bugdir}/ibdata1"; |
|||
binmode OUT; |
|||
|
|||
# We calculate innodb_checksum_algorithm=crc32 for the pages. |
|||
# The following bytes are excluded: |
|||
# bytes 0..3 (the checksum is stored there) |
|||
# bytes 26..37 (encryption key version, post-encryption checksum, tablespace id) |
|||
# bytes $page_size-8..$page_size-1 (checksum, LSB of FIL_PAGE_LSN) |
|||
|
|||
# Tablespace header page with valid FSP_SIZE=768 pages. |
|||
# Also, write a dummy FSEG_MAGIC_N at offset 60 to keep fseg_inode_try_get() |
|||
# happy when fseg_n_reserved_pages() is following an invalid pointer |
|||
# from the all-zero change buffer header page (page 3). |
|||
## FIL_PAGE_OFFSET |
|||
my $head = pack("Nx[18]", 0); |
|||
## FSP_PAGE_SIZE, # FSEG_MAGIC_N |
|||
my $body = pack("x[8]Nx[10]Nx[16312]", 768, 97937874); |
|||
my $ck = mycrc32($head, 0, $polynomial) ^ mycrc32($body, 0, $polynomial); |
|||
print OUT pack("N",$ck).$head.pack("x[12]").$body.pack("Nx[4]",$ck); |
|||
# Dummy pages 1..6. |
|||
print OUT chr(0) x (6 * 16384); |
|||
# Dictionary header page (page 7). |
|||
## FIL_PAGE_OFFSET |
|||
$head = pack("Nx[18]", 7); |
|||
## DICT_HDR_TABLES,DICT_HDR_INDEXES |
|||
$body = pack("x[32]Nx[8]Nx[16290]", 8, 9); |
|||
$ck = mycrc32($head, 0, $polynomial) ^ mycrc32($body, 0, $polynomial); |
|||
print OUT pack("N",$ck).$head.pack("x[12]").$body.pack("Nx[4]",$ck); |
|||
|
|||
# Empty SYS_TABLES page (page 8). |
|||
## FIL_PAGE_OFFSET, FIL_PAGE_PREV, FIL_PAGE_NEXT, FIL_PAGE_TYPE |
|||
$head = pack("NNNx[8]n", 8, ~0, ~0, 17855); |
|||
## PAGE_N_DIR_SLOTS, PAGE_HEAP_TOP, PAGE_INDEX_ID == DICT_TABLES_ID |
|||
$body = pack("nnx[31]Cx[20]", 2, 124, 1); |
|||
$body .= pack("nxnn", 0x801, 3, 116) . "infimum"; |
|||
$body .= pack("xnxnxx", 0x901, 0x803) . "supremum"; |
|||
$body .= pack("x[16248]nn", 116, 101); |
|||
$ck = mycrc32($head, 0, $polynomial) ^ mycrc32($body, 0, $polynomial); |
|||
print OUT pack("N",$ck).$head.pack("x[12]").$body.pack("Nx[4]",$ck); |
|||
|
|||
# Empty SYS_INDEXES page (page 9). |
|||
## FIL_PAGE_OFFSET, FIL_PAGE_PREV, FIL_PAGE_NEXT, FIL_PAGE_TYPE |
|||
$head = pack("NNNx[8]n", 9, ~0, ~0, 17855); |
|||
## PAGE_N_DIR_SLOTS, PAGE_HEAP_TOP, PAGE_INDEX_ID == DICT_INDEXES_ID |
|||
$body = pack("nnx[31]Cx[20]", 2, 124, 3); |
|||
$body .= pack("nxnn", 0x801, 3, 116) . "infimum"; |
|||
$body .= pack("xnxnxx", 0x901, 0x803) . "supremum"; |
|||
$body .= pack("x[16248]nn", 116, 101); |
|||
$ck = mycrc32($head, 0, $polynomial) ^ mycrc32($body, 0, $polynomial); |
|||
print OUT pack("N",$ck).$head.pack("x[12]").$body.pack("Nx[4]",$ck); |
|||
|
|||
die unless seek(OUT, 768 * 16384 - 1, 0); |
|||
print OUT chr(0); |
|||
close OUT or die; |
|||
|
|||
die unless open OUT, ">", "$ENV{bugdir}/ib_logfile0"; |
|||
binmode OUT; |
|||
$_= pack("Nx[5]nx[5]", 1, 0x1286) . "BogoDB 4.3.2.1" . chr(0) x 478; |
|||
print OUT $_, pack("N", mycrc32($_, 0, $polynomial)); |
|||
# checkpoint page 1 and all-zero checkpoint 2 |
|||
$_= pack("x[13]nCNNx[484]", 0x1286, 12, 2, 0x80c); |
|||
print OUT $_, pack("N", mycrc32($_, 0, $polynomial)); |
|||
die unless seek(OUT, 0x1FFFFFFFF, 0); |
|||
print OUT chr(0); |
|||
close OUT or die; |
|||
die unless open OUT, ">", "$ENV{bugdir}/ib_logfile1"; |
|||
binmode OUT; |
|||
die unless seek(OUT, 0x800, 0); # the first 2048 bytes are unused! |
|||
$_= pack("Nnnx[500]", 0x80000944, 12, 12); |
|||
print OUT $_, pack("N", mycrc32($_, 0, $polynomial)); |
|||
die unless seek(OUT, 0x1FFFFFFFF, 0); |
|||
print OUT chr(0); |
|||
close OUT or die; |
|||
EOF |
|||
|
|||
--let $restart_parameters= $dirs --innodb-force-recovery=5 --innodb-log-file-size=4m |
|||
--source include/start_mysqld.inc |
|||
SELECT COUNT(*) FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
--source include/shutdown_mysqld.inc |
|||
--let SEARCH_PATTERN= InnoDB: Upgrading redo log: |
|||
--source include/search_pattern_in_file.inc |
|||
--let $restart_parameters= $dirs |
|||
|
|||
--list_files $bugdir |
|||
--remove_files_wildcard $bugdir |
|||
--rmdir $bugdir |
|||
--let $restart_parameters= |
|||
--source include/start_mysqld.inc |
|||
|
|||
--echo # End of 10.5 tests |
Write
Preview
Loading…
Cancel
Save
Reference in new issue