mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
MDEV-34705: Binlog-in-engine: No use of InnoDB tablespace and bufferpool
In preparation for a simplified, lower-level recovery of binlog files implemented in InnoDB, remove use of InnoDB tablespaces and buffer pool from the binlog code. Instead, a custom binlog page fifo replaces the general buffer pool for binlog pages, and tablespaces are replaced by simple file_no references. The new binlog page fifo is deliberately naively written in this commit for simplicity, until the new recovery is complete and proven with tests; later it can be improved for better efficiency and scalability. This first version uses a simple global mutex, linear scans of linked lists, repeated alloc/free of pages, and simple backgrund flush thread that uses synchroneous pwrite() one page after another. Error handling is also mostly omitted in this first version. The page header/footer is not changed in this commit, nor is the pagesize, to be done in a later patch. The call to mtr_t::write_binlog() is currently commented-out in function fsp_log_binlog_write() as it asserts in numerous places. To be enabled when those asserts are fixed. For the same reason, the code does not yet implement binlog_write_up_to(lsn_t lsn), to be done once mtr_t operations are working. Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
This commit is contained in:
21
mysql-test/suite/binlog_in_engine/binlog_in_engine.result
Normal file
21
mysql-test/suite/binlog_in_engine/binlog_in_engine.result
Normal file
@@ -0,0 +1,21 @@
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
COMMIT;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
DROP TABLE t1;
|
||||
SELECT @@GLOBAL.binlog_checksum;
|
||||
@@GLOBAL.binlog_checksum
|
||||
NONE
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(2048)) ENGINE=InnoDB;
|
||||
SET SESSION binlog_format= ROW;
|
||||
*** Do 1500 transactions ...
|
||||
SET SESSION binlog_format= MIXED;
|
||||
DROP TABLE t2;
|
13
mysql-test/suite/binlog_in_engine/binlog_in_engine2.result
Normal file
13
mysql-test/suite/binlog_in_engine/binlog_in_engine2.result
Normal file
@@ -0,0 +1,13 @@
|
||||
CREATE TABLE sbtest1(
|
||||
id INTEGER NOT NULL AUTO_INCREMENT,
|
||||
k INTEGER DEFAULT '0' NOT NULL,
|
||||
c CHAR(120) DEFAULT '' NOT NULL,
|
||||
pad CHAR(60) DEFAULT '' NOT NULL,
|
||||
PRIMARY KEY (id)
|
||||
) ENGINE = innodb;
|
||||
*** Test bug where a large event in trx cache would fail to flush to disk
|
||||
*** the last part of the IO_CACHE after reinit_io_cache()
|
||||
SELECT COUNT(*) FROM sbtest1;
|
||||
COUNT(*)
|
||||
1000
|
||||
DROP TABLE sbtest1;
|
@@ -0,0 +1,58 @@
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, 0);
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*0, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*1, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*2, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*3, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*4, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*5, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*6, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*7, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*8, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+1000000+100000*9, seq FROM seq_1_to_4000;
|
||||
SELECT @@GLOBAL.gtid_binlog_state;
|
||||
@@GLOBAL.gtid_binlog_state
|
||||
0-1-12
|
||||
# restart
|
||||
SELECT @@GLOBAL.gtid_binlog_state;
|
||||
@@GLOBAL.gtid_binlog_state
|
||||
0-1-12
|
||||
INSERT INTO t1 VALUES (2, 0);
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*0, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*1, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*2, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*3, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*4, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*5, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*6, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*7, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*8, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+2000000+100000*9, seq FROM seq_1_to_4000;
|
||||
SELECT @@GLOBAL.gtid_binlog_state;
|
||||
@@GLOBAL.gtid_binlog_state
|
||||
0-1-23
|
||||
# restart
|
||||
SELECT @@GLOBAL.gtid_binlog_state;
|
||||
@@GLOBAL.gtid_binlog_state
|
||||
0-1-23
|
||||
INSERT INTO t1 VALUES (3, 0);
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*0, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*1, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*2, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*3, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*4, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*5, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*6, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*7, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*8, seq FROM seq_1_to_4000;
|
||||
INSERT INTO t1 SELECT seq+3000000+100000*9, seq FROM seq_1_to_4000;
|
||||
SHOW BINARY LOGS;
|
||||
Log_name File_size
|
||||
binlog-000000.ibb 262144
|
||||
binlog-000001.ibb 262144
|
||||
binlog-000002.ibb 262144
|
||||
binlog-000003.ibb 262144
|
||||
binlog-000004.ibb 262144
|
||||
binlog-000005.ibb 262144
|
||||
DROP TABLE t1;
|
@@ -42,8 +42,9 @@ while ($i < 10) {
|
||||
inc $i;
|
||||
}
|
||||
|
||||
--let $binlog_name= binlog-000005.ibb
|
||||
--let $binlog_size= 262144
|
||||
--source include/wait_for_engine_binlog.inc
|
||||
SHOW BINARY LOGS;
|
||||
|
||||
--exec $MYSQL_BINLOG --start-position=$gtid_pos3 --read-from-remote-server --user=root --host=127.0.0.1 --port=$MASTER_MYPORT master-bin.000001 > $MYSQLTEST_VARDIR/tmp/mysqlbinlog3.txt
|
||||
|
||||
DROP TABLE t1;
|
||||
|
Reference in New Issue
Block a user