mirror of
https://github.com/MariaDB/server.git
synced 2025-07-23 08:45:18 +03:00
If InnoDB crash recovery was needed, the InnoDB function srv_start() would invoke extra validation, reading something from every InnoDB data file. This should be unnecessary now that MDEV-14717 made RENAME operations crash-safe inside InnoDB (which can be disabled in MariaDB 10.2 by setting innodb_safe_truncate=OFF). dict_check_sys_tables(): Skip tables that would be dropped by row_mysql_drop_garbage_tables(). Perform extra validation only if innodb_safe_truncate=OFF, innodb_force_recovery=0 and crash recovery was needed. dict_load_table_one(): Validate the root page of the table. In this way, we can deny access to corrupted or mismatching tables not only after crash recovery, but also after a clean shutdown.
68 lines
2.6 KiB
Plaintext
68 lines
2.6 KiB
Plaintext
call mtr.add_suppression("Plugin 'file_key_management' init function returned error");
|
|
call mtr.add_suppression("Plugin 'file_key_management' registration.*failed");
|
|
call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[12]\\.ibd' cannot be decrypted\\.");
|
|
call mtr.add_suppression("failed to read or decrypt \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\]");
|
|
call mtr.add_suppression("InnoDB: Encrypted page \\[page id: space=[1-9][0-9]*, page number=3\\] in file .*test.t1.ibd looks corrupted; key_version=1");
|
|
call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` is corrupted");
|
|
call mtr.add_suppression("File '.*mysql-test.std_data.keysbad3\\.txt' not found");
|
|
# Start server with keys2.txt
|
|
SET GLOBAL innodb_file_per_table = ON;
|
|
CREATE TABLE t1 (c VARCHAR(8)) ENGINE=InnoDB ENCRYPTED=YES ENCRYPTION_KEY_ID=2;
|
|
INSERT INTO t1 VALUES ('foobar');
|
|
ALTER TABLE t1 ADD COLUMN c2 INT;
|
|
INSERT INTO t1 VALUES ('foobar',2);
|
|
SELECT * FROM t1;
|
|
c c2
|
|
foobar NULL
|
|
foobar 2
|
|
TRUNCATE TABLE t1;
|
|
SELECT * FROM t1;
|
|
c c2
|
|
INSERT INTO t1 VALUES ('foobar',1);
|
|
INSERT INTO t1 VALUES ('foobar',2);
|
|
FLUSH TABLE WITH READ LOCK;
|
|
SELECT * FROM t1;
|
|
c c2
|
|
foobar 1
|
|
foobar 2
|
|
|
|
# Restart server with keysbad3.txt
|
|
SELECT * FROM t1;
|
|
ERROR 42S02: Table 'test.t1' doesn't exist in engine
|
|
DROP TABLE t1;
|
|
# Start server with keys3.txt
|
|
SET GLOBAL innodb_default_encryption_key_id=5;
|
|
CREATE TABLE t2 (c VARCHAR(8), id int not null primary key, b int, key(b)) ENGINE=InnoDB ENCRYPTED=YES;
|
|
INSERT INTO t2 VALUES ('foobar',1,2);
|
|
|
|
# Restart server with keys2.txt
|
|
SELECT * FROM t2;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
SELECT * FROM t2 where id = 1;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
SELECT * FROM t2 where b = 1;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
INSERT INTO t2 VALUES ('tmp',3,3);
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
DELETE FROM t2 where b = 3;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
DELETE FROM t2 where id = 3;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
UPDATE t2 set b = b +1;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
OPTIMIZE TABLE t2;
|
|
Table Op Msg_type Msg_text
|
|
test.t2 optimize Error Table 'test.t2' doesn't exist in engine
|
|
test.t2 optimize status Operation failed
|
|
ALTER TABLE t2 ADD COLUMN d INT;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
ANALYZE TABLE t2;
|
|
Table Op Msg_type Msg_text
|
|
test.t2 analyze Error Table 'test.t2' doesn't exist in engine
|
|
test.t2 analyze status Operation failed
|
|
TRUNCATE TABLE t2;
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
DROP TABLE t2;
|
|
|
|
# Start server with keys2.txt
|