summaryrefslogtreecommitdiff
path: root/mysql-test/extra/rpl_tests/rpl_row_annotate.test
blob: f3d8006ce011cb851de45d9a89c815b6ccc68083 (plain)
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
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
########################################################################
# WL47: Store in binlog text of statements that caused RBR events
# new event          : ANNOTATE_ROWS_EVENT
# new master option  : --binlog-annotate-row-events
# new slave option   : --replicate-annotate-row-events
########################################################################
--source include/master-slave.inc
connect (master2,127.0.0.1,root,,test,$MASTER_MYPORT,);

connection master;
--disable_query_log

--disable_warnings
DROP DATABASE IF EXISTS test1;
--enable_warnings

CREATE DATABASE test1;
USE test1;

CREATE TABLE t1(a int primary key, b int);
CREATE TABLE t2(a int, b int);
CREATE TABLE t3(a int, b int);
CREATE TABLE t4(a int, b int);
CREATE TABLE xt1(a int, b int);
CREATE TABLE xt2(a int, b int);

CREATE TABLE t5 (
    a INT PRIMARY KEY AUTO_INCREMENT,
    b VARCHAR(10) CHARACTER SET utf8 COLLATE utf8_bin
);

SET SESSION binlog_annotate_row_events = OFF;

INSERT INTO t1 VALUES (0,0), (1,1);

SET SESSION binlog_annotate_row_events = ON;

UPDATE t1 SET b = b + 1;
REPLACE t1 VALUES (1,1), (2,2), (3,3);

INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
INSERT INTO t3 VALUES (1,1), (2,2), (3,3);
DELETE t1, t2 FROM t1 INNER JOIN t2 INNER JOIN t3 WHERE t1.a=t2.a AND t2.a=t3.a;

INSERT INTO xt1 VALUES (1,1), (2,2), (3,3);
INSERT INTO t2 VALUES (1,1), (2,2), (3,3);
DELETE xt1, t2 FROM xt1 INNER JOIN t2 INNER JOIN t3 WHERE xt1.a=t2.a AND t2.a=t3.a;

INSERT INTO xt1 VALUES (1,1), (2,2), (3,3);
INSERT INTO xt2 VALUES (1,1), (2,2), (3,3);
DELETE xt1, xt2 FROM xt1 INNER JOIN xt2 INNER JOIN t3 WHERE xt1.a=xt2.a AND xt2.a=t3.a;

INSERT INTO t5(b) VALUES ('foo'), ('bar'), ('baz');
SET NAMES latin1;
INSERT INTO t5(b) VALUES ('gås');
SET NAMES utf8;
INSERT INTO t5(b) VALUES ('gås');
SET NAMES latin1;

FLUSH LOGS;

--echo ########################################################################
--echo # TABLES ON MASTER
--echo ########################################################################
--enable_query_log

SELECT * FROM t1 ORDER BY a;
SELECT * FROM t2 ORDER BY a;
SELECT * FROM t3 ORDER BY a;
SELECT * FROM t5 ORDER BY a;

sync_slave_with_master;
--echo ########################################################################
--echo # TABLES ON SLAVE: should be the same as on master
--echo ########################################################################
--disable_query_log
USE test1;
--enable_query_log

SELECT * FROM t1 ORDER BY a;
SELECT * FROM t2 ORDER BY a;
SELECT * FROM t3 ORDER BY a;
SELECT * FROM t5 ORDER BY a;

--echo ########################################################################
--echo # EVENTS ON SLAVE
let $annotate= `select @@global.replicate_annotate_row_events`;
if ($annotate)
{
  --echo # The following Annotate_rows events should appear below:
  --echo # - UPDATE t1 SET b = b + 1;
  --echo # - REPLACE t1 VALUES (1,1), (2,2), (3,3);
  --echo # - INSERT INTO t2 VALUES (1,1), (2,2), (3,3)
  --echo # - INSERT INTO t3 VALUES (1,1), (2,2), (3,3)
  --echo # - DELETE t1, t2 FROM <...>
  --echo # - INSERT INTO t2 VALUES (1,1), (2,2), (3,3)
  --echo # - DELETE xt1, t2 FROM <...>
  --echo # - INSERT INTO t5(b) VALUES <...> (3 instances)
}
if (!$annotate)
{
  --echo # No Annotate_rows events should appear below
}
--echo ########################################################################
FLUSH LOGS;

--source include/binlog_start_pos.inc
let $start_pos= `select @binlog_start_pos`;
--replace_column 2 # 5 #
--replace_result $start_pos <start_pos>
--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
--eval show binlog events in 'slave-bin.000001' from $start_pos

--echo # 
--echo ########################################################################
--echo # INSERTs DELAYED ON MASTERs
--echo ########################################################################
connection master;
SET SESSION binlog_annotate_row_events = ON;
INSERT DELAYED INTO test1.t4 VALUES (1,1);
FLUSH TABLES;
SELECT * FROM test1.t4 ORDER BY a;

sync_slave_with_master;
connection master;
sync_slave_with_master;

--echo ########################################################################
--echo # ON SLAVE
--echo # No Annotate_rows events should appear below
--echo ########################################################################
FLUSH LOGS;

--exec $MYSQL --host=127.0.0.1 --port=$SLAVE_MYPORT test -e "show binlog events in 'slave-bin.000002'" > $MYSQLTEST_VARDIR/tmp/annotated_events.txt
perl;
    open F, '<', "$ENV{MYSQLTEST_VARDIR}/tmp/annotated_events.txt" or die;
    binmode STDOUT;
    while (defined ($_ = <F>)) {
        if (/Annotate_rows/) {
            s/[0-9]+\sAnnotate_rows\s[0-9]+\s[0-9]+/# Annotate_rows # #/;
            print($_);
            $_ = <F>;
            s/[0-9]+\sTable_map\s[0-9]+\s[0-9]+\stable_id:\s[0-9]+/# Table_map # # table_id: #/;
            print($_);
        }
    }
EOF

# Clean-up
connection master;
--disable_query_log
DROP DATABASE test1;
sync_slave_with_master;
--enable_query_log

--source include/rpl_end.inc