diff --git a/mysql-test/suite/rpl/r/rpl_gtid_basic.result b/mysql-test/suite/rpl/r/rpl_gtid_basic.result index 858042b55e3..567b3170da0 100644 --- a/mysql-test/suite/rpl/r/rpl_gtid_basic.result +++ b/mysql-test/suite/rpl/r/rpl_gtid_basic.result @@ -61,7 +61,13 @@ include/stop_slave.inc INSERT INTO t1 VALUES (5, "m1a"); INSERT INTO t2 VALUES (5, "i1a"); CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT, +MASTER_USE_GTID=SLAVE_POS; +SET GLOBAL sql_slave_skip_counter=1; +ERROR HY000: When using GTID, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID position. +CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_PORT, MASTER_USE_GTID=CURRENT_POS; +SET GLOBAL sql_slave_skip_counter=10; +ERROR HY000: When using GTID, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID position. include/start_slave.inc SELECT * FROM t1 ORDER BY a; a b diff --git a/mysql-test/suite/rpl/t/rpl_gtid_basic.test b/mysql-test/suite/rpl/t/rpl_gtid_basic.test index f78eca44157..3f2d5e1e321 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_basic.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_basic.test @@ -68,8 +68,16 @@ save_master_pos; connection server_4; --replace_result $MASTER_MYPORT MASTER_PORT +eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT, + MASTER_USE_GTID=SLAVE_POS; +# Test that sql_slave_skip_counter is prevented in GTID mode. +--error ER_SLAVE_SKIP_NOT_IN_GTID +SET GLOBAL sql_slave_skip_counter=1; +--replace_result $MASTER_MYPORT MASTER_PORT eval CHANGE MASTER TO master_host = '127.0.0.1', master_port = $MASTER_MYPORT, MASTER_USE_GTID=CURRENT_POS; +--error ER_SLAVE_SKIP_NOT_IN_GTID +SET GLOBAL sql_slave_skip_counter=10; --source include/start_slave.inc sync_with_master; SELECT * FROM t1 ORDER BY a; diff --git a/mysql-test/suite/rpl/t/rpl_gtid_mdev4485.test b/mysql-test/suite/rpl/t/rpl_gtid_mdev4485.test index 4a0c76d5c1d..6c37ceaff31 100644 --- a/mysql-test/suite/rpl/t/rpl_gtid_mdev4485.test +++ b/mysql-test/suite/rpl/t/rpl_gtid_mdev4485.test @@ -28,6 +28,7 @@ drop table t1; --connection server_2 drop table t2; +--save_master_pos --connection server_3 --sync_with_master 0,'m2' diff --git a/sql/log_event.cc b/sql/log_event.cc index 66f3ff899d1..d0cfa799d3c 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -6112,6 +6112,16 @@ void Binlog_checkpoint_log_event::pack_info(THD *thd, Protocol *protocol) { protocol->store(binlog_file_name, binlog_file_len, &my_charset_bin); } + + +Log_event::enum_skip_reason +Binlog_checkpoint_log_event::do_shall_skip(rpl_group_info *rgi) +{ + enum_skip_reason reason= Log_event::do_shall_skip(rgi); + if (reason == EVENT_SKIP_COUNT) + reason= EVENT_SKIP_NOT; + return reason; +} #endif @@ -6668,6 +6678,16 @@ Gtid_list_log_event::do_apply_event(rpl_group_info *rgi) } +Log_event::enum_skip_reason +Gtid_list_log_event::do_shall_skip(rpl_group_info *rgi) +{ + enum_skip_reason reason= Log_event::do_shall_skip(rgi); + if (reason == EVENT_SKIP_COUNT) + reason= EVENT_SKIP_NOT; + return reason; +} + + void Gtid_list_log_event::pack_info(THD *thd, Protocol *protocol) { diff --git a/sql/log_event.h b/sql/log_event.h index 138ed2c6926..312a9656d01 100644 --- a/sql/log_event.h +++ b/sql/log_event.h @@ -3057,6 +3057,7 @@ public: bool is_valid() const { return binlog_file_name != 0; } #ifdef MYSQL_SERVER bool write(IO_CACHE* file); + enum_skip_reason do_shall_skip(rpl_group_info *rgi); #endif }; @@ -3274,6 +3275,7 @@ public: bool to_packet(String *packet); bool write(IO_CACHE *file); virtual int do_apply_event(rpl_group_info *rgi); + enum_skip_reason do_shall_skip(rpl_group_info *rgi); #endif static bool peek(const char *event_start, uint32 event_len, uint8 checksum_alg, diff --git a/sql/share/errmsg-utf8.txt b/sql/share/errmsg-utf8.txt index 1ed2a2ba462..92a5b6a2ae9 100644 --- a/sql/share/errmsg-utf8.txt +++ b/sql/share/errmsg-utf8.txt @@ -6555,3 +6555,5 @@ ER_CHANGE_SLAVE_PARALLEL_THREADS_ACTIVE eng "Cannot change @@slave_parallel_threads while another change is in progress" ER_PRIOR_COMMIT_FAILED eng "Commit failed due to failure of an earlier commit on which this one depends" +ER_SLAVE_SKIP_NOT_IN_GTID + eng "When using GTID, @@sql_slave_skip_counter can not be used. Instead, setting @@gtid_slave_pos explicitly can be used to skip to after a given GTID position." diff --git a/sql/sys_vars.cc b/sql/sys_vars.cc index 0495ee3e240..69d93968f9f 100644 --- a/sql/sys_vars.cc +++ b/sql/sys_vars.cc @@ -3988,13 +3988,18 @@ bool update_multi_source_variable(sys_var *self_var, THD *thd, static bool update_slave_skip_counter(sys_var *self, THD *thd, Master_info *mi) { + if (mi->using_gtid != Master_info::USE_GTID_NO) + { + my_error(ER_SLAVE_SKIP_NOT_IN_GTID, MYF(0)); + return true; + } if (mi->rli.slave_running) { my_error(ER_SLAVE_MUST_STOP, MYF(0), mi->connection_name.length, mi->connection_name.str); return true; } - /* The value was stored temporarly in thd */ + /* The value was stored temporarily in thd */ mi->rli.slave_skip_counter= thd->variables.slave_skip_counter; return false; }