mirror of
https://github.com/MariaDB/server.git
synced 2025-07-30 16:24:05 +03:00
MDEV-6120: When slave stops with error, error message should indicate the failing GTID
If replication breaks in GTID mode, it is not trivial to determine the GTID of the failing event group. This is a problem, as such GTID is needed eg. to explicitly set @@gtid_slave_pos to skip to after that event group, or to compare errors on different servers, etc. Fix by ensuring that relevant slave errors logged to the error log include the GTID of the event group containing the problem event.
This commit is contained in:
46
mysql-test/suite/rpl/r/rpl_gtid_errorlog.result
Normal file
46
mysql-test/suite/rpl/r/rpl_gtid_errorlog.result
Normal file
@ -0,0 +1,46 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
*** Test MDEV-6120, output of current GTID when a replication error is logged to the errorlog ***
|
||||
CREATE TABLE t1(a INT PRIMARY KEY);
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SET gtid_seq_no=100;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
SET sql_log_bin=0;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SET sql_log_bin=1;
|
||||
START SLAVE;
|
||||
include/wait_for_slave_sql_error.inc [errno=1062]
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL gtid_slave_pos= "0-1-100";
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
SET @dbug_save= @@debug_dbug;
|
||||
SET debug_dbug= '+d,incident_database_resync_on_replace';
|
||||
REPLACE INTO t1 VALUES (5);
|
||||
SET debug_dbug= @dbug_save;
|
||||
include/wait_for_slave_sql_error.inc [errno=1590]
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=no;
|
||||
SET sql_slave_skip_counter=1;
|
||||
include/start_slave.inc
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
5
|
||||
DROP TABLE t1;
|
||||
include/rpl_end.inc
|
80
mysql-test/suite/rpl/t/rpl_gtid_errorlog.test
Normal file
80
mysql-test/suite/rpl/t/rpl_gtid_errorlog.test
Normal file
@ -0,0 +1,80 @@
|
||||
--source include/have_debug.inc
|
||||
--source include/master-slave.inc
|
||||
|
||||
--echo *** Test MDEV-6120, output of current GTID when a replication error is logged to the errorlog ***
|
||||
--connection master
|
||||
CREATE TABLE t1(a INT PRIMARY KEY);
|
||||
--sync_slave_with_master
|
||||
|
||||
--connection slave
|
||||
--source include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
|
||||
--connection master
|
||||
INSERT INTO t1 VALUES (1);
|
||||
SET gtid_seq_no=100;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
INSERT INTO t1 VALUES (3);
|
||||
INSERT INTO t1 VALUES (4);
|
||||
--save_master_pos
|
||||
|
||||
--connection slave
|
||||
SET sql_log_bin=0;
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SET sql_log_bin=1;
|
||||
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno=1062
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
|
||||
--source include/stop_slave.inc
|
||||
# Skip the problem event from the master.
|
||||
SET GLOBAL gtid_slave_pos= "0-1-100";
|
||||
--source include/start_slave.inc
|
||||
--sync_with_master
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
--connection master
|
||||
|
||||
SET @dbug_save= @@debug_dbug;
|
||||
SET debug_dbug= '+d,incident_database_resync_on_replace';
|
||||
REPLACE INTO t1 VALUES (5);
|
||||
SET debug_dbug= @dbug_save;
|
||||
--save_master_pos
|
||||
|
||||
--connection slave
|
||||
--let $slave_sql_errno=1590
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
# ToDo no need to switch off GTID once MDEV-4937 is fixed
|
||||
--source include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=no;
|
||||
SET sql_slave_skip_counter=1;
|
||||
--source include/start_slave.inc
|
||||
--sync_with_master
|
||||
--source include/stop_slave.inc
|
||||
CHANGE MASTER TO master_use_gtid=slave_pos;
|
||||
--source include/start_slave.inc
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
|
||||
# Check error log for correct messages.
|
||||
let $log_error_= `SELECT @@GLOBAL.log_error`;
|
||||
if(!$log_error_)
|
||||
{
|
||||
# MySQL Server on windows is started with --console and thus
|
||||
# does not know the location of its .err log, use default location
|
||||
let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.2.err;
|
||||
}
|
||||
--let SEARCH_FILE=$log_error_
|
||||
--let SEARCH_PATTERN=Slave SQL: Error 'Duplicate entry .* on query\. .*Query: '.*', Gtid 0-1-100, Internal MariaDB error code:|Slave SQL: Could not execute Write_rows.*table test.t1; Duplicate entry.*, Gtid 0-1-100, Internal MariaDB error
|
||||
--source include/search_pattern_in_file.inc
|
||||
--let SEARCH_PATTERN=Slave SQL: The incident LOST_EVENTS occured on the master\. Message: <none>, Internal MariaDB error code: 1590
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
|
||||
--connection master
|
||||
DROP TABLE t1;
|
||||
|
||||
--source include/rpl_end.inc
|
Reference in New Issue
Block a user