mirror of
https://github.com/MariaDB/server.git
synced 2025-04-14 03:05:37 +02: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.
41 lines
2 KiB
Text
41 lines
2 KiB
Text
-- source include/innodb_page_size_small.inc
|
|
-- source include/have_file_key_management_plugin.inc
|
|
|
|
# embedded does not support restart
|
|
-- source include/not_embedded.inc
|
|
|
|
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");
|
|
|
|
--echo # Restart mysqld --file-key-management-filename=keys2.txt
|
|
-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt
|
|
-- source include/restart_mysqld.inc
|
|
|
|
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;
|
|
|
|
insert into t1 values (1, repeat('secret',6000));
|
|
insert into t2 values (1, repeat('secret',6000));
|
|
insert into t3 values (1, repeat('secret',6000));
|
|
|
|
--echo # Restart mysqld --file-key-management-filename=keys3.txt
|
|
-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys3.txt
|
|
-- source include/restart_mysqld.inc
|
|
|
|
--error ER_NO_SUCH_TABLE_IN_ENGINE
|
|
select count(*) from t1 FORCE INDEX (b) where b like 'secret%';
|
|
--error ER_NO_SUCH_TABLE_IN_ENGINE
|
|
select count(*) from t2 FORCE INDEX (b) where b like 'secret%';
|
|
select count(*) from t3 FORCE INDEX (b) where b like 'secret%';
|
|
|
|
--echo # Restart mysqld --file-key-management-filename=keys2.txt
|
|
-- let $restart_parameters=--file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys2.txt
|
|
-- source include/restart_mysqld.inc
|
|
|
|
drop table t1,t2,t3;
|