summaryrefslogtreecommitdiff
path: root/mysql-test/suite/binlog_encryption/encryption_combo.test
blob: c24e77f42154696871644e924b970f988f65b91d (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
#
# The test checks that master with decryption capabilities can switch
# between encrypted and unencrypted logs (with server restart), 
# and can feed the mix of encrypted/unencrypted logs to a slave.
#
# The test starts with unencrypted master. 
# It stops replication, generates a few statement and row events
# on the master, then restarts the server with encrypted binlog, 
# generates some more events and restarts it back with unencrypted binlog. 
# Then it resumes replication and checks that all events 
# are replicated successfully. 
#

--source include/have_binlog_format_mixed.inc

--echo #################
--echo # Initialization
--echo #################

--let $rpl_topology= 1->2
--source include/rpl_init.inc

--enable_connect_log

# We stop replication because we want it to happen after the switch

--connection server_2
--disable_connect_log
--source include/stop_slave.inc
--enable_connect_log

--echo #####################################################
--echo # Part 1: unencrypted master
--echo #####################################################

--connection server_1

CREATE TABLE table1_no_encryption (
  pk INT AUTO_INCREMENT PRIMARY KEY,
  ts TIMESTAMP NULL,
  b BLOB
) ENGINE=MyISAM; 

INSERT INTO table1_no_encryption VALUES (NULL,NOW(),'data_no_encryption');
INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption;
FLUSH BINARY LOGS;
SET binlog_format=ROW;
INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption;
INSERT INTO table1_no_encryption SELECT NULL,NOW(),b FROM table1_no_encryption;

# Make sure that binary logs are not encrypted

--let $master_datadir= `SELECT @@datadir`

--let SEARCH_RANGE = 500000
--let SEARCH_FILE= $master_datadir/master-bin.0*
--let SEARCH_PATTERN= table1_no_encryption
--source include/search_pattern_in_file.inc

--echo #####################################################
--echo # Part 2: restart master, now with binlog encryption
--echo #####################################################

--let $rpl_server_parameters= --encrypt-binlog=1
--let $rpl_server_number= 1
--source restart_server.inc

CREATE TABLE table2_to_encrypt (
  pk INT AUTO_INCREMENT PRIMARY KEY,
  ts TIMESTAMP NULL,
  b BLOB
) ENGINE=MyISAM; 

INSERT INTO table2_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt');
INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt;
FLUSH BINARY LOGS;
SET binlog_format=ROW;
INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt;
INSERT INTO table2_to_encrypt SELECT NULL,NOW(),b FROM table2_to_encrypt;

# Make sure that binary logs are encrypted

--let SEARCH_FILE= $master_datadir/master-bin.0*
--let SEARCH_PATTERN= table2_to_encrypt
--source include/search_pattern_in_file.inc

--echo #####################################################
--echo # Part 3: restart master again without encryption
--echo #####################################################

--let $rpl_server_parameters= --encrypt-binlog=0
--let $rpl_server_number= 1
--source restart_server.inc

CREATE TABLE table3_no_encryption (
  pk INT AUTO_INCREMENT PRIMARY KEY,
  ts TIMESTAMP NULL,
  b BLOB
) ENGINE=MyISAM; 

INSERT INTO table3_no_encryption VALUES (NULL,NOW(),'data_no_encryption');
INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption;
INSERT INTO table3_no_encryption SELECT NULL,NOW(),b FROM table3_no_encryption;

--save_master_pos

--echo #####################################################
--echo # Check: resume replication and check that it works
--echo #####################################################
--connection server_2

--disable_connect_log
--source include/start_slave.inc
--enable_connect_log
--sync_with_master

--sorted_result
SHOW TABLES;

--echo ##########
--echo # Cleanup
--echo ##########

--connection server_1

SELECT COUNT(*) FROM table1_no_encryption;
SELECT COUNT(*) FROM table2_to_encrypt;
SELECT COUNT(*) FROM table3_no_encryption;
DROP TABLE table1_no_encryption, table2_to_encrypt, table3_no_encryption;

--save_master_pos

--connection server_2
--sync_with_master

--disable_connect_log
--source include/rpl_end.inc