mirror of
https://github.com/MariaDB/server.git
synced 2025-01-20 14:02:32 +01:00
f01321fd09
Adding code to keep skipping events while inside a transaction. Execution will start just after the transaction has been skipped. sql/slave.cc: Adding code to set the thd->options flag for the slave SQL thread even when BEGIN, ROLLBACK, COMMIT, and XID events are being skipped. Adding code to not decrease the slave skip counter from 1 to 0 if we are inside a transaction. This will keep the counter at 1, and keep skipping events, until a transaction terminator is read. At that point, the slave skip counter will be decreased to 0, and events will be read and executed instead of read and skipped. mysql-test/r/rpl_slave_skip.result: New BitKeeper file ``mysql-test/r/rpl_slave_skip.result'' mysql-test/t/rpl_slave_skip-slave.opt: New BitKeeper file ``mysql-test/t/rpl_slave_skip-slave.opt'' mysql-test/t/rpl_slave_skip.test: New BitKeeper file ``mysql-test/t/rpl_slave_skip.test''
144 lines
3 KiB
Text
144 lines
3 KiB
Text
stop slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
reset master;
|
|
reset slave;
|
|
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
|
start slave;
|
|
**** On Master ****
|
|
CREATE TABLE t1 (a INT, b SET('master','slave')) ENGINE=INNODB;
|
|
CREATE TABLE t2 (a INT, b SET('master','slave')) ENGINE=MYISAM;
|
|
==== Skipping normal transactions ====
|
|
**** On Slave ****
|
|
STOP SLAVE;
|
|
**** On Master ****
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (1, 'master');
|
|
INSERT INTO t1 VALUES (2, 'master');
|
|
INSERT INTO t1 VALUES (3, 'master');
|
|
COMMIT;
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (4, 'master,slave');
|
|
INSERT INTO t1 VALUES (5, 'master,slave');
|
|
INSERT INTO t1 VALUES (6, 'master,slave');
|
|
COMMIT;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 master
|
|
2 master
|
|
3 master
|
|
4 master,slave
|
|
5 master,slave
|
|
6 master,slave
|
|
**** On Slave ****
|
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
|
START SLAVE;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
4 master,slave
|
|
5 master,slave
|
|
6 master,slave
|
|
**** On Master ****
|
|
DELETE FROM t1;
|
|
==== Skipping two normal transactions ====
|
|
**** On Slave ****
|
|
STOP SLAVE;
|
|
**** On Master ****
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (1, 'master');
|
|
INSERT INTO t1 VALUES (2, 'master');
|
|
INSERT INTO t1 VALUES (3, 'master');
|
|
COMMIT;
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (4, 'master');
|
|
INSERT INTO t1 VALUES (5, 'master');
|
|
INSERT INTO t1 VALUES (6, 'master');
|
|
COMMIT;
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (7, 'master,slave');
|
|
INSERT INTO t1 VALUES (8, 'master,slave');
|
|
INSERT INTO t1 VALUES (9, 'master,slave');
|
|
COMMIT;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 master
|
|
2 master
|
|
3 master
|
|
4 master
|
|
5 master
|
|
6 master
|
|
7 master,slave
|
|
8 master,slave
|
|
9 master,slave
|
|
**** On Slave ****
|
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=8;
|
|
START SLAVE;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
7 master,slave
|
|
8 master,slave
|
|
9 master,slave
|
|
**** On Master ****
|
|
DELETE FROM t1;
|
|
==== Skipping without autocommit ====
|
|
**** On Slave ****
|
|
STOP SLAVE;
|
|
**** On Master ****
|
|
SET AUTOCOMMIT=0;
|
|
INSERT INTO t1 VALUES (1, 'master');
|
|
INSERT INTO t1 VALUES (2, 'master');
|
|
INSERT INTO t1 VALUES (3, 'master');
|
|
COMMIT;
|
|
INSERT INTO t1 VALUES (4, 'master,slave');
|
|
INSERT INTO t1 VALUES (5, 'master,slave');
|
|
INSERT INTO t1 VALUES (6, 'master,slave');
|
|
COMMIT;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
1 master
|
|
2 master
|
|
3 master
|
|
4 master,slave
|
|
5 master,slave
|
|
6 master,slave
|
|
**** On Slave ****
|
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
|
START SLAVE;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
4 master,slave
|
|
5 master,slave
|
|
6 master,slave
|
|
==== Rollback of transaction with non-transactional change ====
|
|
**** On Master ****
|
|
DELETE FROM t1;
|
|
SET AUTOCOMMIT=1;
|
|
**** On Slave ****
|
|
STOP SLAVE;
|
|
**** On Master ****
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (1, '');
|
|
INSERT INTO t2 VALUES (2, 'master');
|
|
INSERT INTO t1 VALUES (3, '');
|
|
ROLLBACK;
|
|
BEGIN;
|
|
INSERT INTO t1 VALUES (4, '');
|
|
INSERT INTO t2 VALUES (5, 'master,slave');
|
|
INSERT INTO t1 VALUES (6, '');
|
|
ROLLBACK;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
SELECT * FROM t2 ORDER BY a;
|
|
a b
|
|
2 master
|
|
5 master,slave
|
|
**** On Slave ****
|
|
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
|
START SLAVE;
|
|
SELECT * FROM t1 ORDER BY a;
|
|
a b
|
|
SELECT * FROM t2 ORDER BY a;
|
|
a b
|
|
5 master,slave
|
|
==== Cleanup ====
|
|
**** On Master ****
|
|
DROP TABLE t1, t2;
|