mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
Mariabackup 10.2.7 would delete the redo log files after a successful --prepare operation. If the user is manually copying the prepared files instead of using the --copy-back option, it could happen that some old redo log file would be preserved in the restored location. These old redo log files could cause corruption of the restored data files when the server is started up. We prevent this scenario by creating a "poisoned" redo log file ib_logfile0 at the end of the --prepare step. The poisoning consists of simply truncating the file to an empty file. InnoDB will refuse to start up on an empty redo log file. copy_back(): Delete all redo log files in the target if the source file ib_logfile0 is empty. (Previously we did this if the source file is missing.) SRV_OPERATION_RESTORE_EXPORT: A new variant of SRV_OPERATION_RESTORE when the --export option is specified. In this mode, we will keep deleting all redo log files, instead of truncating the first one. delete_log_files(): Add a parameter for the first file to delete, to be passed as 0 or 1. innobase_start_or_create_for_mysql(): In mariabackup --prepare, tolerate an empty ib_logfile0 file. Otherwise, require the first redo log file to be longer than 4 blocks (2048 bytes). Unless --export was specified, truncate the first log file at the end of --prepare.
80 lines
2.8 KiB
Plaintext
80 lines
2.8 KiB
Plaintext
CREATE TABLE t1(a INT PRIMARY KEY) ENGINE=InnoDB;
|
|
SELECT * FROM INFORMATION_SCHEMA.ENGINES
|
|
WHERE engine = 'innodb'
|
|
AND support IN ('YES', 'DEFAULT', 'ENABLED');
|
|
ENGINE SUPPORT COMMENT TRANSACTIONS XA SAVEPOINTS
|
|
FOUND 1 /InnoDB: Log file .*ib_logfile0 size 0 is too small/ in mysqld.1.err
|
|
CHECK TABLE t1;
|
|
Table Op Msg_type Msg_text
|
|
test.t1 check status OK
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (42);
|
|
SELECT * FROM t1;
|
|
a
|
|
INSERT INTO t1 VALUES (42);
|
|
BEGIN;
|
|
DELETE FROM t1;
|
|
SELECT * FROM t1;
|
|
a
|
|
42
|
|
INSERT INTO t1 VALUES (0),(123);
|
|
BEGIN;
|
|
DELETE FROM t1 WHERE a>0;
|
|
# Persist the state of the above incomplete transaction by
|
|
# causing a redo log write for another transaction.
|
|
connect con1, localhost, root;
|
|
SET GLOBAL innodb_flush_log_at_trx_commit=1;
|
|
DELETE FROM t1 WHERE a=0;
|
|
disconnect con1;
|
|
connection default;
|
|
# Kill the server
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /syntax error in innodb_log_group_home_dir/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Starting crash recovery from checkpoint LSN=.*/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: innodb_read_only prevents crash recovery/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 2 /redo log from 3\*[0-9]+ to 2\*[0-9]+ bytes/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 3 /redo log from 3\*[0-9]+ to 2\*[0-9]+ bytes/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 2 /InnoDB: innodb_read_only prevents crash recovery/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 4 /redo log from 3\*[0-9]+ to 2\*[0-9]+ bytes/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Cannot create log files in read-only mode/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Setting log file .*ib_logfile[0-9]+ size to/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Setting log file .*ib_logfile[0-9]+ size to/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Log file .*ib_logfile0 size 7 is not a multiple of 512 bytes/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Log file .*ib_logfile1 is of different size 1048576 bytes than other log files/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
ERROR 42000: Unknown storage engine 'InnoDB'
|
|
FOUND 1 /InnoDB: Setting log file .*ib_logfile[0-9]+ size to/ in mysqld.1.err
|
|
FOUND 1 /InnoDB: Renaming log file .*ib_logfile101 to .*ib_logfile0/ in mysqld.1.err
|
|
SELECT * FROM t1;
|
|
a
|
|
42
|
|
123
|
|
DROP TABLE t1;
|