mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
A prepared backup from Mariabackup does not really need to contain any redo log file, because all log will have been applied to the data files. When the user copies a prepared backup to a data directory (overwriting existing files), it could happen that the data directory already contained redo log files from the past. mariabackup --copy-back) would delete the old redo log files, but a user’s own copying script might not do that. To prevent corruption caused by mixing an old redo log file with data files from a backup, starting with MDEV-13311, Mariabackup would create a zero-length ib_logfile0 that would prevent startup. Actually, there is no need to prevent InnoDB from starting up when a single zero-length file ib_logfile0 is present. Only if there exist multiple data files of different lengths, then we should refuse to start up due to inconsistency. A single zero-length ib_logfile0 should be treated as if the log files were missing: create new log files according to the configuration. open_log_file(): Remove. There is no need to open the log files at this point, because os_file_get_status() already determined the size of the file. innobase_start_or_create_for_mysql(): Move the creation of new log files a little later, not when finding out that the first log file does not exist, but after finding out that it does not exist or it exists as a zero-length file.
80 lines
2.9 KiB
Plaintext
80 lines
2.9 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_logfile1 is of different size .* bytes than other log files 0 bytes!/ 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;
|