mariadb/storage
Vlad Lesin 985ede9203 MDEV-20755 InnoDB: Database page corruption on disk or a failed file read of tablespace upon prepare of mariabackup incremental backup
The problem:

When incremental backup is taken, delta files are created for innodb tables
which are marked as new tables during innodb ddl tracking. When such
tablespace is tried to be opened during prepare in
xb_delta_open_matching_space(), it is "created", i.e.
xb_space_create_file() is invoked, instead of opening, even if
a tablespace with the same name exists in the base backup directory.

xb_space_create_file() writes page 0 header the tablespace.
This header does not contain crypt data, as mariabackup does not have
any information about crypt data in delta file metadata for
tablespaces.

After delta file is applied, recovery process is started. As the
sequence of recovery for different pages is not defined, there can be
the situation when crypt data redo log event is executed after some
other page is read for recovery. When some page is read for recovery, it's
decrypted using crypt data stored in tablespace header in page 0, if
there is no crypt data, the page is not decryped and does not pass corruption
test.

This causes error for incremental backup --prepare for encrypted
tablespaces.

The error is not stable because crypt data redo log event updates crypt
data on page 0, and recovery for different pages can be executed in
undefined order.

The fix:

When delta file is created, the corresponding write filter copies only
the pages which LSN is greater then some incremental LSN. When new file
is created during incremental backup, the LSN of all it's pages must be
greater then incremental LSN, so there is no need to create delta for
such table, we can just copy it completely.

The fix is to copy the whole file which was tracked during incremental backup
with innodb ddl tracker, and copy it to base directory during --prepare
instead of delta applying.

There is also DBUG_EXECUTE_IF() in innodb code to avoid writing redo log
record for crypt data updating on page 0 to make the test case stable.

Note:

The issue is not reproducible in 10.5 as optimized DDL's are deprecated
in 10.5. But the fix is still useful because it allows to decrease
data copy size during backup, as delta file contains some extra info.
The test case should be removed for 10.5 as it will always pass.
2020-10-23 11:02:25 +03:00
..
archive Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
blackhole MDEV-11094: Blackhole table updates on slave fail when row annotation is enabled 2019-05-29 17:35:29 +05:30
cassandra Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
connect Merge remote-tracking branch 'connect/10.2' into 10.2 2020-08-02 11:14:56 +02:00
csv Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
example Merge branch '5.5' into 10.1 2019-05-11 22:19:05 +03:00
federated Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
federatedx Merge 10.1 into 10.2 2019-04-03 19:58:47 +03:00
heap MDEV-21082: isnan/isinf compilation errors, isfinite warnings on MacOS 2019-11-19 16:28:15 +03:00
innobase MDEV-20755 InnoDB: Database page corruption on disk or a failed file read of tablespace upon prepare of mariabackup incremental backup 2020-10-23 11:02:25 +03:00
maria Merge 10.1 into 10.2 2020-09-01 16:20:23 +03:00
mroonga Merge 10.1 into 10.2 2020-06-01 09:33:03 +03:00
myisam Merge 10.1 into 10.2 2020-09-01 16:20:23 +03:00
myisammrg Merge branch '10.1' into 10.2 2020-08-02 11:05:29 +02:00
oqgraph Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
perfschema Fix GCC 10 -Wstringop-truncation 2020-03-13 07:39:14 +02:00
rocksdb Fix a typo in the previous cset 2020-09-04 09:12:27 +00:00
sequence Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
sphinx MDEV-20647 Fix and enable SphinxSE tests 2019-09-30 15:47:09 +03:00
spider MDEV-7098 spider/bg.spider_fixes failed in buildbot with safe_mutex: Trying to unlock mutex conn->mta_conn_mutex that wasn't locked at storage/spider/spd_db_conn.cc, line 671 2020-09-07 10:26:23 +09:00
test_sql_discovery Merge 10.1 into 10.2 2019-05-13 17:54:04 +03:00
tokudb Merge branch '10.1' into 10.2 2020-08-06 16:47:39 +02:00
xtradb Merge 10.1 into 10.2 2020-10-21 14:02:04 +03:00