Browse Source
MDEV-11782 WIP: Clean up the code, and add a test.
MDEV-11782 WIP: Clean up the code, and add a test.
LOG_CHECKPOINT_ARRAY_END, LOG_CHECKPOINT_SIZE: Remove. Change some error messages to refer to MariaDB 10.2.2 instead of MySQL 5.7.9. recv_find_max_checkpoint_0(): Do not abort when decrypting one of the checkpoint pages fails.pull/303/head
8 changed files with 149 additions and 39 deletions
-
97mysql-test/suite/encryption/r/innodb_encrypt_log_corruption.result
-
5mysql-test/suite/encryption/t/innodb_encrypt_log_corruption.opt
-
14mysql-test/suite/encryption/t/innodb_encrypt_log_corruption.test
-
17mysql-test/suite/innodb/r/log_corruption.result
-
25mysql-test/suite/innodb/t/log_corruption.test
-
12storage/innobase/include/log0log.h
-
3storage/innobase/log/log0log.cc
-
15storage/innobase/log/log0recv.cc
@ -0,0 +1,97 @@ |
|||
# redo log from before MariaDB 10.2.2/MySQL 5.7.9 |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Upgrade after a crash is not supported. This redo log was created before MariaDB 10\.2\.2\./ in mysqld.1.err |
|||
# redo log from before MariaDB 10.2.2, with corrupted log checkpoint |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Upgrade after a crash is not supported. This redo log was created before MariaDB 10\.2\.2, and we did not find a valid checkpoint/ in mysqld.1.err |
|||
FOUND /Plugin 'InnoDB' registration as a STORAGE ENGINE failed/ in mysqld.1.err |
|||
# redo log from before MariaDB 10.2.2, with corrupted log block |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Upgrade after a crash is not supported. This redo log was created before MariaDB 10\.2\.2, and it appears corrupted/ in mysqld.1.err |
|||
# redo log from "after" MariaDB 10.2.2, but with invalid header checksum |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Invalid redo log header checksum/ in mysqld.1.err |
|||
# distant future redo log format, with valid header checksum |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Unsupported redo log format. The redo log was created with malicious intentions, or perhaps\. Please follow the instructions at http://dev.mysql.com/doc/refman/5.7/en/upgrading-downgrading.html/ in mysqld.1.err |
|||
# valid header, but old-format checkpoint blocks |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: No valid checkpoint found .corrupted redo log/ in mysqld.1.err |
|||
# valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2, invalid block checksum |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Invalid log block checksum. block: 2372 checkpoint no: 1 expected: 3362026715 found: 144444122/ in mysqld.1.err |
|||
FOUND /InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 1213964 and the end 1213952\./ in mysqld.1.err |
|||
# --innodb-force-recovery=6 (skip the entire redo log) |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
InnoDB YES Supports transactions, row-level locking, foreign keys and encryption for tables YES YES YES |
|||
FOUND /\[Note\] InnoDB: .* started; log sequence number 0/ in mysqld.1.err |
|||
# valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2, invalid block number |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Ignoring the redo log due to missing MLOG_CHECKPOINT between the checkpoint 1213964 and the end 1213952\./ in mysqld.1.err |
|||
# --innodb-force-recovery=6 (skip the entire redo log) |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
InnoDB YES Supports transactions, row-level locking, foreign keys and encryption for tables YES YES YES |
|||
# Test a corrupted MLOG_FILE_NAME record. |
|||
# valid header, valid checkpoint 1, all-zero (invalid) checkpoint 2 |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Log scan progressed past the checkpoint lsn 1213964/ in mysqld.1.err |
|||
FOUND /InnoDB: ############### CORRUPT LOG RECORD FOUND ##################/ in mysqld.1.err |
|||
FOUND /InnoDB: Log record type 55, page 151:488\. Log parsing proceeded successfully up to 1213973\. Previous log record type 56, is multi 0 Recv offset 9, prev 0/ in mysqld.1.err |
|||
FOUND /len 22. hex 38000000000012860cb7809781e80006626f67757300. asc 8 bogus / in mysqld.1.err |
|||
FOUND /InnoDB: Set innodb_force_recovery to ignore this error/ in mysqld.1.err |
|||
# Test a corrupted MLOG_FILE_NAME record. |
|||
# valid header, invalid checkpoint 1, valid checkpoint 2, invalid block |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /InnoDB: Invalid log block checksum. block: 2372 checkpoint no: 1 expected: 2454333373 found: 150151/ in mysqld.1.err |
|||
# valid header, invalid checkpoint 1, valid checkpoint 2, invalid log record |
|||
SELECT * FROM INFORMATION_SCHEMA.ENGINES |
|||
WHERE engine = 'innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS |
|||
FOUND /len 22; hex 38000000000012860cb7809781e800066269676f7400; asc 8 bigot ;/ in mysqld.1.err |
|||
# Minimal MariaDB 10.1.21 encrypted redo log |
|||
# FIXME: Upgrade from a clean encrypted redo log should actually work! |
|||
SELECT COUNT(*) `1` FROM INFORMATION_SCHEMA.ENGINES WHERE engine='innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
1 |
|||
0 |
|||
ib_buffer_pool |
|||
ib_logfile0 |
|||
ib_logfile1 |
|||
ibdata1 |
@ -0,0 +1,5 @@ |
|||
--innodb-encrypt-log=ON |
|||
--plugin-load-add=$FILE_KEY_MANAGEMENT_SO |
|||
--loose-file-key-management |
|||
--loose-file-key-management-filename=$MYSQL_TEST_DIR/std_data/logkey.txt |
|||
--file-key-management-encryption-algorithm=aes_cbc |
@ -0,0 +1,14 @@ |
|||
--let $no_cleanup=1 |
|||
--source ../../innodb/t/log_corruption.test |
|||
|
|||
--echo # FIXME: Upgrade from a clean encrypted redo log should actually work! |
|||
|
|||
SELECT COUNT(*) `1` FROM INFORMATION_SCHEMA.ENGINES WHERE engine='innodb' |
|||
AND support IN ('YES', 'DEFAULT', 'ENABLED'); |
|||
|
|||
--let $restart_parameters= |
|||
--source include/restart_mysqld.inc |
|||
|
|||
--list_files $bugdir |
|||
--remove_files_wildcard $bugdir |
|||
--rmdir $bugdir |
Write
Preview
Loading…
Cancel
Save
Reference in new issue