mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
MDEV-5754: MySQL 5.5 slaves cannot replicate from MariaDB 10.0
The problem was when a GTID event was part of a group commit, and so contained a commit id. The code that replaces GTID with a BEGIN event for old slaves did not correctly handle this case. Fix the code so that the GTID with commit id can also be properly replaced with a BEGIN query event. The extra two bytes are in the BEGIN event replaced with a dummy, empty time zone string.
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
--source include/master-slave.inc
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
connection master;
|
||||
|
||||
@@ -71,6 +73,52 @@ let $binlog_start= 0;
|
||||
let $binlog_limit=7,5;
|
||||
--source include/show_relaylog_events.inc
|
||||
|
||||
|
||||
--echo *** MDEV-5754: MySQL 5.5 slaves cannot replicate from MariaDB 10.0 ***
|
||||
|
||||
# The problem was that for a group commit, we get commit id into the
|
||||
# GTID event, and there was a bug in the code that replaces GTID with
|
||||
# dummy that failed when commit id was present.
|
||||
#
|
||||
# So setup a group commit in InnoDB.
|
||||
|
||||
--connection master
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
|
||||
--connect (con1,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued1 WAIT_FOR master_cont1';
|
||||
send INSERT INTO t2 VALUES (1);
|
||||
|
||||
--connection master
|
||||
SET debug_sync='now WAIT_FOR master_queued1';
|
||||
|
||||
--connect (con2,127.0.0.1,root,,test,$SERVER_MYPORT_1,)
|
||||
SET debug_sync='commit_after_release_LOCK_prepare_ordered SIGNAL master_queued2';
|
||||
send INSERT INTO t2 VALUES (2);
|
||||
|
||||
--connection master
|
||||
SET debug_sync='now WAIT_FOR master_queued2';
|
||||
SET debug_sync='now SIGNAL master_cont1';
|
||||
|
||||
--connection con1
|
||||
REAP;
|
||||
SET debug_sync='RESET';
|
||||
--connection con2
|
||||
REAP;
|
||||
SET debug_sync='RESET';
|
||||
--connection master
|
||||
SET debug_sync='RESET';
|
||||
let $binlog_limit= 0, 8;
|
||||
--source include/show_binlog_events.inc
|
||||
--save_master_pos
|
||||
|
||||
--connection slave
|
||||
--sync_with_master
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
|
||||
--echo # Test that slave which cannot tolerate holes in binlog stream but
|
||||
--echo # knows the event does not get dummy event
|
||||
|
||||
@@ -106,6 +154,6 @@ set @@global.debug_dbug= @old_slave_dbug;
|
||||
--echo Clean up.
|
||||
connection master;
|
||||
set @@global.binlog_checksum = @old_master_binlog_checksum;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1, t2;
|
||||
sync_slave_with_master;
|
||||
--source include/rpl_end.inc
|
||||
|
Reference in New Issue
Block a user