Details
Description
mariabackup may overlook file corruptions as shown in steps below:
1. Start MySQL Server with Encryption enabled
2. Create tables, insert data as below:
use test; |
create table t(a varchar(128)) engine=innodb; |
create table t1(a varchar(128)) engine=innodb; |
insert into t select repeat('a',100); |
insert into t1 select repeat('a',100); |
3. Wait some time to make sure that all pages are flushed and query below shows 0 dirty pages:
SHOW GLOBAL STATUS LIKE 'Innodb_buffer_pool_pages_dirty'; |
4. Corrupt t.ibd with commands below (replace data_directory with actual data directory):
cd data_directory |
printf '\xAA\xAA\xAA\xAA' | dd of=test/t.ibd seek=16384 count=4 bs=1 conv=notrunc |
5. Create backup , observe no errors :
170223 09:53:10 [01] Copying ./test/t.ibd to /bkup/test/t.ibd
|
170223 09:53:10 [01] ...done
|
..
|
170223 09:53:14 completed OK!
|
6. Check table with innochecksum to confirm that it is really corrupted:
> innochecksum dt/test/t.ibd |
InnoDB offline file checksum utility. |
Table is uncompressed
|
Page size is 16384
|
Fail; page 1 invalid (fails old style checksum)
|
7. (optional) make sure innochecksum doesn't complain about the other table t1:
innochecksum test/t1.ibd |
Without rest encryption the same steps result in backup error:
170223 10:17:22 [01] Copying ./test/t.ibd to /bkup/test/t.ibd
|
[01] xtrabackup: Database page corruption detected at page 1, retrying...
|
...
|
[01] xtrabackup: Error: failed to read page after 10 retries. File ./test/t.ibd seems to be corrupted.
|
[01] xtrabackup: Error: xtrabackup_copy_datafile() failed.
|
[01] xtrabackup: Error: failed to copy datafile.
|
xtrabackup based on MariaDB server 10.1.22-MariaDB Linux (x86_64)
|
...
|
xtrabackup: Error: cannot open ./xtrabackup_checkpoints
|
xtrabackup: Error: failed to read metadata from './xtrabackup_checkpoints'
|
Attachments
Issue Links
- causes
-
MDEV-18105 Mariabackup fails to copy encrypted InnoDB system tablespace if LSN>4G
-
- Closed
-
-
MDEV-34772 Overuse of big stackvariables results in stackoverflows
-
- Stalled
-
- is duplicated by
-
MDEV-20983 Page 38:4016 may be corrupted. Post encryption checksum 3690179534 stored
-
- Closed
-
- relates to
-
MDEV-18025 Mariabackup fails to detect corrupted page_compressed=1 tables
-
- Closed
-
-
MDEV-18097 Indicate which InnoDB data files are zero-initialized
-
- Closed
-
-
MDEV-18128 Simplify .ibd file creation
-
- Closed
-
-
MDEV-18129 Backup fails for encrypted tables: mariabackup: Database page corruption detected at page 1
-
- Closed
-
-
MDEV-12711 backup may show corruption with custom innodb_data_file_path
-
- Closed
-
-
MDEV-13542 Crashing on a corrupted page is unhelpful
-
- Closed
-
-
MDEV-17638 Improve error message about corruption of encrypted page
-
- Closed
-
-
MDEV-18529 InnoDB wrongly skips decryption of encrypted page if unencrypted and post-encrypted checksums match
-
- Closed
-
As part of a follow-up fix to MDEV-18025, I improved the test case so that it computes a valid checksum for the ‘encrypted’ page and writes it to all 3 locations. That is, by the old rules, this page would look like a valid encrypted page as well as a valid unencrypted page. Only by decrypting and checking the ‘before-encryption’ checksum we will detect the page as corrupted.
This test (and the extra decrypt step in mariabackup --backup) was motivated by a support case where a seemingly corrupted page has the same checksum in all 3 locations.
For page_compressed=1 pages (encrypted or not), the only way to validate the page checksum is to attempt to (optionally decrypt and) decompress the data and to compute the checksum.