1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
#
# Test of sql_slave_skip_counter
#
--enable_connect_log
# Create a schema and a table i
# on the 1st master
--connect (master1,127.0.0.1,root,,,$SERVER_MYPORT_1)
--disable_warnings
drop database if exists db;
--enable_warnings
create database db;
create table db.t1 (i int) engine=MyISAM;
--save_master_pos
# Create the same schema and another table
# on the 2nd master
--connect (master2,127.0.0.1,root,,,$SERVER_MYPORT_2)
--disable_warnings
drop database if exists db;
--enable_warnings
create database db;
create table db.t2 (i int) engine=MyISAM;
--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
--disable_connect_log
# Start replication from the first master
--replace_result $SERVER_MYPORT_1 MYPORT_1
eval change master 'master1' to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
master_user='root';
start slave 'master1';
set default_master_connection = 'master1';
--source include/wait_for_slave_to_start.inc
--sync_with_master 0,'master1'
# Start replication from the second master
set default_master_connection = 'master2';
--replace_result $SERVER_MYPORT_2 MYPORT_2
eval change master 'master2' to
master_port=$SERVER_MYPORT_2,
master_host='127.0.0.1',
master_user='root';
# the schema creation will be replicated from the 1st master,
# so we want to skip it in the second replication connection.
# Normally it should have been 2 events, but
# currently Binlog_checkpoint also counts. Maybe we'll need
# to modify the test later
--let $skip_counter_saved = `select @@global.sql_slave_skip_counter`
set global sql_slave_skip_counter = 2;
select @@global.sql_slave_skip_counter;
select @@session.sql_slave_skip_counter;
set session sql_slave_skip_counter = 3;
select @@global.sql_slave_skip_counter;
select @@session.sql_slave_skip_counter;
set global sql_slave_skip_counter= default;
select @@global.sql_slave_skip_counter;
select @@session.sql_slave_skip_counter;
set global sql_slave_skip_counter= 3;
set default_master_connection = 'master1';
select @@session.sql_slave_skip_counter;
set default_master_connection = 'qqq';
select @@session.sql_slave_skip_counter;
set default_master_connection = 'master2';
select @@session.sql_slave_skip_counter;
start slave 'master2';
--source include/wait_for_slave_to_start.inc
set default_master_connection = '';
--enable_connect_log
--connection master2
--save_master_pos
--connection slave
--disable_connect_log
--sync_with_master 0,'master2'
# If the skip_counter worked as expected, we should
# get here (replication shouldn't have broken)
# and should see both tables here
# (drop database which came from master2 shoudn't have been executed
# so t1 should still exist)
show tables in db;
# Cleanup
drop database db;
set default_master_connection = 'master1';
stop slave;
--source include/wait_for_slave_to_stop.inc
set default_master_connection = 'master2';
stop slave;
--source include/wait_for_slave_to_stop.inc
--eval set global sql_slave_skip_counter = $skip_counter_saved
--enable_connect_log
--disconnect slave
--connection master1
drop database db;
--disconnect master1
--connection master2
drop database db;
--disconnect master2
|