mirror of
https://github.com/MariaDB/server.git
synced 2025-11-28 17:36:30 +03:00
When @@GLOBAL.gtid_strict_mode=1, then certain operations result in error that would otherwise result in out-of-order binlog files between servers. GTID sequence numbers are now allocated independently per domain; this results in less/no holes in GTID sequences, increasing the likelyhood that diverging binlogs will be caught by the slave when GTID strict mode is enabled.
190 lines
5.2 KiB
Plaintext
190 lines
5.2 KiB
Plaintext
--source include/have_innodb.inc
|
|
--source include/have_debug.inc
|
|
--source include/master-slave.inc
|
|
|
|
--echo *** Test that we check against incorrect table definition for mysql.gtid_slave_pos ***
|
|
--connection master
|
|
CREATE TABLE t1(a INT PRIMARY KEY) ENGINE=InnoDB;
|
|
--sync_slave_with_master
|
|
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos CHANGE seq_no seq_no VARCHAR(20);
|
|
START SLAVE;
|
|
|
|
--connection master
|
|
INSERT INTO t1 VALUES (1);
|
|
|
|
--connection slave
|
|
CALL mtr.add_suppression("Slave: Failed to open mysql.gtid_slave_pos");
|
|
--let $slave_sql_errno=1942
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
--source include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos CHANGE seq_no seq_no BIGINT UNSIGNED NOT NULL;
|
|
ALTER TABLE mysql.gtid_slave_pos DROP PRIMARY KEY;
|
|
ALTER TABLE mysql.gtid_slave_pos ADD PRIMARY KEY (sub_id, domain_id);
|
|
START SLAVE;
|
|
--let $slave_sql_errno=1942
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
--source include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos DROP PRIMARY KEY;
|
|
START SLAVE;
|
|
--let $slave_sql_errno=1942
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
--source include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos ADD PRIMARY KEY (sub_id);
|
|
START SLAVE;
|
|
--let $slave_sql_errno=1942
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
--source include/stop_slave.inc
|
|
ALTER TABLE mysql.gtid_slave_pos DROP PRIMARY KEY;
|
|
ALTER TABLE mysql.gtid_slave_pos ADD PRIMARY KEY (domain_id, sub_id);
|
|
--source include/start_slave.inc
|
|
|
|
--connection master
|
|
--sync_slave_with_master
|
|
|
|
--connection slave
|
|
SELECT * FROM t1;
|
|
|
|
|
|
--echo *** Test requesting an explicit GTID position that conflicts with newer GTIDs of our own in the binlog. ***
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
|
|
--connection master
|
|
RESET MASTER;
|
|
# This insert will be GTID 0-1-1
|
|
INSERT INTO t1 VALUES (2);
|
|
# And this will be GTID 0-1-2
|
|
INSERT INTO t1 VALUES (4);
|
|
|
|
--connection slave
|
|
SET sql_log_bin = 0;
|
|
INSERT INTO t1 VALUES (2);
|
|
SET sql_log_bin = 1;
|
|
INSERT INTO t1 VALUES (3);
|
|
|
|
CHANGE MASTER TO master_use_gtid=current_pos;
|
|
# Most not change @@GLOBAL.gtid_slave_pos in the middle of a transaction.
|
|
BEGIN;
|
|
--error ER_CANT_DO_THIS_DURING_AN_TRANSACTION
|
|
SET GLOBAL gtid_slave_pos = "100-100-100";
|
|
INSERT INTO t1 VALUES (100);
|
|
--error ER_CANT_DO_THIS_DURING_AN_TRANSACTION
|
|
SET GLOBAL gtid_slave_pos = "100-100-100";
|
|
ROLLBACK;
|
|
|
|
# In gtid non-strict mode, we get warnings for setting @@gtid_slave_pos back
|
|
# to earlier than what is in the binlog. In strict mode, we get an error.
|
|
SET GLOBAL gtid_strict_mode= 1;
|
|
--error ER_MASTER_GTID_POS_CONFLICTS_WITH_BINLOG
|
|
SET GLOBAL gtid_slave_pos = "0-1-1";
|
|
--error ER_MASTER_GTID_POS_MISSING_DOMAIN
|
|
SET GLOBAL gtid_slave_pos = "";
|
|
SET GLOBAL gtid_strict_mode= 0;
|
|
SET GLOBAL gtid_slave_pos = "0-1-1";
|
|
SET GLOBAL gtid_slave_pos = "";
|
|
RESET MASTER;
|
|
SET GLOBAL gtid_slave_pos = "0-1-1";
|
|
|
|
START SLAVE;
|
|
--let $wait_condition= SELECT COUNT(*) = 4 FROM t1
|
|
--source include/wait_condition.inc
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
|
|
--echo *** Test slave requesting a GTID that is not present in the master's binlog ***
|
|
--source include/stop_slave.inc
|
|
SET GLOBAL gtid_slave_pos = "0-1-3";
|
|
START SLAVE;
|
|
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("Got fatal error .* from master when reading data from binary log: 'Error: connecting slave requested to start from GTID .*, which is not in the master's binlog'");
|
|
SET sql_log_bin=1;
|
|
--let $slave_io_errno= 1236
|
|
--source include/wait_for_slave_io_error.inc
|
|
--let $status_items= Slave_IO_State, Last_IO_Errno, Last_IO_Error, Using_Gtid
|
|
--source include/show_slave_status.inc
|
|
|
|
--let $rpl_only_running_threads= 1
|
|
--source include/stop_slave.inc
|
|
SET GLOBAL gtid_slave_pos = "0-1-2";
|
|
START SLAVE;
|
|
--source include/wait_for_slave_to_start.inc
|
|
|
|
--connection master
|
|
INSERT INTO t1 VALUES (5);
|
|
|
|
--connection slave
|
|
--let $wait_condition= SELECT COUNT(*) = 5 FROM t1
|
|
--source include/wait_condition.inc
|
|
SELECT * FROM t1 ORDER BY a;
|
|
|
|
|
|
--echo *** MDEV-4278: Slave does not detect that master is not GTID-aware ***
|
|
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
|
|
--connection master
|
|
SET @old_dbug= @@global.DEBUG_DBUG;
|
|
SET GLOBAL debug_dbug="+d,simulate_non_gtid_aware_master";
|
|
|
|
--connection slave
|
|
START SLAVE;
|
|
--let $slave_io_errno= 1233
|
|
--source include/wait_for_slave_io_error.inc
|
|
|
|
--connection master
|
|
SET GLOBAL debug_dbug= @old_dbug;
|
|
INSERT INTO t1 VALUES (6);
|
|
--save_master_pos
|
|
|
|
--connection slave
|
|
START SLAVE;
|
|
--sync_with_master
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("The slave I/O thread stops because master does not support MariaDB global transaction id");
|
|
SET sql_log_bin=1;
|
|
|
|
|
|
--echo *** Test error during record_gtid() (non-xid cases) ***
|
|
|
|
--connection slave
|
|
--source include/stop_slave.inc
|
|
|
|
--connection master
|
|
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
|
|
INSERT INTO t2 VALUES (1);
|
|
--save_master_pos
|
|
|
|
--connection slave
|
|
SET @old_dbug= @@global.DEBUG_DBUG;
|
|
SET GLOBAL debug_dbug="+d,gtid_inject_record_gtid";
|
|
|
|
START SLAVE;
|
|
--let $slave_sql_errno= 1942
|
|
--source include/wait_for_slave_sql_error.inc
|
|
|
|
SET GLOBAL debug_dbug= @old_dbug;
|
|
|
|
START SLAVE SQL_THREAD;
|
|
--sync_with_master
|
|
|
|
SELECT * FROM t2;
|
|
SET sql_log_bin=0;
|
|
CALL mtr.add_suppression("Slave: Could not update replication slave gtid state");
|
|
SET sql_log_bin=1;
|
|
|
|
|
|
--connection master
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
|
|
--source include/rpl_end.inc
|