mirror of
https://github.com/MariaDB/server.git
synced 2025-04-22 07:05:33 +02:00

Problem was that initial GTID was set on wsrep_before_prepare out-of-order. In practice GTID was set to same as previous executed transaction GTID. In recovery valid GTID was found from prepared transaction and this transaction is committed leading to fact that same GTID was executed twice. This is fixed by setting invalid GTID at wsrep_before_prepare and later in wsrep_before_commit actual correct GTID is set and this setting is done while we are in commit monitor i.e. assigment is done in order of replication. In recovery if prepared transaction is found we check its GTID, if it is invalid transaction will be rolled back and if it is valid it will be committed. Initialize gtid seqno from recovered seqno when bootstrapping a new cluster. Added two test cases for both mariabackup and rsync SST methods to show that GTIDs remain consistent on cluster and that all expected rows are in the table. Added tests for wsrep GTID recovery with binlog on and off. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
534 lines
17 KiB
Text
534 lines
17 KiB
Text
connection node_2;
|
|
connection node_1;
|
|
connection node_1;
|
|
connection node_2;
|
|
Performing State Transfer on a server that has been shut down cleanly and restarted
|
|
connection node_1;
|
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
|
COMMIT;
|
|
connection node_2;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
|
COMMIT;
|
|
Shutting down server ...
|
|
connection node_1;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
|
COMMIT;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
|
connect node_1a_galera_st_shutdown_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
|
connection node_2;
|
|
Starting server ...
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
|
COMMIT;
|
|
connection node_1;
|
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
|
COMMIT;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
|
COMMIT;
|
|
connection node_1a_galera_st_shutdown_slave;
|
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
|
ROLLBACK;
|
|
SET AUTOCOMMIT=ON;
|
|
SET SESSION wsrep_sync_wait=15;
|
|
SELECT COUNT(*) AS EXPECT_15 FROM t1;
|
|
EXPECT_15
|
|
35
|
|
SELECT * from t1;
|
|
id f1
|
|
1 node1_committed_before
|
|
2 node1_committed_before
|
|
3 node1_committed_before
|
|
4 node1_committed_before
|
|
5 node1_committed_before
|
|
6 node2_committed_before
|
|
7 node2_committed_before
|
|
8 node2_committed_before
|
|
9 node2_committed_before
|
|
10 node2_committed_before
|
|
11 node1_committed_during
|
|
12 node1_committed_during
|
|
13 node1_committed_during
|
|
14 node1_committed_during
|
|
15 node1_committed_during
|
|
16 node1_to_be_committed_after
|
|
17 node1_to_be_committed_after
|
|
18 node1_to_be_committed_after
|
|
19 node1_to_be_committed_after
|
|
20 node1_to_be_committed_after
|
|
26 node2_committed_after
|
|
27 node2_committed_after
|
|
28 node2_committed_after
|
|
29 node2_committed_after
|
|
30 node2_committed_after
|
|
31 node1_to_be_committed_after
|
|
32 node1_to_be_committed_after
|
|
33 node1_to_be_committed_after
|
|
34 node1_to_be_committed_after
|
|
35 node1_to_be_committed_after
|
|
36 node1_committed_after
|
|
37 node1_committed_after
|
|
38 node1_committed_after
|
|
39 node1_committed_after
|
|
40 node1_committed_after
|
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
COUNT(*) = 0
|
|
1
|
|
COMMIT;
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
SET SESSION wsrep_sync_wait=15;
|
|
SELECT COUNT(*) AS EXPECT_15 FROM t1;
|
|
EXPECT_15
|
|
35
|
|
SELECT * from t1;
|
|
id f1
|
|
1 node1_committed_before
|
|
2 node1_committed_before
|
|
3 node1_committed_before
|
|
4 node1_committed_before
|
|
5 node1_committed_before
|
|
6 node2_committed_before
|
|
7 node2_committed_before
|
|
8 node2_committed_before
|
|
9 node2_committed_before
|
|
10 node2_committed_before
|
|
11 node1_committed_during
|
|
12 node1_committed_during
|
|
13 node1_committed_during
|
|
14 node1_committed_during
|
|
15 node1_committed_during
|
|
16 node1_to_be_committed_after
|
|
17 node1_to_be_committed_after
|
|
18 node1_to_be_committed_after
|
|
19 node1_to_be_committed_after
|
|
20 node1_to_be_committed_after
|
|
26 node2_committed_after
|
|
27 node2_committed_after
|
|
28 node2_committed_after
|
|
29 node2_committed_after
|
|
30 node2_committed_after
|
|
31 node1_to_be_committed_after
|
|
32 node1_to_be_committed_after
|
|
33 node1_to_be_committed_after
|
|
34 node1_to_be_committed_after
|
|
35 node1_to_be_committed_after
|
|
36 node1_committed_after
|
|
37 node1_committed_after
|
|
38 node1_committed_after
|
|
39 node1_committed_after
|
|
40 node1_committed_after
|
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
COUNT(*) = 0
|
|
1
|
|
DROP TABLE t1;
|
|
COMMIT;
|
|
Performing State Transfer on a server that starts from a clean var directory
|
|
This is accomplished by shutting down node #2 and removing its var directory before restarting it
|
|
connection node_1;
|
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
|
COMMIT;
|
|
connection node_2;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
|
COMMIT;
|
|
Shutting down server ...
|
|
connection node_1;
|
|
Cleaning var directory ...
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
|
COMMIT;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
|
connect node_1a_galera_st_clean_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
|
connection node_2;
|
|
Starting server ...
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
|
COMMIT;
|
|
connection node_1;
|
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
|
COMMIT;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
|
COMMIT;
|
|
connection node_1a_galera_st_clean_slave;
|
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (44,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
|
ROLLBACK;
|
|
SET AUTOCOMMIT=ON;
|
|
SET SESSION wsrep_sync_wait=15;
|
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
|
EXPECT_35
|
|
35
|
|
SELECT * from t1;
|
|
id f1
|
|
1 node1_committed_before
|
|
2 node1_committed_before
|
|
3 node1_committed_before
|
|
4 node1_committed_before
|
|
5 node1_committed_before
|
|
6 node2_committed_before
|
|
7 node2_committed_before
|
|
8 node2_committed_before
|
|
9 node2_committed_before
|
|
10 node2_committed_before
|
|
11 node1_committed_during
|
|
12 node1_committed_during
|
|
13 node1_committed_during
|
|
14 node1_committed_during
|
|
15 node1_committed_during
|
|
16 node1_to_be_committed_after
|
|
17 node1_to_be_committed_after
|
|
18 node1_to_be_committed_after
|
|
19 node1_to_be_committed_after
|
|
20 node1_to_be_committed_after
|
|
26 node2_committed_after
|
|
27 node2_committed_after
|
|
28 node2_committed_after
|
|
29 node2_committed_after
|
|
30 node2_committed_after
|
|
31 node1_to_be_committed_after
|
|
32 node1_to_be_committed_after
|
|
33 node1_to_be_committed_after
|
|
34 node1_to_be_committed_after
|
|
35 node1_to_be_committed_after
|
|
36 node1_committed_after
|
|
37 node1_committed_after
|
|
38 node1_committed_after
|
|
39 node1_committed_after
|
|
40 node1_committed_after
|
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
COUNT(*) = 0
|
|
1
|
|
COMMIT;
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
SET SESSION wsrep_sync_wait=15;
|
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
|
EXPECT_35
|
|
35
|
|
SELECT * from t1;
|
|
id f1
|
|
1 node1_committed_before
|
|
2 node1_committed_before
|
|
3 node1_committed_before
|
|
4 node1_committed_before
|
|
5 node1_committed_before
|
|
6 node2_committed_before
|
|
7 node2_committed_before
|
|
8 node2_committed_before
|
|
9 node2_committed_before
|
|
10 node2_committed_before
|
|
11 node1_committed_during
|
|
12 node1_committed_during
|
|
13 node1_committed_during
|
|
14 node1_committed_during
|
|
15 node1_committed_during
|
|
16 node1_to_be_committed_after
|
|
17 node1_to_be_committed_after
|
|
18 node1_to_be_committed_after
|
|
19 node1_to_be_committed_after
|
|
20 node1_to_be_committed_after
|
|
26 node2_committed_after
|
|
27 node2_committed_after
|
|
28 node2_committed_after
|
|
29 node2_committed_after
|
|
30 node2_committed_after
|
|
31 node1_to_be_committed_after
|
|
32 node1_to_be_committed_after
|
|
33 node1_to_be_committed_after
|
|
34 node1_to_be_committed_after
|
|
35 node1_to_be_committed_after
|
|
36 node1_committed_after
|
|
37 node1_committed_after
|
|
38 node1_committed_after
|
|
39 node1_committed_after
|
|
40 node1_committed_after
|
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
COUNT(*) = 0
|
|
1
|
|
DROP TABLE t1;
|
|
COMMIT;
|
|
Performing State Transfer on a server that has been killed and restarted
|
|
connection node_1;
|
|
CREATE TABLE t1 (id int not null primary key,f1 CHAR(255)) ENGINE=InnoDB;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (1,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (2,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (3,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (4,'node1_committed_before');
|
|
INSERT INTO t1 VALUES (5,'node1_committed_before');
|
|
COMMIT;
|
|
connection node_2;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (6,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (7,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (8,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (9,'node2_committed_before');
|
|
INSERT INTO t1 VALUES (10,'node2_committed_before');
|
|
COMMIT;
|
|
Killing server ...
|
|
connection node_1;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (11,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (12,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (13,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (14,'node1_committed_during');
|
|
INSERT INTO t1 VALUES (15,'node1_committed_during');
|
|
COMMIT;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (16,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (17,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (18,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (19,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (20,'node1_to_be_committed_after');
|
|
connect node_1a_galera_st_kill_slave, 127.0.0.1, root, , test, $NODE_MYPORT_1;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (21,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (22,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (23,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (24,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (25,'node1_to_be_rollbacked_after');
|
|
connection node_2;
|
|
Performing --wsrep-recover ...
|
|
Starting server ...
|
|
Using --wsrep-start-position when starting mysqld ...
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (26,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (27,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (28,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (29,'node2_committed_after');
|
|
INSERT INTO t1 VALUES (30,'node2_committed_after');
|
|
COMMIT;
|
|
connection node_1;
|
|
INSERT INTO t1 VALUES (31,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (32,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (33,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (34,'node1_to_be_committed_after');
|
|
INSERT INTO t1 VALUES (35,'node1_to_be_committed_after');
|
|
COMMIT;
|
|
SET AUTOCOMMIT=OFF;
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (36,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (37,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (38,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (39,'node1_committed_after');
|
|
INSERT INTO t1 VALUES (40,'node1_committed_after');
|
|
COMMIT;
|
|
connection node_1a_galera_st_kill_slave;
|
|
INSERT INTO t1 VALUES (41,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (42,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (43,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (45,'node1_to_be_rollbacked_after');
|
|
INSERT INTO t1 VALUES (46,'node1_to_be_rollbacked_after');
|
|
ROLLBACK;
|
|
SET AUTOCOMMIT=ON;
|
|
SET SESSION wsrep_sync_wait=15;
|
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
|
EXPECT_35
|
|
35
|
|
SELECT * FROM t1;
|
|
id f1
|
|
1 node1_committed_before
|
|
2 node1_committed_before
|
|
3 node1_committed_before
|
|
4 node1_committed_before
|
|
5 node1_committed_before
|
|
6 node2_committed_before
|
|
7 node2_committed_before
|
|
8 node2_committed_before
|
|
9 node2_committed_before
|
|
10 node2_committed_before
|
|
11 node1_committed_during
|
|
12 node1_committed_during
|
|
13 node1_committed_during
|
|
14 node1_committed_during
|
|
15 node1_committed_during
|
|
16 node1_to_be_committed_after
|
|
17 node1_to_be_committed_after
|
|
18 node1_to_be_committed_after
|
|
19 node1_to_be_committed_after
|
|
20 node1_to_be_committed_after
|
|
26 node2_committed_after
|
|
27 node2_committed_after
|
|
28 node2_committed_after
|
|
29 node2_committed_after
|
|
30 node2_committed_after
|
|
31 node1_to_be_committed_after
|
|
32 node1_to_be_committed_after
|
|
33 node1_to_be_committed_after
|
|
34 node1_to_be_committed_after
|
|
35 node1_to_be_committed_after
|
|
36 node1_committed_after
|
|
37 node1_committed_after
|
|
38 node1_committed_after
|
|
39 node1_committed_after
|
|
40 node1_committed_after
|
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
COUNT(*) = 0
|
|
1
|
|
COMMIT;
|
|
connection node_1;
|
|
SET AUTOCOMMIT=ON;
|
|
SET SESSION wsrep_sync_wait=15;
|
|
SELECT COUNT(*) AS EXPECT_35 FROM t1;
|
|
EXPECT_35
|
|
35
|
|
SELECT * FROM t1;
|
|
id f1
|
|
1 node1_committed_before
|
|
2 node1_committed_before
|
|
3 node1_committed_before
|
|
4 node1_committed_before
|
|
5 node1_committed_before
|
|
6 node2_committed_before
|
|
7 node2_committed_before
|
|
8 node2_committed_before
|
|
9 node2_committed_before
|
|
10 node2_committed_before
|
|
11 node1_committed_during
|
|
12 node1_committed_during
|
|
13 node1_committed_during
|
|
14 node1_committed_during
|
|
15 node1_committed_during
|
|
16 node1_to_be_committed_after
|
|
17 node1_to_be_committed_after
|
|
18 node1_to_be_committed_after
|
|
19 node1_to_be_committed_after
|
|
20 node1_to_be_committed_after
|
|
26 node2_committed_after
|
|
27 node2_committed_after
|
|
28 node2_committed_after
|
|
29 node2_committed_after
|
|
30 node2_committed_after
|
|
31 node1_to_be_committed_after
|
|
32 node1_to_be_committed_after
|
|
33 node1_to_be_committed_after
|
|
34 node1_to_be_committed_after
|
|
35 node1_to_be_committed_after
|
|
36 node1_committed_after
|
|
37 node1_committed_after
|
|
38 node1_committed_after
|
|
39 node1_committed_after
|
|
40 node1_committed_after
|
|
SELECT COUNT(*) = 0 FROM (SELECT COUNT(*) AS c, f1 FROM t1 GROUP BY f1 HAVING c NOT IN (5, 10)) AS a1;
|
|
COUNT(*) = 0
|
|
1
|
|
DROP TABLE t1;
|
|
COMMIT;
|
|
connection node_1;
|
|
# Node_1
|
|
SHOW global variables like 'gtid%pos';
|
|
Variable_name Value
|
|
gtid_binlog_pos 100-10-24
|
|
gtid_current_pos 100-10-24
|
|
gtid_slave_pos
|
|
connection node_2;
|
|
# Node_2
|
|
SHOW global variables like 'gtid%pos';
|
|
Variable_name Value
|
|
gtid_binlog_pos 100-10-24
|
|
gtid_current_pos 100-10-24
|
|
gtid_slave_pos
|
|
disconnect node_2;
|
|
disconnect node_1;
|