summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/perfschema/include/binlog_edge_common.inc
blob: 6ecd50afe087c44b8655e483baf7c6e9b34376a8 (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
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
# Test replication, when using special non-replicated tables.
#
# This test involve special statements that use non-replicated tables.
# Changes affecting non replicated tables are never written to the binlog.
# Executing these statements may or may not work, as the statements involved
# are edge cases.
# In MIXED or ROW binlog format, execution should succeed,
# and only partial data (the rows affecting replicated tables only)
# should be written to the binlog.
# In STATEMENT binlog format, execution should
# raise a warning (ER_BINLOG_UNSAFE_STATEMENT) if a non replicated table is
# only read from, or fail with an error (ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES)
# if a non replicated table is written to.
#
# SHOW ERRORS will print in the
# test .result file the exact outcome.

RESET MASTER;

--disable_warnings
drop database if exists my_replicated_db;
--enable_warnings

call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");

create database my_replicated_db;

create table my_replicated_db.my_tx_table(a bigint) engine = innodb;
create table my_replicated_db.my_non_tx_table(a bigint) engine = myisam;
create table my_replicated_db.my_bh_table(a bigint) engine = blackhole;

use test;
drop table if exists marker_start;

use my_replicated_db;

insert into my_tx_table(a)
  values (1000), (2000), (3000);

insert into my_non_tx_table(a)
  values (1000), (2000), (3000);

insert into my_bh_table(a)
  values (1000), (2000), (3000);

use test;
drop table if exists marker_insert_select;

use my_replicated_db;

# Note:
# The queries used here do not make any sense (no semantic).
# What this test is interrested in, is check the behavior
# when replicating queries that mix both:
# - non replicated tables
# - replicated tables

insert into my_tx_table(a)
  select thread_id from performance_schema.threads;

insert into my_non_tx_table(a)
  select thread_id from performance_schema.threads;

insert into my_bh_table(a)
  select thread_id from performance_schema.threads;

# For the information_schema,
# no error is enforced yet.
# Documenting the current behavior

insert into my_tx_table(a)
  select id from information_schema.processlist;

insert into my_non_tx_table(a)
  select id from information_schema.processlist;

insert into my_bh_table(a)
  select id from information_schema.processlist;

insert into my_tx_table(a)
  select thread_id from mysql.general_log;

insert into my_non_tx_table(a)
  select thread_id from mysql.general_log;

insert into my_bh_table(a)
  select thread_id from mysql.general_log;

insert into my_tx_table(a)
  select thread_id from mysql.slow_log;

insert into my_non_tx_table(a)
  select thread_id from mysql.slow_log;

insert into my_bh_table(a)
  select thread_id from mysql.slow_log;

insert into my_tx_table(a)
  select Relay_log_pos from mysql.slave_relay_log_info;

insert into my_non_tx_table(a)
  select Relay_log_pos from mysql.slave_relay_log_info;

insert into my_bh_table(a)
  select Relay_log_pos from mysql.slave_relay_log_info;

insert into my_tx_table(a)
  select Master_log_pos from mysql.slave_master_info;

insert into my_non_tx_table(a)
  select Master_log_pos from mysql.slave_master_info;

insert into my_bh_table(a)
  select Master_log_pos from mysql.slave_master_info;

insert into my_tx_table(a)
  select Relay_log_pos from mysql.slave_worker_info;

insert into my_non_tx_table(a)
  select Relay_log_pos from mysql.slave_worker_info;

insert into my_bh_table(a)
  select Relay_log_pos from mysql.slave_worker_info;

use test;
drop table if exists marker_multi_update;

use my_replicated_db;

--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
update my_tx_table, performance_schema.setup_instruments
  set my_tx_table.a = my_tx_table.a + 1,
  performance_schema.setup_instruments.timed= 'NO';

--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
update my_non_tx_table, performance_schema.setup_instruments
  set my_non_tx_table.a = my_non_tx_table.a + 1,
  performance_schema.setup_instruments.timed= 'NO';

--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
update my_bh_table, performance_schema.setup_instruments
  set my_bh_table.a = my_bh_table.a + 1,
  performance_schema.setup_instruments.timed= 'NO';

use test;
drop table if exists marker_multi_delete;

use my_replicated_db;

insert into performance_schema.setup_actors
  values ('FOO', 'FOO', 'FOO', 'YES', 'YES');

--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
delete my_tx_table.*, performance_schema.setup_actors.*
  from my_tx_table, performance_schema.setup_actors
  where my_tx_table.a != 1000
  or performance_schema.setup_actors.role='FOO';

insert into performance_schema.setup_actors
  values ('BAR', 'BAR', 'BAR', 'YES', 'YES');

--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
delete my_non_tx_table.*, performance_schema.setup_actors.*
  from my_non_tx_table, performance_schema.setup_actors
  where my_non_tx_table.a != 1000
  or performance_schema.setup_actors.role='BAR';

insert into performance_schema.setup_actors
  values ('BAZ', 'BAZ', 'BAZ', 'YES', 'YES');

--error 0, ER_BINLOG_STMT_MODE_AND_NO_REPL_TABLES
delete my_bh_table.*, performance_schema.setup_actors.*
  from my_bh_table, performance_schema.setup_actors
  where my_bh_table.a != 1000
  or performance_schema.setup_actors.role='BAZ';

use test;
drop table if exists marker_end;

drop database my_replicated_db;

--source include/show_binlog_events.inc

# Restore performance_schema.setup_actors, damaged by this script

truncate table performance_schema.setup_actors;
insert into performance_schema.setup_actors values ('%', '%', '%', 'YES', 'YES');