Apply fails for compressed pages without data
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
Percona XtraBackup moved to https://jira.percona.com/projects/PXB |
Opinion
|
Undecided
|
Unassigned |
Bug Description
With Xtrabackup 2.4.8 take a backup of MySQL 5.7.20 with innodb_
This succeeds.
With Xtrabackup 2.4.8 restore the backup.
This fails.
=======
InnoDB: Doing recovery: scanned up to log sequence number 59571174338048 (99%)
InnoDB: Doing recovery: scanned up to log sequence number 59571176730860 (99%)
InnoDB: Database was not shutdown normally!
InnoDB: Starting crash recovery.
InnoDB: 1 transaction(s) which must be rolled back or cleaned up in total 1 row operations to undo
InnoDB: Trx id counter is 12727518208
InnoDB: Starting an apply batch of log records to the database...
InnoDB: Progress in percent: 2017-12-02 16:52:52 0x7f34d448d700 InnoDB: Assertion failure in thread 139864876570368 in file page0zip.ic line 419
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://
InnoDB: about forcing recovery.
15:52:52 UTC - xtrabackup got signal 6 ;
This could be because you hit a bug or data is corrupted.
This error can also be caused by malfunctioning hardware.
Attempting to collect some information that could help diagnose the problem.
As this is a crash and something is definitely wrong, the information
collection process might fail.
Thread pointer: 0x0
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
stack_bottom = 0 thread_stack 0x10000
xtrabackup(
xtrabackup(
/lib64/
/lib64/
/lib64/
xtrabackup[
xtrabackup[
xtrabackup(
xtrabackup(
xtrabackup(
xtrabackup(
/lib64/
/lib64/
Please report a bug at https:/
=======
It is known issue that innodb_ log_compressed_ pages=OFF doesn't work well with PXB. Different versions of zlib can produce compressed pages of different length on the same data which leads to PXB needing a page split when MySQL does not need it. Which lead to this or similar assert. There are two options:
1. innodb_ log_compressed_ pages=ON
2. Make sure PXB and MySQL are built with exactly same zlib version. We build PS and PXB packages with system zlib. MySQL community comes with bundled zlib. By making sever and PXB to use the same version you can ensure that zlib compress will produce the same result.