MDEV-8021 "InnoDB: Tablespace id 4 encrypted but encryption service not available. Can't continue opening tablespace" on server restart when there are encrypted tables

key id was written in the wrong place on the tablespace first page
(thus its value could not be read back later)
This commit is contained in:
Sergei Golubchik 2015-05-09 11:19:36 +02:00
parent d259376fd8
commit 5fdb14542a
5 changed files with 39 additions and 2 deletions

View file

@ -0,0 +1,5 @@
call mtr.add_suppression("InnoDB: New log files created, LSN");
call mtr.add_suppression("InnoDB: Creating foreign key constraint system tables");
shutdown;
create table t1 (a int);
drop table t1;

View file

@ -0,0 +1,2 @@
--innodb-encrypt-tables
--innodb-encrypt-log

View file

@ -0,0 +1,30 @@
#
# MDEV-8021 "InnoDB: Tablespace id 4 encrypted but encryption service not available. Can't continue opening tablespace" on server restart when there are encrypted tables
#
--source include/have_innodb.inc
--source include/have_file_key_management_plugin.inc
call mtr.add_suppression("InnoDB: New log files created, LSN");
call mtr.add_suppression("InnoDB: Creating foreign key constraint system tables");
let datadir=`select @@datadir`;
--exec echo wait > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
shutdown;
--remove_file $datadir/ib_logfile0
--remove_file $datadir/ib_logfile1
--remove_file $datadir/ibdata1
--exec echo restart > $MYSQLTEST_VARDIR/tmp/mysqld.1.expect
--enable_reconnect
--source include/wait_until_connected_again.inc
create table t1 (a int);
--source include/restart_mysqld.inc
drop table t1;

View file

@ -444,7 +444,7 @@ fil_space_write_crypt_data_low(
mtr);
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len, min_key_version,
MLOG_4BYTES, mtr);
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len, key_id,
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len + 4, key_id,
MLOG_4BYTES, mtr);
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len + 8, encryption,
MLOG_1BYTE, mtr);

View file

@ -444,7 +444,7 @@ fil_space_write_crypt_data_low(
mtr);
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len, min_key_version,
MLOG_4BYTES, mtr);
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len, key_id,
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len + 4, key_id,
MLOG_4BYTES, mtr);
mlog_write_ulint(page + offset + MAGIC_SZ + 2 + len + 8, encryption,
MLOG_1BYTE, mtr);