mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 02:51:44 +01:00
cad56fbaba
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.
25 lines
1.6 KiB
Text
25 lines
1.6 KiB
Text
call mtr.add_suppression("InnoDB: The page \\[page id: space=[1-9][0-9]*, page number=[1-9][0-9]*\\] in file '.*test.t[123]\\.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: Unable to decompress ..test.t[1-3]\\.ibd\\[page id: space=[1-9][0-9]*, page number=[0-9]+\\]");
|
|
call mtr.add_suppression("InnoDB: Table `test`\\.`t[12]` is corrupted");
|
|
# Restart mysqld --file-key-management-filename=keys2.txt
|
|
SET GLOBAL innodb_file_per_table = ON;
|
|
set GLOBAL innodb_default_encryption_key_id=4;
|
|
create table t1(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed;
|
|
create table t2(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=yes;
|
|
create table t3(a int not null primary key, b blob, index(b(10))) engine=innodb row_format=compressed encrypted=no;
|
|
Warnings:
|
|
Warning 140 InnoDB: ENCRYPTED=NO implies ENCRYPTION_KEY_ID=1
|
|
insert into t1 values (1, repeat('secret',6000));
|
|
insert into t2 values (1, repeat('secret',6000));
|
|
insert into t3 values (1, repeat('secret',6000));
|
|
# Restart mysqld --file-key-management-filename=keys3.txt
|
|
select count(*) from t1 FORCE INDEX (b) where b like 'secret%';
|
|
ERROR 42S02: Table 'test.t1' doesn't exist in engine
|
|
select count(*) from t2 FORCE INDEX (b) where b like 'secret%';
|
|
ERROR 42S02: Table 'test.t2' doesn't exist in engine
|
|
select count(*) from t3 FORCE INDEX (b) where b like 'secret%';
|
|
count(*)
|
|
1
|
|
# Restart mysqld --file-key-management-filename=keys2.txt
|
|
drop table t1,t2,t3;
|