mirror of
https://github.com/MariaDB/server.git
synced 2025-12-24 11:21:21 +03:00
MDEV-9038 Binlog encryption tests
- created binlog_encryption test suite and added it to the default list - moved some tests from rpl, binlog and multisource suites to extra so that they could be re-used in different suites - made minor changes in include files
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
[stmt]
|
||||
binlog-format=statement
|
||||
|
||||
[mix]
|
||||
binlog-format=mixed
|
||||
|
||||
[row]
|
||||
binlog-format=row
|
||||
13
mysql-test/suite/binlog_encryption/binlog_incident.result
Normal file
13
mysql-test/suite/binlog_encryption/binlog_incident.result
Normal file
@@ -0,0 +1,13 @@
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
REPLACE INTO t1 VALUES (4);
|
||||
DROP TABLE t1;
|
||||
FLUSH LOGS;
|
||||
Contain RELOAD DATABASE
|
||||
0
|
||||
2
mysql-test/suite/binlog_encryption/binlog_incident.test
Normal file
2
mysql-test/suite/binlog_encryption/binlog_incident.test
Normal file
@@ -0,0 +1,2 @@
|
||||
--let $use_remote_mysqlbinlog= 1
|
||||
--source extra/binlog_tests/binlog_incident.inc
|
||||
187
mysql-test/suite/binlog_encryption/binlog_index.result
Normal file
187
mysql-test/suite/binlog_encryption/binlog_index.result
Normal file
@@ -0,0 +1,187 @@
|
||||
call mtr.add_suppression('Attempting backtrace');
|
||||
call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to process registered files that would be purged.');
|
||||
call mtr.add_suppression('MSYQL_BIN_LOG::open failed to sync the index file');
|
||||
call mtr.add_suppression('Turning logging off for the whole duration of the MySQL server process.');
|
||||
call mtr.add_suppression('Could not open .*');
|
||||
call mtr.add_suppression('MSYQL_BIN_LOG::purge_logs failed to clean registers before purging logs.');
|
||||
flush tables;
|
||||
RESET MASTER;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
master-bin.000003 #
|
||||
master-bin.000004 #
|
||||
flush tables;
|
||||
purge binary logs TO 'master-bin.000004';
|
||||
Warnings:
|
||||
Warning 1612 Being purged log master-bin.000001 was not found
|
||||
*** must show a list starting from the 'TO' argument of PURGE ***
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000004 #
|
||||
reset master;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
*** must be a warning master-bin.000001 was not found ***
|
||||
Warnings:
|
||||
Warning 1612 Being purged log master-bin.000001 was not found
|
||||
*** must show one record, of the active binlog, left in the index file after PURGE ***
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000004 #
|
||||
reset master;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
purge binary logs TO 'master-bin.000002';
|
||||
ERROR HY000: Fatal error during log purge
|
||||
show warnings;
|
||||
Level Code Message
|
||||
Warning 1377 a problem with deleting master-bin.000001; consider examining correspondence of your binlog index file to the actual binlog files
|
||||
Error 1377 Fatal error during log purge
|
||||
reset master;
|
||||
# crash_purge_before_update_index
|
||||
flush logs;
|
||||
SET SESSION debug_dbug="+d,crash_purge_before_update_index";
|
||||
purge binary logs TO 'master-bin.000002';
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000001
|
||||
master-bin.000002
|
||||
master-bin.000003
|
||||
|
||||
# crash_purge_non_critical_after_update_index
|
||||
flush logs;
|
||||
SET SESSION debug_dbug="+d,crash_purge_non_critical_after_update_index";
|
||||
purge binary logs TO 'master-bin.000004';
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000004
|
||||
master-bin.000005
|
||||
|
||||
# crash_purge_critical_after_update_index
|
||||
flush logs;
|
||||
SET SESSION debug_dbug="+d,crash_purge_critical_after_update_index";
|
||||
purge binary logs TO 'master-bin.000006';
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
|
||||
# crash_create_non_critical_before_update_index
|
||||
SET SESSION debug_dbug="+d,crash_create_non_critical_before_update_index";
|
||||
flush logs;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
|
||||
# crash_create_critical_before_update_index
|
||||
SET SESSION debug_dbug="+d,crash_create_critical_before_update_index";
|
||||
flush logs;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
|
||||
# crash_create_after_update_index
|
||||
SET SESSION debug_dbug="+d,crash_create_after_update_index";
|
||||
flush logs;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
master-bin.000010
|
||||
master-bin.000011
|
||||
|
||||
#
|
||||
# This should put the server in unsafe state and stop
|
||||
# accepting any command. If we inject a fault at this
|
||||
# point and continue the execution the server crashes.
|
||||
#
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
master-bin.000010
|
||||
master-bin.000011
|
||||
|
||||
# fault_injection_registering_index
|
||||
SET SESSION debug_dbug="+d,fault_injection_registering_index";
|
||||
flush logs;
|
||||
ERROR HY000: Can't open file: 'master-bin.000012' (errno: 1 "Operation not permitted")
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
master-bin.000010
|
||||
master-bin.000011
|
||||
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
master-bin.000010
|
||||
master-bin.000011
|
||||
master-bin.000012
|
||||
|
||||
# fault_injection_updating_index
|
||||
SET SESSION debug_dbug="+d,fault_injection_updating_index";
|
||||
flush logs;
|
||||
ERROR HY000: Can't open file: 'master-bin.000013' (errno: 1 "Operation not permitted")
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
master-bin.000010
|
||||
master-bin.000011
|
||||
master-bin.000012
|
||||
|
||||
SET @index=LOAD_FILE('MYSQLTEST_VARDIR/mysqld.1/data//master-bin.index');
|
||||
SELECT @index;
|
||||
@index
|
||||
master-bin.000006
|
||||
master-bin.000007
|
||||
master-bin.000008
|
||||
master-bin.000009
|
||||
master-bin.000010
|
||||
master-bin.000011
|
||||
master-bin.000012
|
||||
master-bin.000013
|
||||
|
||||
SET SESSION debug_dbug="";
|
||||
End of tests
|
||||
1
mysql-test/suite/binlog_encryption/binlog_index.test
Normal file
1
mysql-test/suite/binlog_encryption/binlog_index.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/binlog_tests/binlog_index.inc
|
||||
32
mysql-test/suite/binlog_encryption/binlog_ioerr.result
Normal file
32
mysql-test/suite/binlog_encryption/binlog_ioerr.result
Normal file
@@ -0,0 +1,32 @@
|
||||
CALL mtr.add_suppression("Error writing file 'master-bin'");
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb;
|
||||
INSERT INTO t1 VALUES(0);
|
||||
SET SESSION debug_dbug='+d,fail_binlog_write_1';
|
||||
INSERT INTO t1 VALUES(1);
|
||||
ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
|
||||
INSERT INTO t1 VALUES(2);
|
||||
ERROR HY000: Error writing file 'master-bin' (errno: 28 "No space left on device")
|
||||
SET SESSION debug_dbug='';
|
||||
INSERT INTO t1 VALUES(3);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
0
|
||||
3
|
||||
SHOW BINLOG EVENTS;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
BINLOG POS Format_desc 1 ENDPOS Server ver: #, Binlog ver: #
|
||||
BINLOG POS Start_encryption 1 ENDPOS
|
||||
BINLOG POS Gtid_list 1 ENDPOS []
|
||||
BINLOG POS Binlog_checkpoint 1 ENDPOS master-bin.000001
|
||||
BINLOG POS Gtid 1 ENDPOS GTID 0-1-1
|
||||
BINLOG POS Query 1 ENDPOS use `test`; CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=innodb
|
||||
BINLOG POS Gtid 1 ENDPOS BEGIN GTID 0-1-2
|
||||
BINLOG POS Query 1 ENDPOS use `test`; INSERT INTO t1 VALUES(0)
|
||||
BINLOG POS Xid 1 ENDPOS COMMIT /* XID */
|
||||
BINLOG POS Gtid 1 ENDPOS BEGIN GTID 0-1-3
|
||||
BINLOG POS Gtid 1 ENDPOS BEGIN GTID 0-1-4
|
||||
BINLOG POS Gtid 1 ENDPOS BEGIN GTID 0-1-5
|
||||
BINLOG POS Query 1 ENDPOS use `test`; INSERT INTO t1 VALUES(3)
|
||||
BINLOG POS Xid 1 ENDPOS COMMIT /* XID */
|
||||
DROP TABLE t1;
|
||||
1
mysql-test/suite/binlog_encryption/binlog_ioerr.test
Normal file
1
mysql-test/suite/binlog_encryption/binlog_ioerr.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/binlog_tests/binlog_ioerr.inc
|
||||
@@ -0,0 +1 @@
|
||||
--max-binlog-size=8192
|
||||
@@ -0,0 +1,19 @@
|
||||
RESET MASTER;
|
||||
create table t3 (f text character set utf8);
|
||||
create table t4 (f text character set cp932);
|
||||
flush logs;
|
||||
rename table t3 to t03, t4 to t04;
|
||||
select HEX(f) from t03;
|
||||
HEX(f)
|
||||
E382BD
|
||||
select HEX(f) from t3;
|
||||
HEX(f)
|
||||
E382BD
|
||||
select HEX(f) from t04;
|
||||
HEX(f)
|
||||
835C
|
||||
select HEX(f) from t4;
|
||||
HEX(f)
|
||||
835C
|
||||
drop table t3, t4, t03, t04;
|
||||
End of 5.0 tests
|
||||
@@ -0,0 +1,2 @@
|
||||
--let $use_remote_mysqlbinlog= 1
|
||||
--source extra/binlog_tests/binlog_mysqlbinlog-cp932.inc
|
||||
@@ -0,0 +1 @@
|
||||
--timezone=GMT-3 --binlog-do-db=test1 --binlog-do-db=test2 --binlog-do-db=test3 --binlog-checksum=NONE
|
||||
724
mysql-test/suite/binlog_encryption/binlog_row_annotate.result
Normal file
724
mysql-test/suite/binlog_encryption/binlog_row_annotate.result
Normal file
@@ -0,0 +1,724 @@
|
||||
#####################################################################################
|
||||
# The following Annotate_rows events should appear below:
|
||||
# - INSERT INTO test2.t2 VALUES (1), (2), (3)
|
||||
# - INSERT INTO test3.t3 VALUES (1), (2), (3)
|
||||
# - DELETE test1.t1, test2.t2 FROM <...>
|
||||
# - INSERT INTO test2.t2 VALUES (1), (2), (3)
|
||||
# - DELETE xtest1.xt1, test2.t2 FROM <...>
|
||||
#####################################################################################
|
||||
show binlog events in 'master-bin.000001' from <start_pos>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Start_encryption 1 #
|
||||
master-bin.000001 # Gtid_list 1 # []
|
||||
master-bin.000001 # Binlog_checkpoint 1 # master-bin.000001
|
||||
master-bin.000001 # Gtid 1 # GTID 0-1-1
|
||||
master-bin.000001 # Query 1 # DROP DATABASE IF EXISTS test1
|
||||
master-bin.000001 # Gtid 1 # GTID 0-1-2
|
||||
master-bin.000001 # Query 1 # DROP DATABASE IF EXISTS test2
|
||||
master-bin.000001 # Gtid 1 # GTID 0-1-3
|
||||
master-bin.000001 # Query 1 # DROP DATABASE IF EXISTS test3
|
||||
master-bin.000001 # Gtid 1 # GTID 0-1-4
|
||||
master-bin.000001 # Query 1 # CREATE DATABASE test1
|
||||
master-bin.000001 # Gtid 1 # GTID 0-1-5
|
||||
master-bin.000001 # Query 1 # CREATE DATABASE test2
|
||||
master-bin.000001 # Gtid 1 # GTID 0-1-6
|
||||
master-bin.000001 # Query 1 # CREATE DATABASE test3
|
||||
master-bin.000001 # Gtid 1 # BEGIN GTID 0-1-7
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test1.t1)
|
||||
master-bin.000001 # Write_rows_v1 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
master-bin.000001 # Gtid 1 # BEGIN GTID 0-1-8
|
||||
master-bin.000001 # Annotate_rows 1 # INSERT INTO test2.t2 VALUES (1), (2), (3)
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test2.t2)
|
||||
master-bin.000001 # Write_rows_v1 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
master-bin.000001 # Gtid 1 # BEGIN GTID 0-1-9
|
||||
master-bin.000001 # Annotate_rows 1 # INSERT INTO test3.t3 VALUES (1), (2), (3)
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test3.t3)
|
||||
master-bin.000001 # Write_rows_v1 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
master-bin.000001 # Gtid 1 # BEGIN GTID 0-1-10
|
||||
master-bin.000001 # Annotate_rows 1 # DELETE test1.t1, test2.t2
|
||||
FROM test1.t1 INNER JOIN test2.t2 INNER JOIN test3.t3
|
||||
WHERE test1.t1.a=test2.t2.a AND test2.t2.a=test3.t3.a
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test1.t1)
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test2.t2)
|
||||
master-bin.000001 # Delete_rows_v1 1 # table_id: #
|
||||
master-bin.000001 # Delete_rows_v1 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
master-bin.000001 # Gtid 1 # BEGIN GTID 0-1-11
|
||||
master-bin.000001 # Annotate_rows 1 # INSERT INTO test2.v2 VALUES (1), (2), (3)
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test2.t2)
|
||||
master-bin.000001 # Write_rows_v1 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
master-bin.000001 # Gtid 1 # BEGIN GTID 0-1-12
|
||||
master-bin.000001 # Annotate_rows 1 # DELETE xtest1.xt1, test2.t2
|
||||
FROM xtest1.xt1 INNER JOIN test2.t2 INNER JOIN test3.t3
|
||||
WHERE xtest1.xt1.a=test2.t2.a AND test2.t2.a=test3.t3.a
|
||||
master-bin.000001 # Table_map 1 # table_id: # (test2.t2)
|
||||
master-bin.000001 # Delete_rows_v1 1 # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query 1 # COMMIT
|
||||
master-bin.000001 # Rotate 1 # master-bin.000002;pos=4
|
||||
#
|
||||
#####################################################################################
|
||||
# mysqlbinlog --read-from-remote-server
|
||||
# The following Annotates should appear in this output:
|
||||
# - INSERT INTO test2.t2 VALUES (1), (2), (3)
|
||||
# - INSERT INTO test3.t3 VALUES (1), (2), (3)
|
||||
# - DELETE test1.t1, test2.t2 FROM <...> (with two subsequent Table maps)
|
||||
# - INSERT INTO test2.t2 VALUES (1), (2), (3)
|
||||
# - DELETE xtest1.xt1, test2.t2 FROM <...> (with one subsequent Table map)
|
||||
#####################################################################################
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||
DELIMITER /*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup
|
||||
ROLLBACK/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Gtid list []
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-1 ddl
|
||||
/*!100101 SET @@session.skip_parallel_replication=0*//*!*/;
|
||||
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
|
||||
/*!100001 SET @@session.server_id=1*//*!*/;
|
||||
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
SET @@session.pseudo_thread_id=#/*!*/;
|
||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
|
||||
SET @@session.sql_mode=0/*!*/;
|
||||
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
||||
/*!\C latin1 *//*!*/;
|
||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
DROP DATABASE IF EXISTS test1
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP DATABASE IF EXISTS test2
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP DATABASE IF EXISTS test3
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-4 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=4*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test1
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-5 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=5*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test2
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-6 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test3
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-7
|
||||
/*!100001 SET @@session.gtid_seq_no=7*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test1`.`t1` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-8
|
||||
/*!100001 SET @@session.gtid_seq_no=8*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Annotate_rows:
|
||||
#Q> INSERT INTO test2.t2 VALUES (1), (2), (3)
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-9
|
||||
/*!100001 SET @@session.gtid_seq_no=9*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Annotate_rows:
|
||||
#Q> INSERT INTO test3.t3 VALUES (1), (2), (3)
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test3`.`t3` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test3`.`t3`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test3`.`t3`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test3`.`t3`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-10
|
||||
/*!100001 SET @@session.gtid_seq_no=10*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Annotate_rows:
|
||||
#Q> DELETE test1.t1, test2.t2
|
||||
#Q> FROM test1.t1 INNER JOIN test2.t2 INNER JOIN test3.t3
|
||||
#Q> WHERE test1.t1.a=test2.t2.a AND test2.t2.a=test3.t3
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test1`.`t1` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-11
|
||||
/*!100001 SET @@session.gtid_seq_no=11*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Annotate_rows:
|
||||
#Q> INSERT INTO test2.v2 VALUES (1), (2), (3)
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-12
|
||||
/*!100001 SET @@session.gtid_seq_no=12*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Annotate_rows:
|
||||
#Q> DELETE xtest1.xt1, test2.t2
|
||||
#Q> FROM xtest1.xt1 INNER JOIN test2.t2 INNER JOIN test3.t3
|
||||
#Q> WHERE xtest1.xt1.a=test2.t2.a AND test2.t2.a=test3.t3
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Rotate to master-bin.000002 pos: 4
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
ROLLBACK /* added by mysqlbinlog */;
|
||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
||||
#
|
||||
#####################################################################################
|
||||
# mysqlbinlog --read-from-remote-server --database=test1
|
||||
# The following Annotate should appear in this output:
|
||||
# - DELETE test1.t1, test2.t2 FROM <...>
|
||||
#####################################################################################
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||
DELIMITER /*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup
|
||||
ROLLBACK/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Gtid list []
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-1 ddl
|
||||
/*!100101 SET @@session.skip_parallel_replication=0*//*!*/;
|
||||
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
|
||||
/*!100001 SET @@session.server_id=1*//*!*/;
|
||||
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
SET @@session.pseudo_thread_id=#/*!*/;
|
||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
|
||||
SET @@session.sql_mode=0/*!*/;
|
||||
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
||||
/*!\C latin1 *//*!*/;
|
||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
DROP DATABASE IF EXISTS test1
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-4 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=4*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test1
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-5 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=5*//*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-6 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-7
|
||||
/*!100001 SET @@session.gtid_seq_no=7*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test1`.`t1` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-8
|
||||
/*!100001 SET @@session.gtid_seq_no=8*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-9
|
||||
/*!100001 SET @@session.gtid_seq_no=9*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-10
|
||||
/*!100001 SET @@session.gtid_seq_no=10*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Annotate_rows:
|
||||
#Q> DELETE test1.t1, test2.t2
|
||||
#Q> FROM test1.t1 INNER JOIN test2.t2 INNER JOIN test3.t3
|
||||
#Q> WHERE test1.t1.a=test2.t2.a AND test2.t2.a=test3.t3
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test1`.`t1` mapped to number #
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id #
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
'/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-11
|
||||
/*!100001 SET @@session.gtid_seq_no=11*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-12
|
||||
/*!100001 SET @@session.gtid_seq_no=12*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Rotate to master-bin.000002 pos: 4
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
ROLLBACK /* added by mysqlbinlog */;
|
||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
||||
#
|
||||
#####################################################################################
|
||||
# mysqlbinlog --read-from-remote-server --skip-annotate-row-events
|
||||
# No Annotates should appear in this output
|
||||
#####################################################################################
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
||||
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
|
||||
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
||||
DELIMITER /*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Start: binlog v 4, server v #.##.## created 010909 4:46:40 at startup
|
||||
ROLLBACK/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Gtid list []
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Binlog checkpoint master-bin.000001
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-1 ddl
|
||||
/*!100101 SET @@session.skip_parallel_replication=0*//*!*/;
|
||||
/*!100001 SET @@session.gtid_domain_id=0*//*!*/;
|
||||
/*!100001 SET @@session.server_id=1*//*!*/;
|
||||
/*!100001 SET @@session.gtid_seq_no=1*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
SET @@session.pseudo_thread_id=#/*!*/;
|
||||
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;
|
||||
SET @@session.sql_mode=0/*!*/;
|
||||
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
||||
/*!\C latin1 *//*!*/;
|
||||
SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
||||
SET @@session.lc_time_names=0/*!*/;
|
||||
SET @@session.collation_database=DEFAULT/*!*/;
|
||||
DROP DATABASE IF EXISTS test1
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-2 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=2*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP DATABASE IF EXISTS test2
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-3 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=3*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
DROP DATABASE IF EXISTS test3
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-4 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=4*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test1
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-5 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=5*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test2
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-6 ddl
|
||||
/*!100001 SET @@session.gtid_seq_no=6*//*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
CREATE DATABASE test3
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-7
|
||||
/*!100001 SET @@session.gtid_seq_no=7*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test1`.`t1` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test1`.`t1`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-8
|
||||
/*!100001 SET @@session.gtid_seq_no=8*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-9
|
||||
/*!100001 SET @@session.gtid_seq_no=9*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test3`.`t3` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test3`.`t3`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test3`.`t3`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test3`.`t3`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-10
|
||||
/*!100001 SET @@session.gtid_seq_no=10*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test1`.`t1` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test1`.`t1`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-11
|
||||
/*!100001 SET @@session.gtid_seq_no=11*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Write_rows: table id # flags: STMT_END_F
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### INSERT INTO `test2`.`t2`
|
||||
### SET
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # GTID 0-1-12
|
||||
/*!100001 SET @@session.gtid_seq_no=12*//*!*/;
|
||||
BEGIN
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Table_map: `test2`.`t2` mapped to number #
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Delete_rows: table id # flags: STMT_END_F
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=3 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=2 /* INT meta=0 nullable=1 is_null=0 */
|
||||
### DELETE FROM `test2`.`t2`
|
||||
### WHERE
|
||||
### @1=1 /* INT meta=0 nullable=1 is_null=0 */
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Query thread_id=# exec_time=# error_code=0
|
||||
SET TIMESTAMP=1000000000/*!*/;
|
||||
COMMIT
|
||||
/*!*/;
|
||||
# at #
|
||||
#010909 4:46:40 server id # end_log_pos # Rotate to master-bin.000002 pos: 4
|
||||
DELIMITER ;
|
||||
# End of log file
|
||||
ROLLBACK /* added by mysqlbinlog */;
|
||||
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
||||
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
||||
@@ -0,0 +1,2 @@
|
||||
--let $use_remote_mysqlbinlog= 1
|
||||
--source extra/binlog_tests/binlog_row_annotate.inc
|
||||
108
mysql-test/suite/binlog_encryption/binlog_write_error.result
Normal file
108
mysql-test/suite/binlog_encryption/binlog_write_error.result
Normal file
@@ -0,0 +1,108 @@
|
||||
#
|
||||
# Initialization
|
||||
#
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP PROCEDURE IF EXISTS p2;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP TRIGGER IF EXISTS tr2;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
#
|
||||
# Test injecting binlog write error when executing queries
|
||||
#
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t1 (a INT);
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
INSERT INTO t1 VALUES (4),(5),(6);
|
||||
INSERT INTO t1 VALUES (4),(5),(6);
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
UPDATE t1 set a=a+1;
|
||||
UPDATE t1 set a=a+1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t1 VALUES (new.a + 100);
|
||||
CREATE TRIGGER tr1 AFTER INSERT ON t1 FOR EACH ROW INSERT INTO t1 VALUES (new.a + 100);
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP TRIGGER tr1;
|
||||
DROP TRIGGER tr1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
ALTER TABLE t1 ADD (b INT);
|
||||
ALTER TABLE t1 ADD (b INT);
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
CREATE VIEW v1 AS SELECT a FROM t1;
|
||||
CREATE VIEW v1 AS SELECT a FROM t1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP VIEW v1;
|
||||
DROP VIEW v1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
CREATE PROCEDURE p1(OUT rows INT) SELECT count(*) INTO rows FROM t1;
|
||||
CREATE PROCEDURE p1(OUT rows INT) SELECT count(*) INTO rows FROM t1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP PROCEDURE p1;
|
||||
DROP PROCEDURE p1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
CREATE FUNCTION f1() RETURNS INT return 1;
|
||||
CREATE FUNCTION f1() RETURNS INT return 1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP FUNCTION f1;
|
||||
DROP FUNCTION f1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
CREATE USER user1;
|
||||
CREATE USER user1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
SET GLOBAL debug_dbug='d,injecting_fault_writing';
|
||||
DROP USER user1;
|
||||
DROP USER user1;
|
||||
ERROR HY000: Error writing file 'master-bin' ((errno: #)
|
||||
SET GLOBAL debug_dbug='';
|
||||
#
|
||||
# Cleanup
|
||||
#
|
||||
DROP TABLE IF EXISTS t1, t2;
|
||||
DROP FUNCTION IF EXISTS f1;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
DROP TRIGGER IF EXISTS tr1;
|
||||
DROP VIEW IF EXISTS v1, v2;
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/binlog_tests/binlog_write_error.inc
|
||||
@@ -0,0 +1 @@
|
||||
--skip-stack-trace --skip-core-file --loose-debug-dbug=+d,xa_recover_expect_master_bin_000004
|
||||
216
mysql-test/suite/binlog_encryption/binlog_xa_recover.result
Normal file
216
mysql-test/suite/binlog_encryption/binlog_xa_recover.result
Normal file
@@ -0,0 +1,216 @@
|
||||
SET GLOBAL max_binlog_size= 4096;
|
||||
SET GLOBAL innodb_flush_log_at_trx_commit= 1;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb;
|
||||
INSERT INTO t1 VALUES (100, REPEAT("x", 4100));
|
||||
INSERT INTO t1 VALUES (101, REPEAT("x", 4100));
|
||||
INSERT INTO t1 VALUES (102, REPEAT("x", 4100));
|
||||
SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con1_wait WAIT_FOR con1_cont";
|
||||
SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con1_ready WAIT_FOR _ever";
|
||||
INSERT INTO t1 VALUES (1, REPEAT("x", 4100));
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con1_wait";
|
||||
SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con2_wait WAIT_FOR con2_cont";
|
||||
SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con2_ready WAIT_FOR _ever";
|
||||
INSERT INTO t1 VALUES (2, NULL);
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con2_wait";
|
||||
SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con3_wait WAIT_FOR con3_cont";
|
||||
SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con3_ready WAIT_FOR _ever";
|
||||
INSERT INTO t1 VALUES (3, REPEAT("x", 4100));
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con3_wait";
|
||||
SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL con4_wait WAIT_FOR con4_cont";
|
||||
SET SESSION debug_dbug="+d,crash_commit_after_log";
|
||||
INSERT INTO t1 VALUES (4, NULL);
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con4_wait";
|
||||
SET DEBUG_SYNC= "now SIGNAL con1_cont";
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con1_ready";
|
||||
SET DEBUG_SYNC= "now SIGNAL con2_cont";
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con2_ready";
|
||||
SET DEBUG_SYNC= "now SIGNAL con3_cont";
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con3_ready";
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
master-bin.000003 #
|
||||
master-bin.000004 #
|
||||
master-bin.000005 #
|
||||
master-bin.000006 #
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000003 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000003 # Start_encryption # #
|
||||
master-bin.000003 # Gtid_list # # [#-#-#]
|
||||
master-bin.000003 # Binlog_checkpoint # # master-bin.000002
|
||||
master-bin.000003 # Binlog_checkpoint # # master-bin.000003
|
||||
master-bin.000003 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000003 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000003 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000003 # Xid # # COMMIT /* XID */
|
||||
master-bin.000003 # Rotate # # master-bin.000004;pos=POS
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000004 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000004 # Start_encryption # #
|
||||
master-bin.000004 # Gtid_list # # [#-#-#]
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000003
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000004
|
||||
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000004 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000004 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000004 # Xid # # COMMIT /* XID */
|
||||
master-bin.000004 # Rotate # # master-bin.000005;pos=POS
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000005 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000005 # Start_encryption # #
|
||||
master-bin.000005 # Gtid_list # # [#-#-#]
|
||||
master-bin.000005 # Binlog_checkpoint # # master-bin.000004
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000005 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000005 # Xid # # COMMIT /* XID */
|
||||
master-bin.000005 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000005 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000005 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000005 # Xid # # COMMIT /* XID */
|
||||
master-bin.000005 # Rotate # # master-bin.000006;pos=POS
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000006 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000006 # Start_encryption # #
|
||||
master-bin.000006 # Gtid_list # # [#-#-#]
|
||||
master-bin.000006 # Binlog_checkpoint # # master-bin.000004
|
||||
PURGE BINARY LOGS TO "master-bin.000006";
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000004 #
|
||||
master-bin.000005 #
|
||||
master-bin.000006 #
|
||||
SET DEBUG_SYNC= "now SIGNAL con4_cont";
|
||||
Got one of the listed errors
|
||||
SELECT a FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
100
|
||||
101
|
||||
102
|
||||
Test that with multiple binlog checkpoints, recovery starts from the last one.
|
||||
SET GLOBAL max_binlog_size= 4096;
|
||||
SET GLOBAL innodb_flush_log_at_trx_commit= 1;
|
||||
RESET MASTER;
|
||||
SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con10_ready WAIT_FOR con10_cont";
|
||||
INSERT INTO t1 VALUES (10, REPEAT("x", 4100));
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con10_ready";
|
||||
SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con11_ready WAIT_FOR con11_cont";
|
||||
INSERT INTO t1 VALUES (11, REPEAT("x", 4100));
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con11_ready";
|
||||
SET DEBUG_SYNC= "commit_after_group_release_commit_ordered SIGNAL con12_ready WAIT_FOR con12_cont";
|
||||
INSERT INTO t1 VALUES (12, REPEAT("x", 4100));
|
||||
SET DEBUG_SYNC= "now WAIT_FOR con12_ready";
|
||||
INSERT INTO t1 VALUES (13, NULL);
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
master-bin.000003 #
|
||||
master-bin.000004 #
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000004 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000004 # Start_encryption # #
|
||||
master-bin.000004 # Gtid_list # # [#-#-#]
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000001
|
||||
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000004 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000004 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000004 # Xid # # COMMIT /* XID */
|
||||
SET DEBUG_SYNC= "now SIGNAL con10_cont";
|
||||
SET @old_dbug= @@global.DEBUG_DBUG;
|
||||
SET GLOBAL debug_dbug="+d,binlog_background_checkpoint_processed";
|
||||
SET DEBUG_SYNC= "now SIGNAL con12_cont";
|
||||
SET DEBUG_SYNC= "now WAIT_FOR binlog_background_checkpoint_processed";
|
||||
SET GLOBAL debug_dbug= @old_dbug;
|
||||
SET DEBUG_SYNC= "now SIGNAL con11_cont";
|
||||
Checking that master-bin.000004 is the last binlog checkpoint
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000004 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000004 # Start_encryption # #
|
||||
master-bin.000004 # Gtid_list # # [#-#-#]
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000001
|
||||
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000004 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000004 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000004 # Xid # # COMMIT /* XID */
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000002
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000004
|
||||
Now crash the server
|
||||
SET SESSION debug_dbug="+d,crash_commit_after_log";
|
||||
INSERT INTO t1 VALUES (14, NULL);
|
||||
Got one of the listed errors
|
||||
SELECT a FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
100
|
||||
101
|
||||
102
|
||||
*** Check that recovery works if we crashed early during rotate, before
|
||||
*** binlog checkpoint event could be written.
|
||||
SET GLOBAL max_binlog_size= 4096;
|
||||
SET GLOBAL innodb_flush_log_at_trx_commit= 1;
|
||||
RESET MASTER;
|
||||
INSERT INTO t1 VALUES (21, REPEAT("x", 4100));
|
||||
INSERT INTO t1 VALUES (22, REPEAT("x", 4100));
|
||||
INSERT INTO t1 VALUES (23, REPEAT("x", 4100));
|
||||
SET SESSION debug_dbug="+d,crash_before_write_checkpoint_event";
|
||||
INSERT INTO t1 VALUES (24, REPEAT("x", 4100));
|
||||
Got one of the listed errors
|
||||
SELECT a FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
21
|
||||
22
|
||||
23
|
||||
24
|
||||
100
|
||||
101
|
||||
102
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
master-bin.000003 #
|
||||
master-bin.000004 #
|
||||
master-bin.000005 #
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000004 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000004 # Start_encryption # #
|
||||
master-bin.000004 # Gtid_list # # [#-#-#]
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000003
|
||||
master-bin.000004 # Binlog_checkpoint # # master-bin.000004
|
||||
master-bin.000004 # Gtid # # BEGIN GTID #-#-#
|
||||
master-bin.000004 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000004 # Write_rows_v1 # # table_id: # flags: STMT_END_F
|
||||
master-bin.000004 # Xid # # COMMIT /* XID */
|
||||
master-bin.000004 # Rotate # # master-bin.000005;pos=POS
|
||||
DROP TABLE t1;
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/binlog_tests/binlog_xa_recover.inc
|
||||
4
mysql-test/suite/binlog_encryption/disabled.def
Normal file
4
mysql-test/suite/binlog_encryption/disabled.def
Normal file
@@ -0,0 +1,4 @@
|
||||
encrypted_master_switch_to_unencrypted : MDEV-11288 - server crash
|
||||
binlog_incident : MDEV-11319 - mysqlbinlog crash or failure
|
||||
encrypted_master_lost_key : MDEV-11323 - unspecified behavior for IO thread
|
||||
rpl_checksum_cache : MDEV-11486 - sporadic failure in IO thread
|
||||
622
mysql-test/suite/binlog_encryption/encrypted_master.result
Normal file
622
mysql-test/suite/binlog_encryption/encrypted_master.result
Normal file
@@ -0,0 +1,622 @@
|
||||
#################
|
||||
# Initialization
|
||||
#################
|
||||
include/rpl_init.inc [topology=1->2]
|
||||
connection server_2;
|
||||
include/stop_slave_sql.inc
|
||||
connection server_1;
|
||||
SET @binlog_annotate_row_events.save= @@global.binlog_annotate_row_events;
|
||||
SET @binlog_checksum.save= @@global.binlog_checksum;
|
||||
SET @master_verify_checksum.save= @@global.master_verify_checksum;
|
||||
SET @binlog_row_image.save= @@global.binlog_row_image;
|
||||
####################################################
|
||||
# Test 1: simple binlog, no checksum, no annotation
|
||||
####################################################
|
||||
connection server_1;
|
||||
SET binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_checksum= NONE;
|
||||
SET GLOBAL master_verify_checksum= 0;
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
CREATE DATABASE database_name_to_encrypt;
|
||||
USE database_name_to_encrypt;
|
||||
CREATE USER user_name_to_encrypt;
|
||||
GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt;
|
||||
SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt');
|
||||
CREATE TABLE innodb_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB,
|
||||
virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL,
|
||||
pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) PERSISTENT,
|
||||
INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE (int_column_name_to_encrypt)
|
||||
SUBPARTITION BY KEY (int_column_name_to_encrypt)
|
||||
SUBPARTITIONS 2 (
|
||||
PARTITION partition0_name_to_encrypt VALUES LESS THAN (100),
|
||||
PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE)
|
||||
)
|
||||
;
|
||||
CREATE TABLE myisam_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
char_column_name_to_encrypt VARCHAR(255),
|
||||
datetime_column_name_to_encrypt DATETIME,
|
||||
text_column_name_to_encrypt TEXT
|
||||
) ENGINE=MyISAM;
|
||||
CREATE TABLE aria_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
varchar_column_name_to_encrypt VARCHAR(1024),
|
||||
enum_column_name_to_encrypt ENUM(
|
||||
'enum_value1_to_encrypt',
|
||||
'enum_value2_to_encrypt'
|
||||
),
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB
|
||||
) ENGINE=Aria;
|
||||
CREATE TRIGGER trigger_name_to_encrypt
|
||||
AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW
|
||||
INSERT INTO aria_table_name_to_encrypt (varchar_column_name_to_encrypt)
|
||||
VALUES (NEW.char_column_name_to_encrypt);
|
||||
CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT)
|
||||
RETURNS VARCHAR(64)
|
||||
RETURN 'func_result_to_encrypt';
|
||||
CREATE PROCEDURE proc_name_to_encrypt (
|
||||
IN proc_in_parameter_to_encrypt CHAR(32),
|
||||
OUT proc_out_parameter_to_encrypt INT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt';
|
||||
DECLARE cursor_name_to_encrypt CURSOR FOR
|
||||
SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt;
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
BEGIN
|
||||
SET @stmt_var_to_encrypt = CONCAT(
|
||||
"SELECT
|
||||
IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt')
|
||||
FROM innodb_table_name_to_encrypt
|
||||
INTO OUTFILE '", proc_in_parameter_to_encrypt, "'");
|
||||
PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt;
|
||||
EXECUTE stmt_to_encrypt;
|
||||
DEALLOCATE PREPARE stmt_to_encrypt;
|
||||
END;
|
||||
OPEN cursor_name_to_encrypt;
|
||||
proc_label_to_encrypt: LOOP
|
||||
FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt;
|
||||
END LOOP;
|
||||
CLOSE cursor_name_to_encrypt;
|
||||
END $$
|
||||
CREATE SERVER server_name_to_encrypt
|
||||
FOREIGN DATA WRAPPER mysql
|
||||
OPTIONS (HOST 'host_name_to_encrypt');
|
||||
connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt;
|
||||
CREATE TEMPORARY TABLE tmp_table_name_to_encrypt (
|
||||
float_column_name_to_encrypt FLOAT,
|
||||
binary_column_name_to_encrypt BINARY(64)
|
||||
);
|
||||
disconnect con1;
|
||||
connection server_1;
|
||||
CREATE INDEX index_name_to_encrypt
|
||||
ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt);
|
||||
ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8;
|
||||
ALTER TABLE innodb_table_name_to_encrypt
|
||||
MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL
|
||||
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
;
|
||||
ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt;
|
||||
ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt;
|
||||
set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt';
|
||||
set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt';
|
||||
INSERT INTO view_name_to_encrypt VALUES
|
||||
(1, NOW(6), COLUMN_CREATE('dyncol1_name_to_encrypt',@user_var1_to_encrypt), NULL, NULL),
|
||||
(2, NOW(6), COLUMN_CREATE(@user_var2_to_encrypt,'dyncol2_val_to_encrypt'), NULL, NULL)
|
||||
;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE counter_name_to_encrypt INT DEFAULT 0;
|
||||
START TRANSACTION;
|
||||
WHILE counter_name_to_encrypt<12 DO
|
||||
INSERT INTO innodb_table_name_to_encrypt
|
||||
SELECT NULL, NOW(6), blob_column_name_to_encrypt, NULL, NULL
|
||||
FROM innodb_table_name_to_encrypt
|
||||
ORDER BY int_column_name_to_encrypt;
|
||||
SET counter_name_to_encrypt = counter_name_to_encrypt+1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END
|
||||
$$
|
||||
INSERT INTO myisam_table_name_to_encrypt
|
||||
SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt';
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt);
|
||||
TRUNCATE TABLE aria_table_name_to_encrypt;
|
||||
LOAD DATA INFILE 'file_name_to_encrypt' INTO TABLE aria_table_name_to_encrypt
|
||||
(enum_column_name_to_encrypt);
|
||||
LOAD DATA LOCAL INFILE '<DATADIR>/database_name_to_encrypt/file_name_to_encrypt'
|
||||
INTO TABLE aria_table_name_to_encrypt (enum_column_name_to_encrypt);
|
||||
UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt =
|
||||
COLUMN_CREATE('dyncol1_name_to_encrypt',func_name_to_encrypt(0))
|
||||
;
|
||||
DELETE FROM aria_table_name_to_encrypt ORDER BY int_column_name_to_encrypt LIMIT 10;
|
||||
ANALYZE TABLE myisam_table_name_to_encrypt;
|
||||
CHECK TABLE aria_table_name_to_encrypt;
|
||||
CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt;
|
||||
RENAME USER user_name_to_encrypt to new_user_name_to_encrypt;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt;
|
||||
DROP DATABASE database_name_to_encrypt;
|
||||
DROP USER new_user_name_to_encrypt;
|
||||
DROP SERVER server_name_to_encrypt;
|
||||
####################################################
|
||||
# Test 2: binlog with checksum, no annotated events
|
||||
####################################################
|
||||
connection server_1;
|
||||
SET binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_checksum= CRC32;
|
||||
SET GLOBAL master_verify_checksum= 1;
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
CREATE DATABASE database_name_to_encrypt;
|
||||
USE database_name_to_encrypt;
|
||||
CREATE USER user_name_to_encrypt;
|
||||
GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt;
|
||||
SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt');
|
||||
CREATE TABLE innodb_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB,
|
||||
virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL,
|
||||
pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) PERSISTENT,
|
||||
INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE (int_column_name_to_encrypt)
|
||||
SUBPARTITION BY KEY (int_column_name_to_encrypt)
|
||||
SUBPARTITIONS 2 (
|
||||
PARTITION partition0_name_to_encrypt VALUES LESS THAN (100),
|
||||
PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE)
|
||||
)
|
||||
;
|
||||
CREATE TABLE myisam_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
char_column_name_to_encrypt VARCHAR(255),
|
||||
datetime_column_name_to_encrypt DATETIME,
|
||||
text_column_name_to_encrypt TEXT
|
||||
) ENGINE=MyISAM;
|
||||
CREATE TABLE aria_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
varchar_column_name_to_encrypt VARCHAR(1024),
|
||||
enum_column_name_to_encrypt ENUM(
|
||||
'enum_value1_to_encrypt',
|
||||
'enum_value2_to_encrypt'
|
||||
),
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB
|
||||
) ENGINE=Aria;
|
||||
CREATE TRIGGER trigger_name_to_encrypt
|
||||
AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW
|
||||
INSERT INTO aria_table_name_to_encrypt (varchar_column_name_to_encrypt)
|
||||
VALUES (NEW.char_column_name_to_encrypt);
|
||||
CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT)
|
||||
RETURNS VARCHAR(64)
|
||||
RETURN 'func_result_to_encrypt';
|
||||
CREATE PROCEDURE proc_name_to_encrypt (
|
||||
IN proc_in_parameter_to_encrypt CHAR(32),
|
||||
OUT proc_out_parameter_to_encrypt INT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt';
|
||||
DECLARE cursor_name_to_encrypt CURSOR FOR
|
||||
SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt;
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
BEGIN
|
||||
SET @stmt_var_to_encrypt = CONCAT(
|
||||
"SELECT
|
||||
IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt')
|
||||
FROM innodb_table_name_to_encrypt
|
||||
INTO OUTFILE '", proc_in_parameter_to_encrypt, "'");
|
||||
PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt;
|
||||
EXECUTE stmt_to_encrypt;
|
||||
DEALLOCATE PREPARE stmt_to_encrypt;
|
||||
END;
|
||||
OPEN cursor_name_to_encrypt;
|
||||
proc_label_to_encrypt: LOOP
|
||||
FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt;
|
||||
END LOOP;
|
||||
CLOSE cursor_name_to_encrypt;
|
||||
END $$
|
||||
CREATE SERVER server_name_to_encrypt
|
||||
FOREIGN DATA WRAPPER mysql
|
||||
OPTIONS (HOST 'host_name_to_encrypt');
|
||||
connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt;
|
||||
CREATE TEMPORARY TABLE tmp_table_name_to_encrypt (
|
||||
float_column_name_to_encrypt FLOAT,
|
||||
binary_column_name_to_encrypt BINARY(64)
|
||||
);
|
||||
disconnect con1;
|
||||
connection server_1;
|
||||
CREATE INDEX index_name_to_encrypt
|
||||
ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt);
|
||||
ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8;
|
||||
ALTER TABLE innodb_table_name_to_encrypt
|
||||
MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL
|
||||
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
;
|
||||
ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt;
|
||||
ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt;
|
||||
set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt';
|
||||
set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt';
|
||||
INSERT INTO view_name_to_encrypt VALUES
|
||||
(1, NOW(6), COLUMN_CREATE('dyncol1_name_to_encrypt',@user_var1_to_encrypt), NULL, NULL),
|
||||
(2, NOW(6), COLUMN_CREATE(@user_var2_to_encrypt,'dyncol2_val_to_encrypt'), NULL, NULL)
|
||||
;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE counter_name_to_encrypt INT DEFAULT 0;
|
||||
START TRANSACTION;
|
||||
WHILE counter_name_to_encrypt<12 DO
|
||||
INSERT INTO innodb_table_name_to_encrypt
|
||||
SELECT NULL, NOW(6), blob_column_name_to_encrypt, NULL, NULL
|
||||
FROM innodb_table_name_to_encrypt
|
||||
ORDER BY int_column_name_to_encrypt;
|
||||
SET counter_name_to_encrypt = counter_name_to_encrypt+1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END
|
||||
$$
|
||||
INSERT INTO myisam_table_name_to_encrypt
|
||||
SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt';
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt);
|
||||
TRUNCATE TABLE aria_table_name_to_encrypt;
|
||||
LOAD DATA INFILE 'file_name_to_encrypt' INTO TABLE aria_table_name_to_encrypt
|
||||
(enum_column_name_to_encrypt);
|
||||
LOAD DATA LOCAL INFILE '<DATADIR>/database_name_to_encrypt/file_name_to_encrypt'
|
||||
INTO TABLE aria_table_name_to_encrypt (enum_column_name_to_encrypt);
|
||||
UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt =
|
||||
COLUMN_CREATE('dyncol1_name_to_encrypt',func_name_to_encrypt(0))
|
||||
;
|
||||
DELETE FROM aria_table_name_to_encrypt ORDER BY int_column_name_to_encrypt LIMIT 10;
|
||||
ANALYZE TABLE myisam_table_name_to_encrypt;
|
||||
CHECK TABLE aria_table_name_to_encrypt;
|
||||
CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt;
|
||||
RENAME USER user_name_to_encrypt to new_user_name_to_encrypt;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt;
|
||||
DROP DATABASE database_name_to_encrypt;
|
||||
DROP USER new_user_name_to_encrypt;
|
||||
DROP SERVER server_name_to_encrypt;
|
||||
####################################################
|
||||
# Test 3: binlog with checksum and annotated events
|
||||
####################################################
|
||||
connection server_1;
|
||||
SET binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_checksum= CRC32;
|
||||
SET GLOBAL master_verify_checksum= 1;
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
CREATE DATABASE database_name_to_encrypt;
|
||||
USE database_name_to_encrypt;
|
||||
CREATE USER user_name_to_encrypt;
|
||||
GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt;
|
||||
SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt');
|
||||
CREATE TABLE innodb_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB,
|
||||
virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL,
|
||||
pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) PERSISTENT,
|
||||
INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE (int_column_name_to_encrypt)
|
||||
SUBPARTITION BY KEY (int_column_name_to_encrypt)
|
||||
SUBPARTITIONS 2 (
|
||||
PARTITION partition0_name_to_encrypt VALUES LESS THAN (100),
|
||||
PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE)
|
||||
)
|
||||
;
|
||||
CREATE TABLE myisam_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
char_column_name_to_encrypt VARCHAR(255),
|
||||
datetime_column_name_to_encrypt DATETIME,
|
||||
text_column_name_to_encrypt TEXT
|
||||
) ENGINE=MyISAM;
|
||||
CREATE TABLE aria_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
varchar_column_name_to_encrypt VARCHAR(1024),
|
||||
enum_column_name_to_encrypt ENUM(
|
||||
'enum_value1_to_encrypt',
|
||||
'enum_value2_to_encrypt'
|
||||
),
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB
|
||||
) ENGINE=Aria;
|
||||
CREATE TRIGGER trigger_name_to_encrypt
|
||||
AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW
|
||||
INSERT INTO aria_table_name_to_encrypt (varchar_column_name_to_encrypt)
|
||||
VALUES (NEW.char_column_name_to_encrypt);
|
||||
CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT)
|
||||
RETURNS VARCHAR(64)
|
||||
RETURN 'func_result_to_encrypt';
|
||||
CREATE PROCEDURE proc_name_to_encrypt (
|
||||
IN proc_in_parameter_to_encrypt CHAR(32),
|
||||
OUT proc_out_parameter_to_encrypt INT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt';
|
||||
DECLARE cursor_name_to_encrypt CURSOR FOR
|
||||
SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt;
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
BEGIN
|
||||
SET @stmt_var_to_encrypt = CONCAT(
|
||||
"SELECT
|
||||
IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt')
|
||||
FROM innodb_table_name_to_encrypt
|
||||
INTO OUTFILE '", proc_in_parameter_to_encrypt, "'");
|
||||
PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt;
|
||||
EXECUTE stmt_to_encrypt;
|
||||
DEALLOCATE PREPARE stmt_to_encrypt;
|
||||
END;
|
||||
OPEN cursor_name_to_encrypt;
|
||||
proc_label_to_encrypt: LOOP
|
||||
FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt;
|
||||
END LOOP;
|
||||
CLOSE cursor_name_to_encrypt;
|
||||
END $$
|
||||
CREATE SERVER server_name_to_encrypt
|
||||
FOREIGN DATA WRAPPER mysql
|
||||
OPTIONS (HOST 'host_name_to_encrypt');
|
||||
connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt;
|
||||
CREATE TEMPORARY TABLE tmp_table_name_to_encrypt (
|
||||
float_column_name_to_encrypt FLOAT,
|
||||
binary_column_name_to_encrypt BINARY(64)
|
||||
);
|
||||
disconnect con1;
|
||||
connection server_1;
|
||||
CREATE INDEX index_name_to_encrypt
|
||||
ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt);
|
||||
ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8;
|
||||
ALTER TABLE innodb_table_name_to_encrypt
|
||||
MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL
|
||||
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
;
|
||||
ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt;
|
||||
ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt;
|
||||
set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt';
|
||||
set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt';
|
||||
INSERT INTO view_name_to_encrypt VALUES
|
||||
(1, NOW(6), COLUMN_CREATE('dyncol1_name_to_encrypt',@user_var1_to_encrypt), NULL, NULL),
|
||||
(2, NOW(6), COLUMN_CREATE(@user_var2_to_encrypt,'dyncol2_val_to_encrypt'), NULL, NULL)
|
||||
;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE counter_name_to_encrypt INT DEFAULT 0;
|
||||
START TRANSACTION;
|
||||
WHILE counter_name_to_encrypt<12 DO
|
||||
INSERT INTO innodb_table_name_to_encrypt
|
||||
SELECT NULL, NOW(6), blob_column_name_to_encrypt, NULL, NULL
|
||||
FROM innodb_table_name_to_encrypt
|
||||
ORDER BY int_column_name_to_encrypt;
|
||||
SET counter_name_to_encrypt = counter_name_to_encrypt+1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END
|
||||
$$
|
||||
INSERT INTO myisam_table_name_to_encrypt
|
||||
SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt';
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt);
|
||||
TRUNCATE TABLE aria_table_name_to_encrypt;
|
||||
LOAD DATA INFILE 'file_name_to_encrypt' INTO TABLE aria_table_name_to_encrypt
|
||||
(enum_column_name_to_encrypt);
|
||||
LOAD DATA LOCAL INFILE '<DATADIR>/database_name_to_encrypt/file_name_to_encrypt'
|
||||
INTO TABLE aria_table_name_to_encrypt (enum_column_name_to_encrypt);
|
||||
UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt =
|
||||
COLUMN_CREATE('dyncol1_name_to_encrypt',func_name_to_encrypt(0))
|
||||
;
|
||||
DELETE FROM aria_table_name_to_encrypt ORDER BY int_column_name_to_encrypt LIMIT 10;
|
||||
ANALYZE TABLE myisam_table_name_to_encrypt;
|
||||
CHECK TABLE aria_table_name_to_encrypt;
|
||||
CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt;
|
||||
RENAME USER user_name_to_encrypt to new_user_name_to_encrypt;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt;
|
||||
DROP DATABASE database_name_to_encrypt;
|
||||
DROP USER new_user_name_to_encrypt;
|
||||
DROP SERVER server_name_to_encrypt;
|
||||
####################################################
|
||||
# Test 4: binlog with annotated events and binlog_row_image=minimal
|
||||
####################################################
|
||||
connection server_1;
|
||||
SET binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_checksum= NONE;
|
||||
SET GLOBAL master_verify_checksum= 0;
|
||||
SET GLOBAL binlog_row_image= MINIMAL;
|
||||
SET binlog_row_image= MINIMAL;
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
CREATE DATABASE database_name_to_encrypt;
|
||||
USE database_name_to_encrypt;
|
||||
CREATE USER user_name_to_encrypt;
|
||||
GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt;
|
||||
SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt');
|
||||
CREATE TABLE innodb_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB,
|
||||
virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL,
|
||||
pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) PERSISTENT,
|
||||
INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE (int_column_name_to_encrypt)
|
||||
SUBPARTITION BY KEY (int_column_name_to_encrypt)
|
||||
SUBPARTITIONS 2 (
|
||||
PARTITION partition0_name_to_encrypt VALUES LESS THAN (100),
|
||||
PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE)
|
||||
)
|
||||
;
|
||||
CREATE TABLE myisam_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
char_column_name_to_encrypt VARCHAR(255),
|
||||
datetime_column_name_to_encrypt DATETIME,
|
||||
text_column_name_to_encrypt TEXT
|
||||
) ENGINE=MyISAM;
|
||||
CREATE TABLE aria_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
varchar_column_name_to_encrypt VARCHAR(1024),
|
||||
enum_column_name_to_encrypt ENUM(
|
||||
'enum_value1_to_encrypt',
|
||||
'enum_value2_to_encrypt'
|
||||
),
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB
|
||||
) ENGINE=Aria;
|
||||
CREATE TRIGGER trigger_name_to_encrypt
|
||||
AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW
|
||||
INSERT INTO aria_table_name_to_encrypt (varchar_column_name_to_encrypt)
|
||||
VALUES (NEW.char_column_name_to_encrypt);
|
||||
CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT)
|
||||
RETURNS VARCHAR(64)
|
||||
RETURN 'func_result_to_encrypt';
|
||||
CREATE PROCEDURE proc_name_to_encrypt (
|
||||
IN proc_in_parameter_to_encrypt CHAR(32),
|
||||
OUT proc_out_parameter_to_encrypt INT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt';
|
||||
DECLARE cursor_name_to_encrypt CURSOR FOR
|
||||
SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt;
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
BEGIN
|
||||
SET @stmt_var_to_encrypt = CONCAT(
|
||||
"SELECT
|
||||
IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt')
|
||||
FROM innodb_table_name_to_encrypt
|
||||
INTO OUTFILE '", proc_in_parameter_to_encrypt, "'");
|
||||
PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt;
|
||||
EXECUTE stmt_to_encrypt;
|
||||
DEALLOCATE PREPARE stmt_to_encrypt;
|
||||
END;
|
||||
OPEN cursor_name_to_encrypt;
|
||||
proc_label_to_encrypt: LOOP
|
||||
FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt;
|
||||
END LOOP;
|
||||
CLOSE cursor_name_to_encrypt;
|
||||
END $$
|
||||
CREATE SERVER server_name_to_encrypt
|
||||
FOREIGN DATA WRAPPER mysql
|
||||
OPTIONS (HOST 'host_name_to_encrypt');
|
||||
connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt;
|
||||
CREATE TEMPORARY TABLE tmp_table_name_to_encrypt (
|
||||
float_column_name_to_encrypt FLOAT,
|
||||
binary_column_name_to_encrypt BINARY(64)
|
||||
);
|
||||
disconnect con1;
|
||||
connection server_1;
|
||||
CREATE INDEX index_name_to_encrypt
|
||||
ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt);
|
||||
ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8;
|
||||
ALTER TABLE innodb_table_name_to_encrypt
|
||||
MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL
|
||||
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
;
|
||||
ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt;
|
||||
ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt;
|
||||
set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt';
|
||||
set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt';
|
||||
INSERT INTO view_name_to_encrypt VALUES
|
||||
(1, NOW(6), COLUMN_CREATE('dyncol1_name_to_encrypt',@user_var1_to_encrypt), NULL, NULL),
|
||||
(2, NOW(6), COLUMN_CREATE(@user_var2_to_encrypt,'dyncol2_val_to_encrypt'), NULL, NULL)
|
||||
;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE counter_name_to_encrypt INT DEFAULT 0;
|
||||
START TRANSACTION;
|
||||
WHILE counter_name_to_encrypt<12 DO
|
||||
INSERT INTO innodb_table_name_to_encrypt
|
||||
SELECT NULL, NOW(6), blob_column_name_to_encrypt, NULL, NULL
|
||||
FROM innodb_table_name_to_encrypt
|
||||
ORDER BY int_column_name_to_encrypt;
|
||||
SET counter_name_to_encrypt = counter_name_to_encrypt+1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END
|
||||
$$
|
||||
INSERT INTO myisam_table_name_to_encrypt
|
||||
SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt';
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt);
|
||||
TRUNCATE TABLE aria_table_name_to_encrypt;
|
||||
LOAD DATA INFILE 'file_name_to_encrypt' INTO TABLE aria_table_name_to_encrypt
|
||||
(enum_column_name_to_encrypt);
|
||||
LOAD DATA LOCAL INFILE '<DATADIR>/database_name_to_encrypt/file_name_to_encrypt'
|
||||
INTO TABLE aria_table_name_to_encrypt (enum_column_name_to_encrypt);
|
||||
UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt =
|
||||
COLUMN_CREATE('dyncol1_name_to_encrypt',func_name_to_encrypt(0))
|
||||
;
|
||||
DELETE FROM aria_table_name_to_encrypt ORDER BY int_column_name_to_encrypt LIMIT 10;
|
||||
ANALYZE TABLE myisam_table_name_to_encrypt;
|
||||
CHECK TABLE aria_table_name_to_encrypt;
|
||||
CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt;
|
||||
RENAME USER user_name_to_encrypt to new_user_name_to_encrypt;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt;
|
||||
DROP DATABASE database_name_to_encrypt;
|
||||
DROP USER new_user_name_to_encrypt;
|
||||
DROP SERVER server_name_to_encrypt;
|
||||
#############################
|
||||
# Final checks for the master
|
||||
#############################
|
||||
NOT FOUND /_to_encrypt/ in master-bin.0*
|
||||
NOT FOUND /COMMIT/ in master-bin.0*
|
||||
NOT FOUND /TIMESTAMP/ in master-bin.0*
|
||||
include/save_master_pos.inc
|
||||
#############################
|
||||
# Final checks for the slave
|
||||
#############################
|
||||
connection server_2;
|
||||
include/sync_io_with_master.inc
|
||||
FOUND /_to_encrypt/ in slave-relay-bin.0*
|
||||
FOUND /COMMIT/ in slave-relay-bin.0*
|
||||
FOUND /TIMESTAMP/ in slave-relay-bin.0*
|
||||
include/start_slave.inc
|
||||
include/sync_slave_sql_with_io.inc
|
||||
FOUND /_to_encrypt/ in slave-bin.0*
|
||||
FOUND /COMMIT/ in slave-bin.0*
|
||||
FOUND /TIMESTAMP/ in slave-bin.0*
|
||||
##########
|
||||
# Cleanup
|
||||
##########
|
||||
connection server_1;
|
||||
SET GLOBAL binlog_annotate_row_events= @binlog_annotate_row_events.save;
|
||||
SET GLOBAL binlog_checksum= @binlog_checksum.save;
|
||||
SET GLOBAL master_verify_checksum= @master_verify_checksum.save;
|
||||
SET GLOBAL binlog_row_image= @binlog_row_image.save;
|
||||
include/rpl_end.inc
|
||||
183
mysql-test/suite/binlog_encryption/encrypted_master.test
Normal file
183
mysql-test/suite/binlog_encryption/encrypted_master.test
Normal file
@@ -0,0 +1,183 @@
|
||||
#
|
||||
# The test checks that basic DDL and DML events are encrypted
|
||||
# in the binary log on master.
|
||||
# The test is to be run with all binlog formats
|
||||
# (combinations for rpl_init.inc take care of that).
|
||||
#
|
||||
#
|
||||
# The test runs with the encrypted master and non-encrypted slave.
|
||||
# It generates a sequence of events on master, and checks that
|
||||
# - all events are encrypted on master;
|
||||
# - slave is able to replicate from the master;
|
||||
# - relay logs and binary logs are not encrypted on slave.
|
||||
#
|
||||
# The same exercise is repeated
|
||||
# - without annotated binlog events and without binlog checksums;
|
||||
# - with binlog checksums;
|
||||
# - with annotated events and binlog checksums;
|
||||
# - with annotated events, default checksums and minimal binlog row image
|
||||
#
|
||||
|
||||
--source encryption_algorithms.inc
|
||||
--source include/have_innodb.inc
|
||||
--enable_connect_log
|
||||
|
||||
--echo #################
|
||||
--echo # Initialization
|
||||
--echo #################
|
||||
|
||||
--disable_connect_log
|
||||
--let $rpl_topology= 1->2
|
||||
--source include/rpl_init.inc
|
||||
--enable_connect_log
|
||||
|
||||
# We stop SQL thread because we want to have
|
||||
# all relay logs at the end of the test flow
|
||||
|
||||
--connection server_2
|
||||
--disable_connect_log
|
||||
--source include/stop_slave_sql.inc
|
||||
--enable_connect_log
|
||||
|
||||
--connection server_1
|
||||
|
||||
SET @binlog_annotate_row_events.save= @@global.binlog_annotate_row_events;
|
||||
SET @binlog_checksum.save= @@global.binlog_checksum;
|
||||
SET @master_verify_checksum.save= @@global.master_verify_checksum;
|
||||
SET @binlog_row_image.save= @@global.binlog_row_image;
|
||||
|
||||
--echo ####################################################
|
||||
--echo # Test 1: simple binlog, no checksum, no annotation
|
||||
--echo ####################################################
|
||||
|
||||
--connection server_1
|
||||
|
||||
SET binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_checksum= NONE;
|
||||
SET GLOBAL master_verify_checksum= 0;
|
||||
|
||||
--source testdata.inc
|
||||
|
||||
--echo ####################################################
|
||||
--echo # Test 2: binlog with checksum, no annotated events
|
||||
--echo ####################################################
|
||||
|
||||
--connection server_1
|
||||
|
||||
SET binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_annotate_row_events= 0;
|
||||
SET GLOBAL binlog_checksum= CRC32;
|
||||
SET GLOBAL master_verify_checksum= 1;
|
||||
|
||||
--source testdata.inc
|
||||
|
||||
--echo ####################################################
|
||||
--echo # Test 3: binlog with checksum and annotated events
|
||||
--echo ####################################################
|
||||
|
||||
--connection server_1
|
||||
|
||||
SET binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_checksum= CRC32;
|
||||
SET GLOBAL master_verify_checksum= 1;
|
||||
|
||||
--source testdata.inc
|
||||
|
||||
--echo ####################################################
|
||||
--echo # Test 4: binlog with annotated events and binlog_row_image=minimal
|
||||
--echo ####################################################
|
||||
|
||||
--connection server_1
|
||||
|
||||
SET binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_annotate_row_events= 1;
|
||||
SET GLOBAL binlog_checksum= NONE;
|
||||
SET GLOBAL master_verify_checksum= 0;
|
||||
SET GLOBAL binlog_row_image= MINIMAL;
|
||||
SET binlog_row_image= MINIMAL;
|
||||
|
||||
--source testdata.inc
|
||||
|
||||
--echo #############################
|
||||
--echo # Final checks for the master
|
||||
--echo #############################
|
||||
|
||||
--let $master_datadir= `SELECT @@datadir`
|
||||
|
||||
--let SEARCH_FILE= $master_datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= _to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $master_datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= COMMIT
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $master_datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= TIMESTAMP
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--disable_connect_log
|
||||
--source include/save_master_pos.inc
|
||||
--enable_connect_log
|
||||
|
||||
--echo #############################
|
||||
--echo # Final checks for the slave
|
||||
--echo #############################
|
||||
|
||||
# Wait for the IO thread to write everything to relay logs
|
||||
|
||||
--connection server_2
|
||||
|
||||
--let $slave_datadir= `SELECT @@datadir`
|
||||
|
||||
--disable_connect_log
|
||||
--source include/sync_io_with_master.inc
|
||||
|
||||
# Check that relay logs are unencrypted
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0*
|
||||
--let SEARCH_PATTERN= _to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0*
|
||||
--let SEARCH_PATTERN= COMMIT
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0*
|
||||
--let SEARCH_PATTERN= TIMESTAMP
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
|
||||
# Re-enable SQL thread, let it catch up with IO thread
|
||||
# and check slave binary logs
|
||||
|
||||
--source include/start_slave.inc
|
||||
--source include/sync_slave_sql_with_io.inc
|
||||
--enable_connect_log
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-bin.0*
|
||||
--let SEARCH_PATTERN= _to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-bin.0*
|
||||
--let SEARCH_PATTERN= COMMIT
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-bin.0*
|
||||
--let SEARCH_PATTERN= TIMESTAMP
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--echo ##########
|
||||
--echo # Cleanup
|
||||
--echo ##########
|
||||
|
||||
--connection server_1
|
||||
SET GLOBAL binlog_annotate_row_events= @binlog_annotate_row_events.save;
|
||||
SET GLOBAL binlog_checksum= @binlog_checksum.save;
|
||||
SET GLOBAL master_verify_checksum= @master_verify_checksum.save;
|
||||
SET GLOBAL binlog_row_image= @binlog_row_image.save;
|
||||
|
||||
--disable_connect_log
|
||||
--source include/rpl_end.inc
|
||||
@@ -0,0 +1,111 @@
|
||||
#################
|
||||
# Initialization
|
||||
#################
|
||||
include/rpl_init.inc [topology=1->2]
|
||||
connection server_2;
|
||||
include/stop_slave.inc
|
||||
#####################################################
|
||||
# Pre-test 1: Initial key value
|
||||
#####################################################
|
||||
connection server_1;
|
||||
CREATE TABLE table1_to_encrypt (
|
||||
pk INT AUTO_INCREMENT PRIMARY KEY,
|
||||
ts TIMESTAMP NULL,
|
||||
b BLOB
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO table1_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt');
|
||||
INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt;
|
||||
SET binlog_format=ROW;
|
||||
INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt;
|
||||
INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt;
|
||||
NOT FOUND /table1_to_encrypt/ in master-bin.0*
|
||||
#######################################################
|
||||
# Pre-test 2: restart master with a different key value
|
||||
#######################################################
|
||||
connection default;
|
||||
connection server_1;
|
||||
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;
|
||||
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;
|
||||
NOT FOUND /table2_to_encrypt/ in master-bin.0*
|
||||
#####################################################
|
||||
# Pre-test 3: restart master again with the right key
|
||||
#####################################################
|
||||
connection default;
|
||||
connection server_1;
|
||||
CREATE TABLE table3_to_encrypt (
|
||||
pk INT AUTO_INCREMENT PRIMARY KEY,
|
||||
ts TIMESTAMP NULL,
|
||||
b BLOB
|
||||
) ENGINE=MyISAM;
|
||||
INSERT INTO table3_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt');
|
||||
INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt;
|
||||
INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt;
|
||||
FLUSH BINARY LOGS;
|
||||
INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt;
|
||||
#####################################################
|
||||
# Test 1: Check that if master has an encrypted
|
||||
# binary log which it cannot decrypt, it
|
||||
# still feeds events to the slave, and SQL
|
||||
# thread produces an expected error upon
|
||||
# receiving these unreadable events .
|
||||
# This behavior is confirmed in MDEV-11323
|
||||
#####################################################
|
||||
connection server_2;
|
||||
START SLAVE IO_THREAD;
|
||||
include/wait_for_slave_io_to_start.inc
|
||||
START SLAVE SQL_THREAD;
|
||||
include/wait_for_slave_sql_error.inc [errno=1594]
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
table1_to_encrypt
|
||||
SELECT COUNT(*) FROM table1_to_encrypt;
|
||||
COUNT(*)
|
||||
8
|
||||
#####################################################
|
||||
# Test 2: check that replication works if it starts
|
||||
# from a good binary log
|
||||
#####################################################
|
||||
connection server_2;
|
||||
include/stop_slave.inc
|
||||
RESET SLAVE ALL;
|
||||
DROP DATABASE test;
|
||||
CREATE DATABASE test;
|
||||
USE test;
|
||||
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=<MASTER_PORT>, MASTER_USER='root', MASTER_LOG_FILE='master-bin.000003';
|
||||
include/start_slave.inc
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
table3_to_encrypt
|
||||
#####################################################
|
||||
# Test 3: check that replication works if we purge
|
||||
# master logs up to the good one
|
||||
#####################################################
|
||||
connection server_2;
|
||||
connection server_1;
|
||||
PURGE BINARY LOGS TO 'master-bin.000003';
|
||||
connection server_2;
|
||||
include/stop_slave.inc
|
||||
RESET SLAVE ALL;
|
||||
DROP DATABASE test;
|
||||
CREATE DATABASE test;
|
||||
USE test;
|
||||
CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=<MASTER_PORT>, MASTER_USER='root';
|
||||
include/start_slave.inc
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
table3_to_encrypt
|
||||
##########
|
||||
# Cleanup
|
||||
##########
|
||||
connection server_1;
|
||||
DROP TABLE table1_to_encrypt, table2_to_encrypt, table3_to_encrypt;
|
||||
connection server_2;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1,205 @@
|
||||
#
|
||||
# The test checks effects and workarounds for the situation when
|
||||
# the key used to encrypt previous binary logs on master has been lost,
|
||||
# and master runs with a different one.
|
||||
#
|
||||
# The test starts with encrypted binlogs on master.
|
||||
# It stops replication, generates a few statement and row events
|
||||
# on the master, then restarts the server with encrypted binlog,
|
||||
# but with a different value for key 1.
|
||||
#
|
||||
# Then it resumes replication and checks what happens when the master
|
||||
# feed the encrypted logs to the slave (slave SQL thread should
|
||||
# produce and error).
|
||||
#
|
||||
# Then the test resets the slave, configures it to start from a "good"
|
||||
# master binlog log, for which the master has a key, starts replication
|
||||
# and checks that it works.
|
||||
#
|
||||
# Then it resets the slave again, purges binary logs on master up
|
||||
# to the "good" one, starts replication and checks that it works.
|
||||
#
|
||||
|
||||
--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 # Pre-test 1: Initial key value
|
||||
--echo #####################################################
|
||||
|
||||
--connection server_1
|
||||
|
||||
CREATE TABLE table1_to_encrypt (
|
||||
pk INT AUTO_INCREMENT PRIMARY KEY,
|
||||
ts TIMESTAMP NULL,
|
||||
b BLOB
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO table1_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt');
|
||||
INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt;
|
||||
SET binlog_format=ROW;
|
||||
INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt;
|
||||
INSERT INTO table1_to_encrypt SELECT NULL,NOW(),b FROM table1_to_encrypt;
|
||||
|
||||
# Make sure that binary logs are encrypted
|
||||
|
||||
--let SEARCH_FILE= master-bin.0*
|
||||
--let SEARCH_PATTERN= table1_to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--echo #######################################################
|
||||
--echo # Pre-test 2: restart master with a different key value
|
||||
--echo #######################################################
|
||||
|
||||
--write_file $MYSQL_TMP_DIR/master_lose_key.key
|
||||
1;00000AAAAAAAAAAAAAAAAAAAAAA00000
|
||||
EOF
|
||||
|
||||
--let $rpl_server_parameters= --file-key-management-filename=$MYSQL_TMP_DIR/master_lose_key.key
|
||||
|
||||
--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;
|
||||
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-bin.0*
|
||||
--let SEARCH_PATTERN= table2_to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--echo #####################################################
|
||||
--echo # Pre-test 3: restart master again with the right key
|
||||
--echo #####################################################
|
||||
|
||||
--let $rpl_server_parameters=
|
||||
--let $rpl_server_number= 1
|
||||
--source restart_server.inc
|
||||
|
||||
--let $good_master_binlog= query_get_value(SHOW MASTER STATUS,File,1)
|
||||
|
||||
CREATE TABLE table3_to_encrypt (
|
||||
pk INT AUTO_INCREMENT PRIMARY KEY,
|
||||
ts TIMESTAMP NULL,
|
||||
b BLOB
|
||||
) ENGINE=MyISAM;
|
||||
|
||||
INSERT INTO table3_to_encrypt VALUES (NULL,NOW(),'data_to_encrypt');
|
||||
INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt;
|
||||
INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt;
|
||||
FLUSH BINARY LOGS;
|
||||
INSERT INTO table3_to_encrypt SELECT NULL,NOW(),b FROM table3_to_encrypt;
|
||||
|
||||
--save_master_pos
|
||||
|
||||
--echo #####################################################
|
||||
--echo # Test 1: Check that if master has an encrypted
|
||||
--echo # binary log which it cannot decrypt, it
|
||||
--echo # still feeds events to the slave, and SQL
|
||||
--echo # thread produces an expected error upon
|
||||
--echo # receiving these unreadable events .
|
||||
--echo # This behavior is confirmed in MDEV-11323
|
||||
--echo #####################################################
|
||||
--connection server_2
|
||||
|
||||
--disable_connect_log
|
||||
START SLAVE IO_THREAD;
|
||||
--source include/wait_for_slave_io_to_start.inc
|
||||
|
||||
START SLAVE SQL_THREAD;
|
||||
--let $slave_sql_errno= 1594
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
--enable_connect_log
|
||||
|
||||
# Here we should see only table1_to_encrypt and its contents,
|
||||
# because it was logged with the initial key
|
||||
--sorted_result
|
||||
SHOW TABLES;
|
||||
SELECT COUNT(*) FROM table1_to_encrypt;
|
||||
|
||||
--echo #####################################################
|
||||
--echo # Test 2: check that replication works if it starts
|
||||
--echo # from a good binary log
|
||||
--echo #####################################################
|
||||
--connection server_2
|
||||
|
||||
--disable_connect_log
|
||||
--source include/stop_slave.inc
|
||||
RESET SLAVE ALL;
|
||||
DROP DATABASE test;
|
||||
CREATE DATABASE test;
|
||||
USE test;
|
||||
--replace_result $SERVER_MYPORT_1 <MASTER_PORT>
|
||||
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SERVER_MYPORT_1, MASTER_USER='root', MASTER_LOG_FILE='$good_master_binlog';
|
||||
--source include/start_slave.inc
|
||||
--enable_connect_log
|
||||
--sync_with_master
|
||||
|
||||
--sorted_result
|
||||
SHOW TABLES;
|
||||
|
||||
--echo #####################################################
|
||||
--echo # Test 3: check that replication works if we purge
|
||||
--echo # master logs up to the good one
|
||||
--echo #####################################################
|
||||
--connection server_2
|
||||
|
||||
--connection server_1
|
||||
eval PURGE BINARY LOGS TO '$good_master_binlog';
|
||||
|
||||
--connection server_2
|
||||
--disable_connect_log
|
||||
--source include/stop_slave.inc
|
||||
RESET SLAVE ALL;
|
||||
DROP DATABASE test;
|
||||
CREATE DATABASE test;
|
||||
USE test;
|
||||
--replace_result $SERVER_MYPORT_1 <MASTER_PORT>
|
||||
eval CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=$SERVER_MYPORT_1, MASTER_USER='root';
|
||||
--source include/start_slave.inc
|
||||
--enable_connect_log
|
||||
--sync_with_master
|
||||
|
||||
--sorted_result
|
||||
SHOW TABLES;
|
||||
|
||||
--echo ##########
|
||||
--echo # Cleanup
|
||||
--echo ##########
|
||||
|
||||
--connection server_1
|
||||
|
||||
DROP TABLE table1_to_encrypt, table2_to_encrypt, table3_to_encrypt;
|
||||
|
||||
--save_master_pos
|
||||
|
||||
--connection server_2
|
||||
--sync_with_master
|
||||
|
||||
--disable_connect_log
|
||||
--source include/rpl_end.inc
|
||||
@@ -0,0 +1,5 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
encrypt-binlog=0
|
||||
skip-file-key-management
|
||||
@@ -0,0 +1,135 @@
|
||||
#
|
||||
# TODO: write here what the test checks after MDEV-11288 is fixed
|
||||
#
|
||||
# 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 without encryption
|
||||
# (no encryption plugin).
|
||||
# Then it resumes replication and checks what happens when the server
|
||||
# tries to feed the binary logs (included the encrypted ones)
|
||||
# to the slave.
|
||||
#
|
||||
|
||||
--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 SEARCH_FILE= 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 --plugin-load-add=$FILE_KEY_MANAGEMENT_SO --file-key-management --loose-file-key-management-filename=$MYSQL_TEST_DIR/std_data/keys.txt
|
||||
|
||||
--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-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 how it goes
|
||||
--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
|
||||
12
mysql-test/suite/binlog_encryption/encrypted_slave.cnf
Normal file
12
mysql-test/suite/binlog_encryption/encrypted_slave.cnf
Normal file
@@ -0,0 +1,12 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
encrypt-binlog=0
|
||||
|
||||
[mysqld.2]
|
||||
#log-slave-updates
|
||||
encrypt-binlog
|
||||
plugin-load-add= @ENV.FILE_KEY_MANAGEMENT_SO
|
||||
file-key-management
|
||||
loose-file-key-management-filename= @ENV.MYSQL_TEST_DIR/std_data/keys.txt
|
||||
binlog_checksum=NONE
|
||||
175
mysql-test/suite/binlog_encryption/encrypted_slave.result
Normal file
175
mysql-test/suite/binlog_encryption/encrypted_slave.result
Normal file
@@ -0,0 +1,175 @@
|
||||
#################
|
||||
# Initialization
|
||||
#################
|
||||
include/rpl_init.inc [topology=1->2]
|
||||
connection server_2;
|
||||
include/stop_slave_sql.inc
|
||||
#################
|
||||
# Test flow
|
||||
#################
|
||||
connection server_1;
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
CREATE DATABASE database_name_to_encrypt;
|
||||
USE database_name_to_encrypt;
|
||||
CREATE USER user_name_to_encrypt;
|
||||
GRANT ALL ON database_name_to_encrypt.* TO user_name_to_encrypt;
|
||||
SET PASSWORD FOR user_name_to_encrypt = PASSWORD('password_to_encrypt');
|
||||
CREATE TABLE innodb_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB,
|
||||
virt_column_name_to_encrypt INT AS (int_column_name_to_encrypt % 10) VIRTUAL,
|
||||
pers_column_name_to_encrypt INT AS (int_column_name_to_encrypt) PERSISTENT,
|
||||
INDEX `index_name_to_encrypt`(`timestamp_column_name_to_encrypt`)
|
||||
) ENGINE=InnoDB
|
||||
PARTITION BY RANGE (int_column_name_to_encrypt)
|
||||
SUBPARTITION BY KEY (int_column_name_to_encrypt)
|
||||
SUBPARTITIONS 2 (
|
||||
PARTITION partition0_name_to_encrypt VALUES LESS THAN (100),
|
||||
PARTITION partition1_name_to_encrypt VALUES LESS THAN (MAXVALUE)
|
||||
)
|
||||
;
|
||||
CREATE TABLE myisam_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
char_column_name_to_encrypt VARCHAR(255),
|
||||
datetime_column_name_to_encrypt DATETIME,
|
||||
text_column_name_to_encrypt TEXT
|
||||
) ENGINE=MyISAM;
|
||||
CREATE TABLE aria_table_name_to_encrypt (
|
||||
int_column_name_to_encrypt INT AUTO_INCREMENT PRIMARY KEY,
|
||||
varchar_column_name_to_encrypt VARCHAR(1024),
|
||||
enum_column_name_to_encrypt ENUM(
|
||||
'enum_value1_to_encrypt',
|
||||
'enum_value2_to_encrypt'
|
||||
),
|
||||
timestamp_column_name_to_encrypt TIMESTAMP(6) NULL,
|
||||
blob_column_name_to_encrypt BLOB
|
||||
) ENGINE=Aria;
|
||||
CREATE TRIGGER trigger_name_to_encrypt
|
||||
AFTER INSERT ON myisam_table_name_to_encrypt FOR EACH ROW
|
||||
INSERT INTO aria_table_name_to_encrypt (varchar_column_name_to_encrypt)
|
||||
VALUES (NEW.char_column_name_to_encrypt);
|
||||
CREATE DEFINER=user_name_to_encrypt VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
CREATE FUNCTION func_name_to_encrypt (func_parameter_to_encrypt INT)
|
||||
RETURNS VARCHAR(64)
|
||||
RETURN 'func_result_to_encrypt';
|
||||
CREATE PROCEDURE proc_name_to_encrypt (
|
||||
IN proc_in_parameter_to_encrypt CHAR(32),
|
||||
OUT proc_out_parameter_to_encrypt INT
|
||||
)
|
||||
BEGIN
|
||||
DECLARE procvar_name_to_encrypt CHAR(64) DEFAULT 'procvar_val_to_encrypt';
|
||||
DECLARE cursor_name_to_encrypt CURSOR FOR
|
||||
SELECT virt_column_name_to_encrypt FROM innodb_table_name_to_encrypt;
|
||||
DECLARE EXIT HANDLER FOR NOT FOUND
|
||||
BEGIN
|
||||
SET @stmt_var_to_encrypt = CONCAT(
|
||||
"SELECT
|
||||
IF (RAND()>0.5,'enum_value2_to_encrypt','enum_value1_to_encrypt')
|
||||
FROM innodb_table_name_to_encrypt
|
||||
INTO OUTFILE '", proc_in_parameter_to_encrypt, "'");
|
||||
PREPARE stmt_to_encrypt FROM @stmt_var_to_encrypt;
|
||||
EXECUTE stmt_to_encrypt;
|
||||
DEALLOCATE PREPARE stmt_to_encrypt;
|
||||
END;
|
||||
OPEN cursor_name_to_encrypt;
|
||||
proc_label_to_encrypt: LOOP
|
||||
FETCH cursor_name_to_encrypt INTO procvar_name_to_encrypt;
|
||||
END LOOP;
|
||||
CLOSE cursor_name_to_encrypt;
|
||||
END $$
|
||||
CREATE SERVER server_name_to_encrypt
|
||||
FOREIGN DATA WRAPPER mysql
|
||||
OPTIONS (HOST 'host_name_to_encrypt');
|
||||
connect con1,localhost,user_name_to_encrypt,password_to_encrypt,database_name_to_encrypt;
|
||||
CREATE TEMPORARY TABLE tmp_table_name_to_encrypt (
|
||||
float_column_name_to_encrypt FLOAT,
|
||||
binary_column_name_to_encrypt BINARY(64)
|
||||
);
|
||||
disconnect con1;
|
||||
connection server_1;
|
||||
CREATE INDEX index_name_to_encrypt
|
||||
ON myisam_table_name_to_encrypt (datetime_column_name_to_encrypt);
|
||||
ALTER DATABASE database_name_to_encrypt CHARACTER SET utf8;
|
||||
ALTER TABLE innodb_table_name_to_encrypt
|
||||
MODIFY timestamp_column_name_to_encrypt TIMESTAMP NOT NULL
|
||||
DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||
;
|
||||
ALTER ALGORITHM=MERGE VIEW view_name_to_encrypt
|
||||
AS SELECT * FROM innodb_table_name_to_encrypt;
|
||||
RENAME TABLE innodb_table_name_to_encrypt TO new_table_name_to_encrypt;
|
||||
ALTER TABLE new_table_name_to_encrypt RENAME TO innodb_table_name_to_encrypt;
|
||||
set @user_var1_to_encrypt= 'dyncol1_val_to_encrypt';
|
||||
set @user_var2_to_encrypt= 'dyncol2_name_to_encrypt';
|
||||
INSERT INTO view_name_to_encrypt VALUES
|
||||
(1, NOW(6), COLUMN_CREATE('dyncol1_name_to_encrypt',@user_var1_to_encrypt), NULL, NULL),
|
||||
(2, NOW(6), COLUMN_CREATE(@user_var2_to_encrypt,'dyncol2_val_to_encrypt'), NULL, NULL)
|
||||
;
|
||||
BEGIN NOT ATOMIC
|
||||
DECLARE counter_name_to_encrypt INT DEFAULT 0;
|
||||
START TRANSACTION;
|
||||
WHILE counter_name_to_encrypt<12 DO
|
||||
INSERT INTO innodb_table_name_to_encrypt
|
||||
SELECT NULL, NOW(6), blob_column_name_to_encrypt, NULL, NULL
|
||||
FROM innodb_table_name_to_encrypt
|
||||
ORDER BY int_column_name_to_encrypt;
|
||||
SET counter_name_to_encrypt = counter_name_to_encrypt+1;
|
||||
END WHILE;
|
||||
COMMIT;
|
||||
END
|
||||
$$
|
||||
INSERT INTO myisam_table_name_to_encrypt
|
||||
SELECT NULL, 'char_literal_to_encrypt', NULL, 'text_to_encrypt';
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
INSERT INTO myisam_table_name_to_encrypt (char_column_name_to_encrypt)
|
||||
SELECT char_column_name_to_encrypt FROM myisam_table_name_to_encrypt;
|
||||
CALL proc_name_to_encrypt('file_name_to_encrypt',@useless_var_to_encrypt);
|
||||
TRUNCATE TABLE aria_table_name_to_encrypt;
|
||||
LOAD DATA INFILE 'file_name_to_encrypt' INTO TABLE aria_table_name_to_encrypt
|
||||
(enum_column_name_to_encrypt);
|
||||
LOAD DATA LOCAL INFILE '<DATADIR>/database_name_to_encrypt/file_name_to_encrypt'
|
||||
INTO TABLE aria_table_name_to_encrypt (enum_column_name_to_encrypt);
|
||||
UPDATE view_name_to_encrypt SET blob_column_name_to_encrypt =
|
||||
COLUMN_CREATE('dyncol1_name_to_encrypt',func_name_to_encrypt(0))
|
||||
;
|
||||
DELETE FROM aria_table_name_to_encrypt ORDER BY int_column_name_to_encrypt LIMIT 10;
|
||||
ANALYZE TABLE myisam_table_name_to_encrypt;
|
||||
CHECK TABLE aria_table_name_to_encrypt;
|
||||
CHECKSUM TABLE innodb_table_name_to_encrypt, myisam_table_name_to_encrypt;
|
||||
RENAME USER user_name_to_encrypt to new_user_name_to_encrypt;
|
||||
REVOKE ALL PRIVILEGES, GRANT OPTION FROM new_user_name_to_encrypt;
|
||||
DROP DATABASE database_name_to_encrypt;
|
||||
DROP USER new_user_name_to_encrypt;
|
||||
DROP SERVER server_name_to_encrypt;
|
||||
#################
|
||||
# Master binlog checks
|
||||
#################
|
||||
FOUND /_to_encrypt/ in master-bin.0*
|
||||
FOUND /COMMIT/ in master-bin.0*
|
||||
FOUND /TIMESTAMP/ in master-bin.0*
|
||||
include/save_master_pos.inc
|
||||
#################
|
||||
# Relay log checks
|
||||
#################
|
||||
connection server_2;
|
||||
include/sync_io_with_master.inc
|
||||
NOT FOUND /_to_encrypt/ in slave-relay-bin.0*
|
||||
NOT FOUND /COMMIT/ in slave-relay-bin.0*
|
||||
NOT FOUND /TIMESTAMP/ in slave-relay-bin.0*
|
||||
#################
|
||||
# Slave binlog checks
|
||||
#################
|
||||
include/start_slave.inc
|
||||
include/sync_slave_sql_with_io.inc
|
||||
include/sync_io_with_master.inc
|
||||
NOT FOUND /_to_encrypt/ in slave-bin.0*
|
||||
NOT FOUND /COMMIT/ in slave-bin.0*
|
||||
NOT FOUND /TIMESTAMP/ in slave-bin.0*
|
||||
##########
|
||||
# Cleanup
|
||||
##########
|
||||
include/rpl_end.inc
|
||||
117
mysql-test/suite/binlog_encryption/encrypted_slave.test
Normal file
117
mysql-test/suite/binlog_encryption/encrypted_slave.test
Normal file
@@ -0,0 +1,117 @@
|
||||
#
|
||||
# The test checks that basic DDL and DML events are encrypted
|
||||
# in the relay and binary logs on slave.
|
||||
# The test is to be run with all binlog formats
|
||||
# (combinations for rpl_init.inc take care of that).
|
||||
#
|
||||
# The test runs with the non-encrypted master and encrypted slave.
|
||||
# It generates a sequence of events on master and checks that
|
||||
# relay logs and binary logs are encrypted on slave.
|
||||
#
|
||||
|
||||
--source encryption_algorithms.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
--echo #################
|
||||
--echo # Initialization
|
||||
--echo #################
|
||||
|
||||
--let $rpl_topology= 1->2
|
||||
--source include/rpl_init.inc
|
||||
|
||||
--enable_connect_log
|
||||
--connection server_2
|
||||
|
||||
# We stop SQL thread because we want to have
|
||||
# all relay logs at the end of the test flow
|
||||
|
||||
--disable_connect_log
|
||||
--source include/stop_slave_sql.inc
|
||||
--enable_connect_log
|
||||
|
||||
--echo #################
|
||||
--echo # Test flow
|
||||
--echo #################
|
||||
|
||||
--connection server_1
|
||||
--source testdata.inc
|
||||
|
||||
--echo #################
|
||||
--echo # Master binlog checks
|
||||
--echo #################
|
||||
|
||||
--let $master_datadir= `SELECT @@datadir`
|
||||
|
||||
--let SEARCH_FILE= $master_datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= _to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $master_datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= COMMIT
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $master_datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= TIMESTAMP
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--disable_connect_log
|
||||
--source include/save_master_pos.inc
|
||||
--enable_connect_log
|
||||
|
||||
--echo #################
|
||||
--echo # Relay log checks
|
||||
--echo #################
|
||||
|
||||
--connection server_2
|
||||
--disable_connect_log
|
||||
--source include/sync_io_with_master.inc
|
||||
--enable_connect_log
|
||||
|
||||
--let $slave_datadir= `SELECT @@datadir`
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0*
|
||||
--let SEARCH_PATTERN= _to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0*
|
||||
--let SEARCH_PATTERN= COMMIT
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-relay-bin.0*
|
||||
--let SEARCH_PATTERN= TIMESTAMP
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--echo #################
|
||||
--echo # Slave binlog checks
|
||||
--echo #################
|
||||
|
||||
# Re-enable SQL thread, let it catch up with IO thread
|
||||
# and check slave binary logs
|
||||
|
||||
--disable_connect_log
|
||||
--source include/start_slave.inc
|
||||
--source include/sync_slave_sql_with_io.inc
|
||||
--enable_connect_log
|
||||
|
||||
--disable_connect_log
|
||||
--source include/sync_io_with_master.inc
|
||||
--enable_connect_log
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-bin.0*
|
||||
--let SEARCH_PATTERN= _to_encrypt
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-bin.0*
|
||||
--let SEARCH_PATTERN= COMMIT
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--let SEARCH_FILE= $slave_datadir/slave-bin.0*
|
||||
--let SEARCH_PATTERN= TIMESTAMP
|
||||
--source include/search_pattern_in_file.inc
|
||||
|
||||
--echo ##########
|
||||
--echo # Cleanup
|
||||
--echo ##########
|
||||
|
||||
--disable_connect_log
|
||||
--source include/rpl_end.inc
|
||||
@@ -0,0 +1,5 @@
|
||||
[ctr]
|
||||
loose-file-key-management-encryption-algorithm=aes_ctr
|
||||
|
||||
[cbc]
|
||||
loose-file-key-management-encryption-algorithm=aes_cbc
|
||||
@@ -0,0 +1,2 @@
|
||||
# Empty include file just to enable encryption algorithm combinations
|
||||
# for those tests which need them
|
||||
5
mysql-test/suite/binlog_encryption/encryption_combo.cnf
Normal file
5
mysql-test/suite/binlog_encryption/encryption_combo.cnf
Normal file
@@ -0,0 +1,5 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
encrypt-binlog=0
|
||||
|
||||
78
mysql-test/suite/binlog_encryption/encryption_combo.result
Normal file
78
mysql-test/suite/binlog_encryption/encryption_combo.result
Normal file
@@ -0,0 +1,78 @@
|
||||
#################
|
||||
# Initialization
|
||||
#################
|
||||
include/rpl_init.inc [topology=1->2]
|
||||
connection server_2;
|
||||
include/stop_slave.inc
|
||||
#####################################################
|
||||
# Part 1: unencrypted master
|
||||
#####################################################
|
||||
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;
|
||||
FOUND /table1_no_encryption/ in master-bin.0*
|
||||
#####################################################
|
||||
# Part 2: restart master, now with binlog encryption
|
||||
#####################################################
|
||||
connection default;
|
||||
connection server_1;
|
||||
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;
|
||||
NOT FOUND /table2_to_encrypt/ in master-bin.0*
|
||||
#####################################################
|
||||
# Part 3: restart master again without encryption
|
||||
#####################################################
|
||||
connection default;
|
||||
connection server_1;
|
||||
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;
|
||||
#####################################################
|
||||
# Check: resume replication and check that it works
|
||||
#####################################################
|
||||
connection server_2;
|
||||
include/start_slave.inc
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
table1_no_encryption
|
||||
table2_to_encrypt
|
||||
table3_no_encryption
|
||||
##########
|
||||
# Cleanup
|
||||
##########
|
||||
connection server_1;
|
||||
SELECT COUNT(*) FROM table1_no_encryption;
|
||||
COUNT(*)
|
||||
8
|
||||
SELECT COUNT(*) FROM table2_to_encrypt;
|
||||
COUNT(*)
|
||||
8
|
||||
SELECT COUNT(*) FROM table3_no_encryption;
|
||||
COUNT(*)
|
||||
4
|
||||
DROP TABLE table1_no_encryption, table2_to_encrypt, table3_no_encryption;
|
||||
connection server_2;
|
||||
include/rpl_end.inc
|
||||
136
mysql-test/suite/binlog_encryption/encryption_combo.test
Normal file
136
mysql-test/suite/binlog_encryption/encryption_combo.test
Normal file
@@ -0,0 +1,136 @@
|
||||
#
|
||||
# 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_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
|
||||
17
mysql-test/suite/binlog_encryption/multisource.cnf
Normal file
17
mysql-test/suite/binlog_encryption/multisource.cnf
Normal file
@@ -0,0 +1,17 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
log-bin=master-bin
|
||||
|
||||
[mysqld.2]
|
||||
log-bin=master-bin
|
||||
|
||||
[mysqld.3]
|
||||
innodb
|
||||
log-bin=slave-bin
|
||||
server-id=3
|
||||
log-warnings=2
|
||||
|
||||
[ENV]
|
||||
SERVER_MYPORT_3= @mysqld.3.port
|
||||
SERVER_MYSOCK_3= @mysqld.3.socket
|
||||
205
mysql-test/suite/binlog_encryption/multisource.result
Normal file
205
mysql-test/suite/binlog_encryption/multisource.result
Normal file
@@ -0,0 +1,205 @@
|
||||
change master 'abc' to relay_log_file='';
|
||||
ERROR HY000: Failed initializing relay log position: Could not find target log during relay log initialization
|
||||
change master 'abc2' to master_host='';
|
||||
ERROR HY000: Incorrect arguments to MASTER_HOST
|
||||
change master 'master1' to
|
||||
master_port=MYPORT_1,
|
||||
master_host='127.0.0.1',
|
||||
master_user='root';
|
||||
start slave 'master1';
|
||||
set default_master_connection = 'master1';
|
||||
include/wait_for_slave_to_start.inc
|
||||
#
|
||||
# Checking SHOW SLAVE 'master1' STATUS
|
||||
#
|
||||
Master_Port = 'MYPORT_1'
|
||||
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Last_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
#
|
||||
# Checking SHOW SLAVE STATUS
|
||||
#
|
||||
Master_Port = 'MYPORT_1'
|
||||
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Last_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
#
|
||||
# Checking SHOW ALL SLAVES STATUS
|
||||
#
|
||||
Connection_name = 'master1'
|
||||
Master_Port = 'MYPORT_1'
|
||||
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Last_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
Slave_heartbeat_period = '60.000'
|
||||
#
|
||||
drop database if exists db1;
|
||||
create database db1;
|
||||
use db1;
|
||||
create table t1 (i int auto_increment, f1 varchar(16), primary key pk (i,f1)) engine=MyISAM;
|
||||
insert into t1 (f1) values ('one'),('two');
|
||||
select * from db1.t1;
|
||||
i f1
|
||||
1 one
|
||||
2 two
|
||||
# List of relay log files in the datadir
|
||||
mysqld-relay-bin-master1.000001
|
||||
mysqld-relay-bin-master1.000002
|
||||
mysqld-relay-bin-master1.index
|
||||
include/show_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-relay-bin-master1.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
mysqld-relay-bin-master1.000001 # Rotate # # mysqld-relay-bin-master1.000002;pos=4
|
||||
include/show_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-relay-bin-master1.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
mysqld-relay-bin-master1.000002 # Rotate # # master-bin.000001;pos=POS
|
||||
mysqld-relay-bin-master1.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
mysqld-relay-bin-master1.000002 # Gtid_list # # []
|
||||
mysqld-relay-bin-master1.000002 # Binlog_checkpoint # # master-bin.000001
|
||||
mysqld-relay-bin-master1.000002 # Gtid # # GTID #-#-#
|
||||
mysqld-relay-bin-master1.000002 # Query # # drop database if exists db1
|
||||
mysqld-relay-bin-master1.000002 # Gtid # # GTID #-#-#
|
||||
mysqld-relay-bin-master1.000002 # Query # # create database db1
|
||||
mysqld-relay-bin-master1.000002 # Gtid # # GTID #-#-#
|
||||
mysqld-relay-bin-master1.000002 # Query # # use `db1`; create table t1 (i int auto_increment, f1 varchar(16), primary key pk (i,f1)) engine=MyISAM
|
||||
mysqld-relay-bin-master1.000002 # Gtid # # BEGIN GTID #-#-#
|
||||
mysqld-relay-bin-master1.000002 # Intvar # # INSERT_ID=1
|
||||
mysqld-relay-bin-master1.000002 # Query # # use `db1`; insert into t1 (f1) values ('one'),('two')
|
||||
mysqld-relay-bin-master1.000002 # Query # # COMMIT
|
||||
change master 'master1' to
|
||||
master_port=MYPORT_2,
|
||||
master_host='127.0.0.1',
|
||||
master_user='root';
|
||||
ERROR HY000: This operation cannot be performed as you have a running slave 'master1'; run STOP SLAVE 'master1' first
|
||||
change master to
|
||||
master_port=MYPORT_2,
|
||||
master_host='127.0.0.1',
|
||||
master_user='root';
|
||||
ERROR HY000: This operation cannot be performed as you have a running slave 'master1'; run STOP SLAVE 'master1' first
|
||||
change master 'master2' to
|
||||
master_port=MYPORT_1,
|
||||
master_host='127.0.0.1',
|
||||
master_user='root';
|
||||
ERROR HY000: Connection 'master2' conflicts with existing connection 'master1'
|
||||
set default_master_connection = '';
|
||||
change master to
|
||||
master_port=MYPORT_2,
|
||||
master_host='127.0.0.1',
|
||||
master_user='root';
|
||||
start slave;
|
||||
include/wait_for_slave_to_start.inc
|
||||
#
|
||||
# Checking SHOW ALL SLAVES STATUS
|
||||
#
|
||||
Connection_name = ''
|
||||
Connection_name = 'master1'
|
||||
Master_Port = 'MYPORT_2'
|
||||
Master_Port = 'MYPORT_1'
|
||||
Relay_Log_File = 'mysqld-relay-bin.000002'
|
||||
Relay_Log_File = 'mysqld-relay-bin-master1.000002'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Last_Errno = '0'
|
||||
Last_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
Slave_heartbeat_period = '60.000'
|
||||
Slave_heartbeat_period = '60.000'
|
||||
#
|
||||
insert into t1 (f1) values ('three');
|
||||
drop database if exists db2;
|
||||
create database db2;
|
||||
use db2;
|
||||
create table t1 (pk int auto_increment primary key, f1 int) engine=InnoDB;
|
||||
begin;
|
||||
insert into t1 (f1) values (1),(2);
|
||||
select * from db1.t1;
|
||||
i f1
|
||||
1 one
|
||||
2 two
|
||||
3 three
|
||||
select * from db2.t1;
|
||||
pk f1
|
||||
commit;
|
||||
select * from db2.t1;
|
||||
pk f1
|
||||
1 1
|
||||
2 2
|
||||
flush logs;
|
||||
purge binary logs to 'master-bin.000002';
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000002 filesize
|
||||
insert into t1 (f1) values ('four');
|
||||
create table db1.t3 (f1 int) engine=InnoDB;
|
||||
#
|
||||
# Checking SHOW ALL SLAVES STATUS
|
||||
#
|
||||
Connection_name = ''
|
||||
Connection_name = 'master1'
|
||||
Master_Port = 'MYPORT_2'
|
||||
Master_Port = 'MYPORT_1'
|
||||
Relay_Log_File = 'mysqld-relay-bin.000002'
|
||||
Relay_Log_File = 'mysqld-relay-bin-master1.000004'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_IO_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Slave_SQL_Running = 'Yes'
|
||||
Last_Errno = '0'
|
||||
Last_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
Last_SQL_Errno = '0'
|
||||
Slave_heartbeat_period = '60.000'
|
||||
Slave_heartbeat_period = '60.000'
|
||||
#
|
||||
select * from db1.t1;
|
||||
i f1
|
||||
1 one
|
||||
2 two
|
||||
3 three
|
||||
4 four
|
||||
include/show_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-relay-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
mysqld-relay-bin.000001 # Rotate # # mysqld-relay-bin.000002;pos=4
|
||||
include/show_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
mysqld-relay-bin.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
mysqld-relay-bin.000002 # Rotate # # master-bin.000001;pos=POS
|
||||
mysqld-relay-bin.000002 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
mysqld-relay-bin.000002 # Gtid_list # # []
|
||||
mysqld-relay-bin.000002 # Binlog_checkpoint # # master-bin.000001
|
||||
mysqld-relay-bin.000002 # Gtid # # GTID #-#-#
|
||||
mysqld-relay-bin.000002 # Query # # drop database if exists db2
|
||||
mysqld-relay-bin.000002 # Gtid # # GTID #-#-#
|
||||
mysqld-relay-bin.000002 # Query # # create database db2
|
||||
mysqld-relay-bin.000002 # Gtid # # GTID #-#-#
|
||||
mysqld-relay-bin.000002 # Query # # use `db2`; create table t1 (pk int auto_increment primary key, f1 int) engine=InnoDB
|
||||
mysqld-relay-bin.000002 # Gtid # # BEGIN GTID #-#-#
|
||||
mysqld-relay-bin.000002 # Intvar # # INSERT_ID=1
|
||||
mysqld-relay-bin.000002 # Query # # use `db2`; insert into t1 (f1) values (1),(2)
|
||||
mysqld-relay-bin.000002 # Xid # # COMMIT /* XID */
|
||||
stop slave io_thread;
|
||||
show status like 'Slave_running';
|
||||
Variable_name Value
|
||||
Slave_running OFF
|
||||
set default_master_connection = 'master1';
|
||||
show status like 'Slave_running';
|
||||
Variable_name Value
|
||||
Slave_running ON
|
||||
drop database db1;
|
||||
drop database db2;
|
||||
include/reset_master_slave.inc
|
||||
drop database db1;
|
||||
include/reset_master_slave.inc
|
||||
drop database db2;
|
||||
include/reset_master_slave.inc
|
||||
2
mysql-test/suite/binlog_encryption/multisource.test
Normal file
2
mysql-test/suite/binlog_encryption/multisource.test
Normal file
@@ -0,0 +1,2 @@
|
||||
--let $binlog_extra_length= 36
|
||||
--source extra/rpl_tests/multisource.inc
|
||||
27
mysql-test/suite/binlog_encryption/my.cnf
Normal file
27
mysql-test/suite/binlog_encryption/my.cnf
Normal file
@@ -0,0 +1,27 @@
|
||||
!include include/default_mysqld.cnf
|
||||
!include include/default_client.cnf
|
||||
|
||||
[mysqld.1]
|
||||
innodb
|
||||
plugin-load-add= @ENV.FILE_KEY_MANAGEMENT_SO
|
||||
loose-file-key-management-filename= @ENV.MYSQLTEST_VARDIR/std_data/keys.txt
|
||||
encrypt-binlog
|
||||
log-basename= master
|
||||
|
||||
[mysqld.2]
|
||||
#!use-slave-opt
|
||||
innodb
|
||||
log-slave-updates
|
||||
log-basename= slave
|
||||
|
||||
[ENV]
|
||||
|
||||
# We will adopt tests with master-slave setup as well as rpl_init setup,
|
||||
# so need both sets of variables
|
||||
MASTER_MYPORT= @mysqld.1.port
|
||||
SERVER_MYPORT_1= @mysqld.1.port
|
||||
SERVER_MYSOCK_1= @mysqld.1.socket
|
||||
|
||||
SLAVE_MYPORT= @mysqld.2.port
|
||||
SERVER_MYPORT_2= @mysqld.2.port
|
||||
SERVER_MYSOCK_2= @mysqld.2.socket
|
||||
35
mysql-test/suite/binlog_encryption/restart_server.inc
Normal file
35
mysql-test/suite/binlog_encryption/restart_server.inc
Normal file
@@ -0,0 +1,35 @@
|
||||
#
|
||||
# We can not use the common include/restart_mysqld.inc or include/rpl_restart_server.inc,
|
||||
# because they have hardcoded connection names (master, master1)
|
||||
# which are not initiated by rpl_init.inc.
|
||||
# This is the relevant and simplified part of the same set of scripts.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# --let $rpl_server_number= N
|
||||
# Number to identify the server that needs to reconnect.
|
||||
# 1 is the master server, 2 the slave server
|
||||
# [--let $rpl_server_parameters= --flag1 --flag2 ...]
|
||||
# --source restart_server.inc
|
||||
#
|
||||
|
||||
--let $_cur_con= $CURRENT_CONNECTION
|
||||
|
||||
--connection default
|
||||
--enable_reconnect
|
||||
|
||||
--connection $_cur_con
|
||||
--enable_reconnect
|
||||
--exec echo "wait" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
|
||||
shutdown_server 10;
|
||||
|
||||
--source include/wait_until_disconnected.inc
|
||||
|
||||
--let $_rpl_start_server_command= restart
|
||||
if ($rpl_server_parameters)
|
||||
{
|
||||
--let $_rpl_start_server_command= restart:$rpl_server_parameters
|
||||
}
|
||||
--exec echo "$_rpl_start_server_command" > $MYSQLTEST_VARDIR/tmp/mysqld.$rpl_server_number.expect
|
||||
--source include/wait_until_connected_again.inc
|
||||
7
mysql-test/suite/binlog_encryption/rpl_binlog_errors.cnf
Normal file
7
mysql-test/suite/binlog_encryption/rpl_binlog_errors.cnf
Normal file
@@ -0,0 +1,7 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
max_binlog_size=4096
|
||||
|
||||
[mysqld.2]
|
||||
skip-slave-start
|
||||
275
mysql-test/suite/binlog_encryption/rpl_binlog_errors.result
Normal file
275
mysql-test/suite/binlog_encryption/rpl_binlog_errors.result
Normal file
@@ -0,0 +1,275 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
#######################################################################
|
||||
####################### PART 1: MASTER TESTS ##########################
|
||||
#######################################################################
|
||||
include/stop_slave.inc
|
||||
call mtr.add_suppression("Can't generate a unique log-filename");
|
||||
call mtr.add_suppression("Writing one row to the row-based binary log failed.*");
|
||||
call mtr.add_suppression("Error writing file .*");
|
||||
SET @old_debug= @@global.debug;
|
||||
SELECT repeat('x',8192) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data';
|
||||
SELECT repeat('x',10) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data';
|
||||
RESET MASTER;
|
||||
###################### TEST #1
|
||||
FLUSH LOGS;
|
||||
# assert: must show two binlogs
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
###################### TEST #2
|
||||
RESET MASTER;
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
# assert: must show one binlog
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
RESET MASTER;
|
||||
###################### TEST #3
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE t2 (a VARCHAR(16384)) Engine=InnoDB;
|
||||
CREATE TABLE t4 (a VARCHAR(16384));
|
||||
INSERT INTO t1 VALUES (1);
|
||||
RESET MASTER;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
|
||||
# assert: must show two binlog
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
DELETE FROM t2;
|
||||
RESET MASTER;
|
||||
###################### TEST #4
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
# assert: must show one entry
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
1
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
DELETE FROM t2;
|
||||
RESET MASTER;
|
||||
###################### TEST #5
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166-2.data' INTO TABLE t2;
|
||||
# assert: must show one entry
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
1
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
DELETE FROM t2;
|
||||
RESET MASTER;
|
||||
###################### TEST #6
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
SET AUTOCOMMIT=0;
|
||||
INSERT INTO t2 VALUES ('muse');
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
|
||||
INSERT INTO t2 VALUES ('muse');
|
||||
COMMIT;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
# assert: must show three entries
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
3
|
||||
SET AUTOCOMMIT= 1;
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
DELETE FROM t2;
|
||||
RESET MASTER;
|
||||
###################### TEST #7
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
0
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t4;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
# assert: must show 1 entry
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
1
|
||||
### check that the incident event is written to the current log
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Incident # # #1 (LOST_EVENTS)
|
||||
DELETE FROM t4;
|
||||
RESET MASTER;
|
||||
###################### TEST #8
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
# must show 0 entries
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
0
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
0
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t4;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/bug_46166.data' INTO TABLE t2;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
INSERT INTO t2 VALUES ('aaa'), ('bbb'), ('ccc');
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
# INFO: Count(*) Before Offending DELETEs
|
||||
# assert: must show 1 entry
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
1
|
||||
# assert: must show 4 entries
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
4
|
||||
DELETE FROM t4;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
DELETE FROM t2;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
# INFO: Count(*) After Offending DELETEs
|
||||
# assert: must show zero entries
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
0
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
0
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
###################### TEST #9
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
SET SQL_LOG_BIN=0;
|
||||
INSERT INTO t2 VALUES ('aaa'), ('bbb'), ('ccc'), ('ddd');
|
||||
INSERT INTO t4 VALUES ('eee'), ('fff'), ('ggg'), ('hhh');
|
||||
# assert: must show four entries
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
4
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
4
|
||||
DELETE FROM t2;
|
||||
DELETE FROM t4;
|
||||
# assert: must show zero entries
|
||||
SELECT count(*) FROM t2;
|
||||
count(*)
|
||||
0
|
||||
SELECT count(*) FROM t4;
|
||||
count(*)
|
||||
0
|
||||
SET SQL_LOG_BIN=1;
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
###################### TEST #10
|
||||
call mtr.add_suppression("MSYQL_BIN_LOG::open failed to sync the index file.");
|
||||
call mtr.add_suppression("Could not open .*");
|
||||
RESET MASTER;
|
||||
SHOW WARNINGS;
|
||||
Level Code Message
|
||||
SET GLOBAL debug_dbug="+d,fault_injection_registering_index";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Can't open file: 'master-bin.000002' (errno: 1 "Operation not permitted")
|
||||
SET GLOBAL debug_dbug="-d,fault_injection_registering_index";
|
||||
SHOW BINARY LOGS;
|
||||
ERROR HY000: You are not using binary logging
|
||||
CREATE TABLE t5 (a INT);
|
||||
INSERT INTO t4 VALUES ('bbbbb');
|
||||
INSERT INTO t2 VALUES ('aaaaa');
|
||||
DELETE FROM t4;
|
||||
DELETE FROM t2;
|
||||
DROP TABLE t5;
|
||||
###################### TEST #11
|
||||
include/rpl_restart_server.inc [server_number=1]
|
||||
SET GLOBAL debug_dbug="+d,fault_injection_openning_index";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Can't open file: 'master-bin.index' (errno: 1 "Operation not permitted")
|
||||
SET GLOBAL debug_dbug="-d,fault_injection_openning_index";
|
||||
RESET MASTER;
|
||||
ERROR HY000: Binlog closed, cannot RESET MASTER
|
||||
CREATE TABLE t5 (a INT);
|
||||
INSERT INTO t4 VALUES ('bbbbb');
|
||||
INSERT INTO t2 VALUES ('aaaaa');
|
||||
DELETE FROM t4;
|
||||
DELETE FROM t2;
|
||||
DROP TABLE t5;
|
||||
include/rpl_restart_server.inc [server_number=1]
|
||||
###################### TEST #12
|
||||
SET GLOBAL debug_dbug="+d,fault_injection_new_file_rotate_event";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Can't open file: 'master-bin' (errno: 2 "No such file or directory")
|
||||
SET GLOBAL debug_dbug="-d,fault_injection_new_file_rotate_event";
|
||||
RESET MASTER;
|
||||
ERROR HY000: Binlog closed, cannot RESET MASTER
|
||||
CREATE TABLE t5 (a INT);
|
||||
INSERT INTO t4 VALUES ('bbbbb');
|
||||
INSERT INTO t2 VALUES ('aaaaa');
|
||||
DELETE FROM t4;
|
||||
DELETE FROM t2;
|
||||
DROP TABLE t5;
|
||||
include/rpl_restart_server.inc [server_number=1]
|
||||
DROP TABLE t1, t2, t4;
|
||||
RESET MASTER;
|
||||
include/start_slave.inc
|
||||
#######################################################################
|
||||
####################### PART 2: SLAVE TESTS ###########################
|
||||
#######################################################################
|
||||
include/rpl_reset.inc
|
||||
call mtr.add_suppression("Slave I/O: Relay log write failure: could not queue event from master.*");
|
||||
call mtr.add_suppression("Error writing file .*");
|
||||
call mtr.add_suppression("Could not open .*");
|
||||
call mtr.add_suppression("MSYQL_BIN_LOG::open failed to sync the index file.");
|
||||
call mtr.add_suppression("Can't generate a unique log-filename .*");
|
||||
###################### TEST #13
|
||||
SET @old_debug=@@global.debug;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug="+d,error_unique_log_filename";
|
||||
START SLAVE io_thread;
|
||||
include/wait_for_slave_io_error.inc [errno=1595]
|
||||
Last_IO_Error = 'Relay log write failure: could not queue event from master'
|
||||
SET GLOBAL debug_dbug="-d,error_unique_log_filename";
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
include/rpl_restart_server.inc [server_number=2]
|
||||
###################### TEST #14
|
||||
SET @old_debug=@@global.debug;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug="+d,fault_injection_new_file_rotate_event";
|
||||
START SLAVE io_thread;
|
||||
include/wait_for_slave_io_error.inc [errno=1595]
|
||||
Last_IO_Error = 'Relay log write failure: could not queue event from master'
|
||||
SET GLOBAL debug_dbug="-d,fault_injection_new_file_rotate_event";
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
include/rpl_restart_server.inc [server_number=2]
|
||||
###################### TEST #15
|
||||
SET @old_debug=@@global.debug;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug="+d,fault_injection_registering_index";
|
||||
START SLAVE io_thread;
|
||||
include/wait_for_slave_io_error.inc [errno=1595]
|
||||
Last_IO_Error = 'Relay log write failure: could not queue event from master'
|
||||
SET GLOBAL debug_dbug="-d,fault_injection_registering_index";
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
include/rpl_restart_server.inc [server_number=2]
|
||||
###################### TEST #16
|
||||
SET @old_debug=@@global.debug;
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL debug_dbug="+d,fault_injection_openning_index";
|
||||
START SLAVE io_thread;
|
||||
include/wait_for_slave_io_error.inc [errno=1595]
|
||||
Last_IO_Error = 'Relay log write failure: could not queue event from master'
|
||||
SET GLOBAL debug_dbug="-d,fault_injection_openning_index";
|
||||
SET GLOBAL debug_dbug=@old_debug;
|
||||
include/rpl_restart_server.inc [server_number=2]
|
||||
include/stop_slave_sql.inc
|
||||
Warnings:
|
||||
Note 1255 Slave already has been stopped
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1,2 @@
|
||||
--let $binlog_limit= 5,1
|
||||
--source extra/rpl_tests/rpl_binlog_errors.inc
|
||||
@@ -0,0 +1,21 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
include/stop_slave.inc
|
||||
call mtr.add_suppression("Error in Log_event::read_log_event()");
|
||||
include/rpl_stop_server.inc [server_number=1]
|
||||
include/rpl_start_server.inc [server_number=1]
|
||||
show binlog events;
|
||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
|
||||
call mtr.add_suppression("Slave I/O: Got fatal error 1236 from master when reading data from binary log");
|
||||
reset slave;
|
||||
start slave;
|
||||
include/wait_for_slave_param.inc [Last_IO_Errno]
|
||||
Last_IO_Errno = '1236'
|
||||
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'binlog truncated in the middle of event; consider out of disk space on master; the first event '.' at XXX, the last event read from 'master-bin.000001' at XXX, the last byte read from 'master-bin.000001' at XXX.''
|
||||
reset master;
|
||||
stop slave;
|
||||
reset slave;
|
||||
drop table if exists t;
|
||||
reset master;
|
||||
End of the tests
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_cant_read_event_incident.inc
|
||||
10
mysql-test/suite/binlog_encryption/rpl_checksum.cnf
Normal file
10
mysql-test/suite/binlog_encryption/rpl_checksum.cnf
Normal file
@@ -0,0 +1,10 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
binlog-checksum=CRC32
|
||||
|
||||
[mysqld.2]
|
||||
binlog-checksum=CRC32
|
||||
plugin-load-add= @ENV.FILE_KEY_MANAGEMENT_SO
|
||||
loose-file-key-management-filename=@ENV.MYSQLTEST_VARDIR/std_data/keys.txt
|
||||
encrypt-binlog
|
||||
161
mysql-test/suite/binlog_encryption/rpl_checksum.result
Normal file
161
mysql-test/suite/binlog_encryption/rpl_checksum.result
Normal file
@@ -0,0 +1,161 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression('Slave can not handle replication events with the checksum that master is configured to log');
|
||||
call mtr.add_suppression('Replication event checksum verification failed');
|
||||
call mtr.add_suppression('Relay log write failure: could not queue event from master');
|
||||
call mtr.add_suppression('Master is configured to log replication events with checksum, but will not send such events to slaves that cannot process them');
|
||||
set @master_save_binlog_checksum= @@global.binlog_checksum;
|
||||
set @save_master_verify_checksum = @@global.master_verify_checksum;
|
||||
select @@global.binlog_checksum as 'must be CRC32 because of the command line option';
|
||||
must be CRC32 because of the command line option
|
||||
CRC32
|
||||
select @@session.binlog_checksum as 'no session var';
|
||||
ERROR HY000: Variable 'binlog_checksum' is a GLOBAL variable
|
||||
select @@global.master_verify_checksum as 'must be zero because of default';
|
||||
must be zero because of default
|
||||
0
|
||||
select @@session.master_verify_checksum as 'no session var';
|
||||
ERROR HY000: Variable 'master_verify_checksum' is a GLOBAL variable
|
||||
set @slave_save_binlog_checksum= @@global.binlog_checksum;
|
||||
set @save_slave_sql_verify_checksum = @@global.slave_sql_verify_checksum;
|
||||
select @@global.slave_sql_verify_checksum as 'must be one because of default';
|
||||
must be one because of default
|
||||
1
|
||||
select @@session.slave_sql_verify_checksum as 'no session var';
|
||||
ERROR HY000: Variable 'slave_sql_verify_checksum' is a GLOBAL variable
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
set @@global.binlog_checksum = NONE;
|
||||
select @@global.binlog_checksum;
|
||||
@@global.binlog_checksum
|
||||
NONE
|
||||
*** must be rotations seen ***
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
set @@global.binlog_checksum = default;
|
||||
select @@global.binlog_checksum;
|
||||
@@global.binlog_checksum
|
||||
NONE
|
||||
set @@global.binlog_checksum = CRC32;
|
||||
select @@global.binlog_checksum;
|
||||
@@global.binlog_checksum
|
||||
CRC32
|
||||
set @@global.binlog_checksum = CRC32;
|
||||
set @@global.master_verify_checksum = 0;
|
||||
set @@global.master_verify_checksum = default;
|
||||
set @@global.binlog_checksum = ADLER32;
|
||||
ERROR 42000: Variable 'binlog_checksum' can't be set to the value of 'ADLER32'
|
||||
set @@global.master_verify_checksum = 2;
|
||||
ERROR 42000: Variable 'master_verify_checksum' can't be set to the value of '2'
|
||||
set @@global.slave_sql_verify_checksum = 0;
|
||||
set @@global.slave_sql_verify_checksum = default;
|
||||
set @@global.slave_sql_verify_checksum = 2;
|
||||
ERROR 42000: Variable 'slave_sql_verify_checksum' can't be set to the value of '2'
|
||||
set @@global.binlog_checksum = NONE;
|
||||
create table t1 (a int);
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
flush logs;
|
||||
select count(*) as zero from t1;
|
||||
zero
|
||||
0
|
||||
include/stop_slave.inc
|
||||
set @@global.binlog_checksum = CRC32;
|
||||
insert into t1 values (1) /* will not be applied on slave due to simulation */;
|
||||
set @@global.debug_dbug='d,simulate_slave_unaware_checksum';
|
||||
start slave;
|
||||
include/wait_for_slave_io_error.inc [errno=1236]
|
||||
Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replication events with the checksum that master is configured to log; the first event 'master-bin.000009' at 404, the last event read from 'master-bin.000010' at 4, the last byte read from 'master-bin.000010' at 249.''
|
||||
select count(*) as zero from t1;
|
||||
zero
|
||||
0
|
||||
set @@global.debug_dbug='';
|
||||
include/start_slave.inc
|
||||
set @@global.master_verify_checksum = 1;
|
||||
set @@session.debug_dbug='d,simulate_checksum_test_failure';
|
||||
show binlog events;
|
||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
|
||||
set @@session.debug_dbug='';
|
||||
set @@global.master_verify_checksum = default;
|
||||
include/stop_slave.inc
|
||||
create table t2 (a int);
|
||||
set @@global.debug_dbug='d,simulate_checksum_test_failure';
|
||||
start slave io_thread;
|
||||
include/wait_for_slave_io_error.inc [errno=1595,1913]
|
||||
set @@global.debug_dbug='';
|
||||
start slave io_thread;
|
||||
include/wait_for_slave_param.inc [Read_Master_Log_Pos]
|
||||
set @@global.slave_sql_verify_checksum = 1;
|
||||
set @@global.debug_dbug='d,simulate_checksum_test_failure';
|
||||
start slave sql_thread;
|
||||
include/wait_for_slave_sql_error.inc [errno=1593]
|
||||
Last_SQL_Error = 'Error initializing relay log position: I/O error reading event at position 4'
|
||||
set @@global.debug_dbug='';
|
||||
include/start_slave.inc
|
||||
select count(*) as 'must be zero' from t2;
|
||||
must be zero
|
||||
0
|
||||
stop slave;
|
||||
reset slave;
|
||||
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
|
||||
flush logs;
|
||||
set @@global.binlog_checksum= CRC32;
|
||||
reset master;
|
||||
flush logs;
|
||||
create table t3 (a int, b char(5));
|
||||
include/start_slave.inc
|
||||
select count(*) as 'must be zero' from t3;
|
||||
must be zero
|
||||
0
|
||||
include/stop_slave.inc
|
||||
change master to master_host='127.0.0.1',master_port=MASTER_PORT, master_user='root';
|
||||
flush logs;
|
||||
reset master;
|
||||
insert into t3 value (1, @@global.binlog_checksum);
|
||||
include/start_slave.inc
|
||||
flush logs;
|
||||
select count(*) as 'must be one' from t3;
|
||||
must be one
|
||||
1
|
||||
set @@global.binlog_checksum= IF(floor((rand()*1000)%2), "CRC32", "NONE");
|
||||
insert into t3 value (1, @@global.binlog_checksum);
|
||||
drop table t1, t2, t3;
|
||||
set @@global.binlog_checksum = @master_save_binlog_checksum;
|
||||
set @@global.master_verify_checksum = @save_master_verify_checksum;
|
||||
*** Bug#59123 / MDEV-5799: INCIDENT_EVENT checksum written to error log as garbage characters ***
|
||||
CREATE TABLE t4 (a INT PRIMARY KEY);
|
||||
INSERT INTO t4 VALUES (1);
|
||||
SET sql_log_bin=0;
|
||||
CALL mtr.add_suppression("\\[ERROR\\] Can't generate a unique log-filename");
|
||||
SET sql_log_bin=1;
|
||||
SET @old_dbug= @@GLOBAL.debug_dbug;
|
||||
SET debug_dbug= '+d,binlog_inject_new_name_error';
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Can't generate a unique log-filename master-bin.(1-999)
|
||||
|
||||
SET debug_dbug= @old_dbug;
|
||||
INSERT INTO t4 VALUES (2);
|
||||
include/wait_for_slave_sql_error.inc [errno=1590]
|
||||
Last_SQL_Error = 'The incident LOST_EVENTS occurred on the master. Message: error writing to the binary log'
|
||||
FOUND /Slave SQL: The incident LOST_EVENTS occurred on the master\. Message: error writing to the binary log, Internal MariaDB error code: 1590/ in mysqld.2.err
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a
|
||||
1
|
||||
STOP SLAVE IO_THREAD;
|
||||
SET sql_slave_skip_counter= 1;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
set @@global.binlog_checksum = @slave_save_binlog_checksum;
|
||||
set @@global.slave_sql_verify_checksum = @save_slave_sql_verify_checksum;
|
||||
End of tests
|
||||
DROP TABLE t4;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_checksum.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_checksum.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_checksum.inc
|
||||
119
mysql-test/suite/binlog_encryption/rpl_checksum_cache.result
Normal file
119
mysql-test/suite/binlog_encryption/rpl_checksum_cache.result
Normal file
@@ -0,0 +1,119 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. Statement: insert into t2 set data=repeat.*'a', @act_size.*");
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave. Statement: insert into t1 values.* NAME_CONST.*'n',.*, @data .*");
|
||||
set @save_binlog_cache_size = @@global.binlog_cache_size;
|
||||
set @save_binlog_checksum = @@global.binlog_checksum;
|
||||
set @save_master_verify_checksum = @@global.master_verify_checksum;
|
||||
set @@global.binlog_cache_size = 4096;
|
||||
set @@global.binlog_checksum = CRC32;
|
||||
set @@global.master_verify_checksum = 1;
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
flush status;
|
||||
show status like "binlog_cache_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_use 0
|
||||
show status like "binlog_cache_disk_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_disk_use 0
|
||||
drop table if exists t1;
|
||||
create table t1 (a int PRIMARY KEY, b CHAR(32)) engine=innodb;
|
||||
create procedure test.p_init (n int, size int)
|
||||
begin
|
||||
while n > 0 do
|
||||
select round(RAND() * size) into @act_size;
|
||||
set @data = repeat('a', @act_size);
|
||||
insert into t1 values(n, @data );
|
||||
set n= n-1;
|
||||
end while;
|
||||
end|
|
||||
begin;
|
||||
call test.p_init(4000, 32);
|
||||
commit;
|
||||
show status like "binlog_cache_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_use 1
|
||||
*** binlog_cache_disk_use must be non-zero ***
|
||||
show status like "binlog_cache_disk_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_disk_use 1
|
||||
include/diff_tables.inc [master:test.t1, slave:test.t1]
|
||||
begin;
|
||||
delete from t1;
|
||||
commit;
|
||||
flush status;
|
||||
create table t2(a int auto_increment primary key, data VARCHAR(12288)) ENGINE=Innodb;
|
||||
show status like "binlog_cache_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_use 1
|
||||
*** binlog_cache_disk_use must be non-zero ***
|
||||
show status like "binlog_cache_disk_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_disk_use 1
|
||||
include/diff_tables.inc [master:test.t2, slave:test.t2]
|
||||
begin;
|
||||
delete from t2;
|
||||
commit;
|
||||
flush status;
|
||||
create table t3(a int auto_increment primary key, data VARCHAR(8192)) engine=innodb;
|
||||
show status like "binlog_cache_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_use 1
|
||||
*** binlog_cache_disk_use must be non-zero ***
|
||||
show status like "binlog_cache_disk_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_disk_use 1
|
||||
include/diff_tables.inc [master:test.t3, slave:test.t3]
|
||||
begin;
|
||||
delete from t3;
|
||||
commit;
|
||||
flush status;
|
||||
create procedure test.p1 (n int)
|
||||
begin
|
||||
while n > 0 do
|
||||
case (select (round(rand()*100) % 3) + 1)
|
||||
when 1 then
|
||||
select round(RAND() * 32) into @act_size;
|
||||
set @data = repeat('a', @act_size);
|
||||
insert into t1 values(n, @data);
|
||||
when 2 then
|
||||
begin
|
||||
select round(8192 + RAND() * 4096) into @act_size;
|
||||
insert into t2 set data=repeat('a', @act_size);
|
||||
end;
|
||||
when 3 then
|
||||
begin
|
||||
select round(3686.4000 + RAND() * 819.2000) into @act_size;
|
||||
insert into t3 set data= repeat('a', @act_size);
|
||||
end;
|
||||
end case;
|
||||
set n= n-1;
|
||||
end while;
|
||||
end|
|
||||
set autocommit= 0;
|
||||
begin;
|
||||
call test.p1(1000);
|
||||
commit;
|
||||
show status like "binlog_cache_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_use 1
|
||||
*** binlog_cache_disk_use must be non-zero ***
|
||||
show status like "binlog_cache_disk_use";
|
||||
Variable_name Value
|
||||
Binlog_cache_disk_use 1
|
||||
include/diff_tables.inc [master:test.t1, slave:test.t1]
|
||||
include/diff_tables.inc [master:test.t2, slave:test.t2]
|
||||
include/diff_tables.inc [master:test.t3, slave:test.t3]
|
||||
begin;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t3;
|
||||
commit;
|
||||
drop table t1, t2, t3;
|
||||
set @@global.binlog_cache_size = @save_binlog_cache_size;
|
||||
set @@global.binlog_checksum = @save_binlog_checksum;
|
||||
set @@global.master_verify_checksum = @save_master_verify_checksum;
|
||||
drop procedure test.p_init;
|
||||
drop procedure test.p1;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_checksum_cache.inc
|
||||
9
mysql-test/suite/binlog_encryption/rpl_corruption.cnf
Normal file
9
mysql-test/suite/binlog_encryption/rpl_corruption.cnf
Normal file
@@ -0,0 +1,9 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
binlog-checksum=CRC32
|
||||
master-verify-checksum=1
|
||||
|
||||
[mysqld.2]
|
||||
binlog-checksum=CRC32
|
||||
slave-sql-verify-checksum=1
|
||||
51
mysql-test/suite/binlog_encryption/rpl_corruption.result
Normal file
51
mysql-test/suite/binlog_encryption/rpl_corruption.result
Normal file
@@ -0,0 +1,51 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression('Found invalid event in binary log');
|
||||
call mtr.add_suppression('Slave I/O: Relay log write failure: could not queue event from master');
|
||||
call mtr.add_suppression('event read from binlog did not pass crc check');
|
||||
call mtr.add_suppression('Replication event checksum verification failed');
|
||||
call mtr.add_suppression('Event crc check failed! Most likely there is event corruption');
|
||||
call mtr.add_suppression('Slave SQL: Error initializing relay log position: I/O error reading event at position .*, error.* 1593');
|
||||
SET @old_master_verify_checksum = @@master_verify_checksum;
|
||||
# 1. Creating test table/data and set corruption position for testing
|
||||
* insert/update/delete rows in table t1 *
|
||||
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b VARCHAR(10), c VARCHAR(100));
|
||||
include/stop_slave.inc
|
||||
# 2. Corruption in master binlog and SHOW BINLOG EVENTS
|
||||
SET GLOBAL debug_dbug="+d,corrupt_read_log_event_char";
|
||||
SHOW BINLOG EVENTS;
|
||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
|
||||
SET GLOBAL debug_dbug="-d,corrupt_read_log_event_char";
|
||||
# 3. Master read a corrupted event from binlog and send the error to slave
|
||||
SET GLOBAL debug_dbug="+d,corrupt_read_log_event2_set";
|
||||
START SLAVE IO_THREAD;
|
||||
include/wait_for_slave_io_error.inc [errno=1236]
|
||||
SET GLOBAL debug_dbug="-d,corrupt_read_log_event2_set";
|
||||
# 4. Master read a corrupted event from binlog and send it to slave
|
||||
SET GLOBAL master_verify_checksum=0;
|
||||
SET GLOBAL debug_dbug="+d,corrupt_read_log_event2_set";
|
||||
START SLAVE IO_THREAD;
|
||||
include/wait_for_slave_io_error.inc [errno=1595,1913]
|
||||
SET GLOBAL debug_dbug="-d,corrupt_read_log_event2_set";
|
||||
SET GLOBAL debug_dbug= "";
|
||||
SET GLOBAL master_verify_checksum=1;
|
||||
# 5. Slave. Corruption in network
|
||||
SET GLOBAL debug_dbug="+d,corrupt_queue_event";
|
||||
START SLAVE IO_THREAD;
|
||||
include/wait_for_slave_io_error.inc [errno=1595,1913]
|
||||
SET GLOBAL debug_dbug="-d,corrupt_queue_event";
|
||||
# 6. Slave. Corruption in relay log
|
||||
SET GLOBAL debug_dbug="+d,corrupt_read_log_event_char";
|
||||
START SLAVE SQL_THREAD;
|
||||
include/wait_for_slave_sql_error.inc [errno=1593]
|
||||
SET GLOBAL debug_dbug="-d,corrupt_read_log_event_char";
|
||||
SET GLOBAL debug_dbug= "";
|
||||
# 7. Seek diff for tables on master and slave
|
||||
include/start_slave.inc
|
||||
include/diff_tables.inc [master:test.t1, slave:test.t1]
|
||||
# 8. Clean up
|
||||
SET GLOBAL debug_dbug= "";
|
||||
SET GLOBAL master_verify_checksum = @old_master_verify_checksum;
|
||||
DROP TABLE t1;
|
||||
SET GLOBAL debug_dbug= "";
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_corruption.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_corruption.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_corruption.inc
|
||||
24
mysql-test/suite/binlog_encryption/rpl_gtid_basic.cnf
Normal file
24
mysql-test/suite/binlog_encryption/rpl_gtid_basic.cnf
Normal file
@@ -0,0 +1,24 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
log-slave-updates
|
||||
|
||||
[mysqld.2]
|
||||
init-rpl-role= slave
|
||||
master-retry-count= 10
|
||||
skip-slave-start
|
||||
|
||||
[mysqld.3]
|
||||
log-slave-updates
|
||||
innodb
|
||||
|
||||
[mysqld.4]
|
||||
log-slave-updates
|
||||
innodb
|
||||
|
||||
[ENV]
|
||||
SERVER_MYPORT_3= @mysqld.3.port
|
||||
SERVER_MYSOCK_3= @mysqld.3.socket
|
||||
|
||||
SERVER_MYPORT_4= @mysqld.4.port
|
||||
SERVER_MYSOCK_4= @mysqld.4.socket
|
||||
481
mysql-test/suite/binlog_encryption/rpl_gtid_basic.result
Normal file
481
mysql-test/suite/binlog_encryption/rpl_gtid_basic.result
Normal file
@@ -0,0 +1,481 @@
|
||||
include/rpl_init.inc [topology=1->2->3->4]
|
||||
*** GTID position should be empty here ***
|
||||
SELECT BINLOG_GTID_POS('<BINLOG_FILE>',<BINLOG_POS>);
|
||||
BINLOG_GTID_POS('<BINLOG_FILE>',<BINLOG_POS>)
|
||||
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b VARCHAR(10)) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1, "m1");
|
||||
INSERT INTO t1 VALUES (2, "m2"), (3, "m3"), (4, "m4");
|
||||
INSERT INTO t2 VALUES (1, "i1");
|
||||
BEGIN;
|
||||
INSERT INTO t2 VALUES (2, "i2"), (3, "i3");
|
||||
INSERT INTO t2 VALUES (4, "i4");
|
||||
COMMIT;
|
||||
*** GTID position should be non-empty here ***
|
||||
SELECT BINLOG_GTID_POS('<BINLOG_FILE>',<BINLOG_POS>);
|
||||
BINLOG_GTID_POS('<BINLOG_FILE>',<BINLOG_POS>)
|
||||
<GTID_POS_SERVER_1>
|
||||
*** GTID position should be the same as on server_1 ***
|
||||
SELECT BINLOG_GTID_POS('<BINLOG_FILE>',<BINLOG_POS>);
|
||||
BINLOG_GTID_POS('<BINLOG_FILE>',<BINLOG_POS>)
|
||||
<GTID_POS_SERVER_1>
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 m1
|
||||
2 m2
|
||||
3 m3
|
||||
4 m4
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 i1
|
||||
2 i2
|
||||
3 i3
|
||||
4 i4
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 m1
|
||||
2 m2
|
||||
3 m3
|
||||
4 m4
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 i1
|
||||
2 i2
|
||||
3 i3
|
||||
4 i4
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 m1
|
||||
2 m2
|
||||
3 m3
|
||||
4 m4
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 i1
|
||||
2 i2
|
||||
3 i3
|
||||
4 i4
|
||||
*** Now take out D, let it fall behind a bit, and then test re-attaching it to A ***
|
||||
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=CURRENT_POS;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 m1
|
||||
2 m2
|
||||
3 m3
|
||||
4 m4
|
||||
5 m1a
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 i1
|
||||
2 i2
|
||||
3 i3
|
||||
4 i4
|
||||
5 i1a
|
||||
*** Now move B to D (C is still replicating from B) ***
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4,
|
||||
MASTER_USE_GTID=CURRENT_POS;
|
||||
include/start_slave.inc
|
||||
UPDATE t2 SET b="j1a" WHERE a=5;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 m1
|
||||
2 m2
|
||||
3 m3
|
||||
4 m4
|
||||
5 m1a
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 i1
|
||||
2 i2
|
||||
3 i3
|
||||
4 i4
|
||||
5 j1a
|
||||
*** Now move C to D, after letting it fall a little behind ***
|
||||
include/stop_slave.inc
|
||||
INSERT INTO t2 VALUES (6, "i6b");
|
||||
INSERT INTO t2 VALUES (7, "i7b");
|
||||
include/save_master_gtid.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_4,
|
||||
MASTER_USE_GTID=CURRENT_POS;
|
||||
include/start_slave.inc
|
||||
include/sync_with_master_gtid.inc
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 i1
|
||||
2 i2
|
||||
3 i3
|
||||
4 i4
|
||||
5 j1a
|
||||
6 i6b
|
||||
7 i7b
|
||||
*** Now change everything back to what it was, to make rpl_end.inc happy
|
||||
include/sync_with_master_gtid.inc
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = MASTER_MYPORT;
|
||||
include/start_slave.inc
|
||||
include/wait_for_slave_to_start.inc
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SLAVE_MYPORT;
|
||||
include/start_slave.inc
|
||||
include/sync_with_master_gtid.inc
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO master_host = '127.0.0.1', master_port = SERVER_MYPORT_3;
|
||||
include/start_slave.inc
|
||||
DROP TABLE t1,t2;
|
||||
include/save_master_gtid.inc
|
||||
*** A few more checks for BINLOG_GTID_POS function ***
|
||||
SELECT BINLOG_GTID_POS();
|
||||
ERROR 42000: Incorrect parameter count in the call to native function 'BINLOG_GTID_POS'
|
||||
SELECT BINLOG_GTID_POS('a');
|
||||
ERROR 42000: Incorrect parameter count in the call to native function 'BINLOG_GTID_POS'
|
||||
SELECT BINLOG_GTID_POS('a',1,NULL);
|
||||
ERROR 42000: Incorrect parameter count in the call to native function 'BINLOG_GTID_POS'
|
||||
SELECT BINLOG_GTID_POS(1,'a');
|
||||
BINLOG_GTID_POS(1,'a')
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1292 Truncated incorrect INTEGER value: 'a'
|
||||
SELECT BINLOG_GTID_POS(NULL,NULL);
|
||||
BINLOG_GTID_POS(NULL,NULL)
|
||||
NULL
|
||||
SELECT BINLOG_GTID_POS('',1);
|
||||
BINLOG_GTID_POS('',1)
|
||||
|
||||
SELECT BINLOG_GTID_POS('a',1);
|
||||
BINLOG_GTID_POS('a',1)
|
||||
NULL
|
||||
SELECT BINLOG_GTID_POS('master-bin.000001',-1);
|
||||
BINLOG_GTID_POS('master-bin.000001',-1)
|
||||
NULL
|
||||
SELECT BINLOG_GTID_POS('master-bin.000001',0);
|
||||
BINLOG_GTID_POS('master-bin.000001',0)
|
||||
|
||||
SELECT BINLOG_GTID_POS('master-bin.000001',18446744073709551615);
|
||||
BINLOG_GTID_POS('master-bin.000001',18446744073709551615)
|
||||
NULL
|
||||
SELECT BINLOG_GTID_POS('master-bin.000001',18446744073709551616);
|
||||
BINLOG_GTID_POS('master-bin.000001',18446744073709551616)
|
||||
NULL
|
||||
Warnings:
|
||||
Warning 1916 Got overflow when converting '18446744073709551616' to INT. Value truncated.
|
||||
*** Some tests of @@GLOBAL.gtid_binlog_state ***
|
||||
include/sync_with_master_gtid.inc
|
||||
include/stop_slave.inc
|
||||
SET @old_state= @@GLOBAL.gtid_binlog_state;
|
||||
SET GLOBAL gtid_binlog_state = '';
|
||||
ERROR HY000: This operation is not allowed if any GTID has been logged to the binary log. Run RESET MASTER first to erase the log
|
||||
RESET MASTER;
|
||||
SET GLOBAL gtid_binlog_state = '';
|
||||
FLUSH LOGS;
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
master-bin.000002 #
|
||||
SET GLOBAL gtid_binlog_state = '0-1-10,1-2-20,0-3-30';
|
||||
show binary logs;
|
||||
Log_name File_size
|
||||
master-bin.000001 #
|
||||
include/show_binlog_events.inc
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Format_desc # # SERVER_VERSION, BINLOG_VERSION
|
||||
master-bin.000001 # Start_encryption # #
|
||||
master-bin.000001 # Gtid_list # # [#-#-#]
|
||||
master-bin.000001 # Binlog_checkpoint # # master-bin.000001
|
||||
SET GLOBAL gtid_binlog_state = @old_state;
|
||||
ERROR HY000: This operation is not allowed if any GTID has been logged to the binary log. Run RESET MASTER first to erase the log
|
||||
RESET MASTER;
|
||||
SET GLOBAL gtid_binlog_state = @old_state;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||
SET gtid_seq_no=100;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
include/save_master_gtid.inc
|
||||
include/start_slave.inc
|
||||
include/sync_with_master_gtid.inc
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
Gtid_IO_Pos = '0-1-100'
|
||||
*** Test @@LAST_GTID and MASTER_GTID_WAIT() ***
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
|
||||
include/stop_slave.inc
|
||||
SELECT @@last_gtid;
|
||||
@@last_gtid
|
||||
|
||||
SET gtid_seq_no=110;
|
||||
SELECT @@last_gtid;
|
||||
@@last_gtid
|
||||
|
||||
BEGIN;
|
||||
SELECT @@last_gtid;
|
||||
@@last_gtid
|
||||
|
||||
INSERT INTO t1 VALUES (2);
|
||||
SELECT @@last_gtid;
|
||||
@@last_gtid
|
||||
|
||||
COMMIT;
|
||||
SELECT @@last_gtid;
|
||||
@@last_gtid
|
||||
0-1-110
|
||||
SET @pos= '0-1-110';
|
||||
SELECT master_gtid_wait(NULL);
|
||||
master_gtid_wait(NULL)
|
||||
NULL
|
||||
SELECT master_gtid_wait('', NULL);
|
||||
master_gtid_wait('', NULL)
|
||||
0
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_count';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_count 1
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_timeouts';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_timeouts 0
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_time';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_time 0
|
||||
SELECT master_gtid_wait(@pos, 0.5);
|
||||
master_gtid_wait(@pos, 0.5)
|
||||
-1
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
SELECT master_gtid_wait(@pos);
|
||||
include/start_slave.inc
|
||||
master_gtid_wait(@pos)
|
||||
0
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
2
|
||||
include/stop_slave.inc
|
||||
SET gtid_domain_id= 1;
|
||||
INSERT INTO t1 VALUES (3);
|
||||
SET @pos= 'POS';
|
||||
SELECT master_gtid_wait(@pos, 0);
|
||||
master_gtid_wait(@pos, 0)
|
||||
-1
|
||||
SELECT * FROM t1 WHERE a >= 3;
|
||||
a
|
||||
SELECT master_gtid_wait(@pos, -1);
|
||||
include/start_slave.inc
|
||||
master_gtid_wait(@pos, -1)
|
||||
0
|
||||
SELECT * FROM t1 WHERE a >= 3;
|
||||
a
|
||||
3
|
||||
SELECT master_gtid_wait('1-1-1', 0);
|
||||
master_gtid_wait('1-1-1', 0)
|
||||
0
|
||||
SELECT master_gtid_wait('2-1-1,1-1-4,0-1-110');
|
||||
SELECT master_gtid_wait('0-1-1000', 0.5);
|
||||
SELECT master_gtid_wait('0-1-2000');
|
||||
SELECT master_gtid_wait('2-1-10');
|
||||
SELECT master_gtid_wait('2-1-6', 1);
|
||||
SELECT master_gtid_wait('2-1-5');
|
||||
SELECT master_gtid_wait('2-1-10');
|
||||
SELECT master_gtid_wait('2-1-5,1-1-4,0-1-110');
|
||||
SELECT master_gtid_wait('2-1-2');
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_timeouts';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_timeouts 0
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_count';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_count 3
|
||||
SELECT master_gtid_wait('1-1-1');
|
||||
master_gtid_wait('1-1-1')
|
||||
0
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_timeouts';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_timeouts 0
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_count';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_count 4
|
||||
SET @a= MASTER_GTID_WAIT_TIME;
|
||||
SELECT IF(@a <= 100*1000*1000, "OK", CONCAT("Error: wait time ", @a, " is larger than expected"))
|
||||
AS Master_gtid_wait_time_as_expected;
|
||||
Master_gtid_wait_time_as_expected
|
||||
OK
|
||||
SELECT master_gtid_wait('0-1-109');
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_timeouts';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_timeouts 0
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_count';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_count 4
|
||||
SELECT master_gtid_wait('2-1-2', 0.5);
|
||||
master_gtid_wait('2-1-2', 0.5)
|
||||
-1
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_timeouts';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_timeouts 1
|
||||
SHOW STATUS LIKE 'Master_gtid_wait_count';
|
||||
Variable_name Value
|
||||
Master_gtid_wait_count 5
|
||||
SET @a= MASTER_GTID_WAIT_TIME;
|
||||
SELECT IF(@a BETWEEN 0.4*1000*1000 AND 100*1000*1000, "OK", CONCAT("Error: wait time ", @a, " not as expected")) AS Master_gtid_wait_time_as_expected;
|
||||
Master_gtid_wait_time_as_expected
|
||||
OK
|
||||
KILL QUERY KILL_ID;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=2;
|
||||
INSERT INTO t1 VALUES (4);
|
||||
master_gtid_wait('2-1-2')
|
||||
0
|
||||
KILL CONNECTION KILL_ID;
|
||||
Got one of the listed errors
|
||||
SET gtid_domain_id=1;
|
||||
SET gtid_seq_no=4;
|
||||
INSERT INTO t1 VALUES (5);
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=5;
|
||||
INSERT INTO t1 VALUES (6);
|
||||
master_gtid_wait('2-1-5,1-1-4,0-1-110')
|
||||
0
|
||||
master_gtid_wait('2-1-1,1-1-4,0-1-110')
|
||||
0
|
||||
master_gtid_wait('0-1-1000', 0.5)
|
||||
-1
|
||||
master_gtid_wait('2-1-6', 1)
|
||||
-1
|
||||
master_gtid_wait('0-1-109')
|
||||
0
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=10;
|
||||
INSERT INTO t1 VALUES (7);
|
||||
master_gtid_wait('2-1-10')
|
||||
0
|
||||
master_gtid_wait('2-1-10')
|
||||
0
|
||||
*** Test gtid_slave_pos when used with GTID ***
|
||||
include/stop_slave.inc
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=1000;
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (11);
|
||||
SET sql_slave_skip_counter= 1;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 10 ORDER BY a;
|
||||
a
|
||||
11
|
||||
SELECT IF(LOCATE("2-1-1001", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 2-1-1001 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
include/stop_slave.inc
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=1010;
|
||||
INSERT INTO t1 VALUES (12);
|
||||
INSERT INTO t1 VALUES (13);
|
||||
SET sql_slave_skip_counter= 2;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 10 ORDER BY a;
|
||||
a
|
||||
11
|
||||
13
|
||||
SELECT IF(LOCATE("2-1-1011", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 2-1-1011 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
include/stop_slave.inc
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=1020;
|
||||
INSERT INTO t1 VALUES (14);
|
||||
INSERT INTO t1 VALUES (15);
|
||||
INSERT INTO t1 VALUES (16);
|
||||
SET sql_slave_skip_counter= 3;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 10 ORDER BY a;
|
||||
a
|
||||
11
|
||||
13
|
||||
15
|
||||
16
|
||||
SELECT IF(LOCATE("2-1-1022", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 2-1-1022 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
include/stop_slave.inc
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=1030;
|
||||
INSERT INTO t1 VALUES (17);
|
||||
INSERT INTO t1 VALUES (18);
|
||||
INSERT INTO t1 VALUES (19);
|
||||
SET sql_slave_skip_counter= 5;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 10 ORDER BY a;
|
||||
a
|
||||
11
|
||||
13
|
||||
15
|
||||
16
|
||||
19
|
||||
SELECT IF(LOCATE("2-1-1032", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 2-1-1032 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
include/stop_slave.inc
|
||||
SET gtid_domain_id=3;
|
||||
SET gtid_seq_no=100;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY);
|
||||
DROP TABLE t2;
|
||||
SET gtid_domain_id=2;
|
||||
SET gtid_seq_no=1040;
|
||||
INSERT INTO t1 VALUES (20);
|
||||
SET @saved_mode= @@GLOBAL.slave_ddl_exec_mode;
|
||||
SET GLOBAL slave_ddl_exec_mode=STRICT;
|
||||
SET sql_slave_skip_counter=1;
|
||||
START SLAVE UNTIL master_gtid_pos="3-1-100";
|
||||
include/sync_with_master_gtid.inc
|
||||
include/wait_for_slave_to_stop.inc
|
||||
SELECT * FROM t2;
|
||||
ERROR 42S02: Table 'test.t2' doesn't exist
|
||||
SELECT IF(LOCATE("3-1-100", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 3-1-100 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
SET sql_log_bin=0;
|
||||
CALL mtr.add_suppression("Slave: Unknown table 'test\\.t2' Error_code: 1051");
|
||||
SET sql_log_bin=1;
|
||||
START SLAVE;
|
||||
include/wait_for_slave_sql_error.inc [errno=1051]
|
||||
SELECT IF(LOCATE("3-1-100", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 3-1-100 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
STOP SLAVE IO_THREAD;
|
||||
SET sql_slave_skip_counter=2;
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 20 ORDER BY a;
|
||||
a
|
||||
20
|
||||
SELECT IF(LOCATE("3-1-101", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 3-1-101 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
SELECT IF(LOCATE("2-1-1040", @@GLOBAL.gtid_slave_pos)>0, "Ok", CONCAT("ERROR! expected GTID 2-1-1040 not found in gtid_slave_pos: ", @@GLOBAL.gtid_slave_pos)) AS status;
|
||||
status
|
||||
Ok
|
||||
SET GLOBAL slave_ddl_exec_mode= @saved_mode;
|
||||
*** Test GTID-connecting to a master with out-of-order sequence numbers in the binlog. ***
|
||||
SET gtid_domain_id= @@GLOBAL.gtid_domain_id;
|
||||
INSERT INTO t1 VALUES (31);
|
||||
SET gtid_domain_id= @@GLOBAL.gtid_domain_id;
|
||||
INSERT INTO t1 VALUES (32);
|
||||
INSERT INTO t1 VALUES (33);
|
||||
include/stop_slave.inc
|
||||
INSERT INTO t1 VALUES (34);
|
||||
include/start_slave.inc
|
||||
SELECT * FROM t1 WHERE a >= 30 ORDER BY a;
|
||||
a
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
SELECT * FROM t1 WHERE a >= 30 ORDER BY a;
|
||||
a
|
||||
31
|
||||
32
|
||||
33
|
||||
34
|
||||
DROP TABLE t1;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_gtid_basic.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_gtid_basic.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_gtid_basic.inc
|
||||
7
mysql-test/suite/binlog_encryption/rpl_incident.cnf
Normal file
7
mysql-test/suite/binlog_encryption/rpl_incident.cnf
Normal file
@@ -0,0 +1,7 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
binlog_checksum=NONE
|
||||
|
||||
[mysqld.2]
|
||||
binlog_checksum=NONE
|
||||
38
mysql-test/suite/binlog_encryption/rpl_incident.result
Normal file
38
mysql-test/suite/binlog_encryption/rpl_incident.result
Normal file
@@ -0,0 +1,38 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
**** On Master ****
|
||||
CREATE TABLE t1 (a INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SET GLOBAL debug_dbug= '+d,incident_database_resync_on_replace,*';
|
||||
REPLACE INTO t1 VALUES (4);
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
call mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occurred on the master.* 1590");
|
||||
include/wait_for_slave_sql_error.inc [errno=1590]
|
||||
Last_SQL_Error = 'The incident LOST_EVENTS occurred on the master. Message: <none>'
|
||||
**** On Slave ****
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
SELECT * FROM t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
include/check_slave_is_running.inc
|
||||
DROP TABLE t1;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_incident.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_incident.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_incident.inc
|
||||
@@ -0,0 +1,19 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
stop slave;
|
||||
reset slave;
|
||||
SET GLOBAL debug_dbug= "d,simulate_io_slave_error_on_init,simulate_sql_slave_error_on_init";
|
||||
start slave;
|
||||
include/wait_for_slave_sql_error.inc [errno=1593]
|
||||
Last_SQL_Error = 'Failed during slave thread initialization'
|
||||
call mtr.add_suppression("Failed during slave.* thread initialization");
|
||||
SET GLOBAL debug_dbug= "";
|
||||
reset slave;
|
||||
SET GLOBAL init_slave= "garbage";
|
||||
start slave;
|
||||
include/wait_for_slave_sql_error.inc [errno=1064]
|
||||
Last_SQL_Error = 'Slave SQL thread aborted. Can't execute init_slave query'
|
||||
SET GLOBAL init_slave= "";
|
||||
include/stop_slave_io.inc
|
||||
RESET SLAVE;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_init_slave_errors.inc
|
||||
125
mysql-test/suite/binlog_encryption/rpl_loaddata_local.result
Normal file
125
mysql-test/suite/binlog_encryption/rpl_loaddata_local.result
Normal file
@@ -0,0 +1,125 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
create table t1(a int);
|
||||
select * into outfile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' from t1;
|
||||
truncate table t1;
|
||||
load data local infile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' into table t1;
|
||||
select a,count(*) from t1 group by a;
|
||||
a count(*)
|
||||
1 10000
|
||||
drop table t1;
|
||||
create table t1(a int);
|
||||
insert into t1 values (1), (2), (2), (3);
|
||||
select * into outfile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' from t1;
|
||||
drop table t1;
|
||||
create table t1(a int primary key);
|
||||
load data local infile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' into table t1;
|
||||
Warnings:
|
||||
Warning 1062 Duplicate entry '2' for key 'PRIMARY'
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
drop table t1;
|
||||
==== Bug22504 Initialize ====
|
||||
[on master]
|
||||
SET sql_mode='ignore_space';
|
||||
CREATE TABLE t1(a int);
|
||||
insert into t1 values (1), (2), (3), (4);
|
||||
select * into outfile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' from t1;
|
||||
truncate table t1;
|
||||
load data local infile 'MYSQLD_DATADIR/rpl_loaddatalocal.select_outfile' into table t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
[on slave]
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
==== Clean up ====
|
||||
[on master]
|
||||
DROP TABLE t1;
|
||||
[on slave]
|
||||
|
||||
Bug #43746:
|
||||
"return wrong query string when parse 'load data infile' sql statement"
|
||||
|
||||
[master]
|
||||
SELECT @@SESSION.sql_mode INTO @old_mode;
|
||||
SET sql_mode='ignore_space';
|
||||
CREATE TABLE t1(a int);
|
||||
INSERT INTO t1 VALUES (1), (2), (3), (4);
|
||||
SELECT * INTO OUTFILE 'MYSQLD_DATADIR/bug43746.sql' FROM t1;
|
||||
TRUNCATE TABLE t1;
|
||||
LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1;
|
||||
LOAD/* look mum, with comments in weird places! */DATA/* oh hai */LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql'/* we are */INTO/* from the internets */TABLE t1;
|
||||
LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1;
|
||||
LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' /*!10000 INTO */ TABLE t1;
|
||||
LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' /*!10000 INTO TABLE */ t1;
|
||||
LOAD DATA /*!10000 LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE */ t1;
|
||||
LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql'/*!10000 INTO*/TABLE t1;
|
||||
LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql'/* empty */INTO TABLE t1;
|
||||
LOAD DATA/*!10000 LOCAL */INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO/* empty */TABLE t1;
|
||||
LOAD/*!999999 special comments that do not expand */DATA/*!999999 code from the future */LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql'/*!999999 have flux capacitor */INTO/*!999999 will travel */TABLE t1;
|
||||
SET sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,NO_AUTO_CREATE_USER';
|
||||
LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug43746.sql' INTO TABLE t1;
|
||||
[slave]
|
||||
|
||||
Bug #59267:
|
||||
"LOAD DATA LOCAL INFILE not executed on slave with SBR"
|
||||
|
||||
[master]
|
||||
SELECT * INTO OUTFILE 'MYSQLD_DATADIR/bug59267.sql' FROM t1;
|
||||
TRUNCATE TABLE t1;
|
||||
LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug59267.sql' INTO TABLE t1;
|
||||
SELECT 'Master', COUNT(*) FROM t1;
|
||||
Master COUNT(*)
|
||||
Master 44
|
||||
[slave]
|
||||
SELECT 'Slave', COUNT(*) FROM t1;
|
||||
Slave COUNT(*)
|
||||
Slave 44
|
||||
[master]
|
||||
DROP TABLE t1;
|
||||
SET SESSION sql_mode=@old_mode;
|
||||
[slave]
|
||||
|
||||
Bug #60580/#11902767:
|
||||
"statement improperly replicated crashes slave sql thread"
|
||||
|
||||
[master]
|
||||
CREATE TABLE t1(f1 INT, f2 INT);
|
||||
CREATE TABLE t2(f1 INT, f2 TIMESTAMP);
|
||||
INSERT INTO t2 VALUES(1, '2011-03-22 21:01:28');
|
||||
INSERT INTO t2 VALUES(2, '2011-03-21 21:01:28');
|
||||
INSERT INTO t2 VALUES(3, '2011-03-20 21:01:28');
|
||||
CREATE TABLE t3 AS SELECT * FROM t2;
|
||||
CREATE VIEW v1 AS SELECT * FROM t2
|
||||
WHERE f1 IN (SELECT f1 FROM t3 WHERE (t3.f2 IS NULL));
|
||||
SELECT 1 INTO OUTFILE 'MYSQLD_DATADIR/bug60580.csv' FROM DUAL;
|
||||
LOAD DATA LOCAL INFILE 'MYSQLD_DATADIR/bug60580.csv' INTO TABLE t1 (@f1) SET f2 = (SELECT f1 FROM v1 WHERE f1=@f1);
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
NULL NULL
|
||||
[slave]
|
||||
SELECT * FROM t1;
|
||||
f1 f2
|
||||
NULL NULL
|
||||
[master]
|
||||
DROP VIEW v1;
|
||||
DROP TABLE t1, t2, t3;
|
||||
[slave]
|
||||
include/rpl_end.inc
|
||||
# End of 5.1 tests
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_loaddata_local.inc
|
||||
242
mysql-test/suite/binlog_encryption/rpl_loadfile.result
Normal file
242
mysql-test/suite/binlog_encryption/rpl_loadfile.result
Normal file
@@ -0,0 +1,242 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
CREATE TABLE test.t1 (a INT, blob_column LONGBLOB, PRIMARY KEY(a));
|
||||
INSERT INTO test.t1 VALUES(1,'test');
|
||||
UPDATE test.t1 SET blob_column=LOAD_FILE('../../std_data/words2.dat') WHERE a=1;
|
||||
create procedure test.p1()
|
||||
begin
|
||||
INSERT INTO test.t1 VALUES(2,'test');
|
||||
UPDATE test.t1 SET blob_column=LOAD_FILE('../../std_data/words2.dat') WHERE a=2;
|
||||
end|
|
||||
CALL test.p1();
|
||||
SELECT * FROM test.t1 ORDER BY blob_column;
|
||||
a blob_column
|
||||
1 abase
|
||||
abased
|
||||
abasement
|
||||
abasements
|
||||
abases
|
||||
abash
|
||||
abashed
|
||||
abashes
|
||||
abashing
|
||||
abasing
|
||||
abate
|
||||
abated
|
||||
abatement
|
||||
abatements
|
||||
abater
|
||||
abates
|
||||
abating
|
||||
Abba
|
||||
abbe
|
||||
abbey
|
||||
abbeys
|
||||
abbot
|
||||
abbots
|
||||
Abbott
|
||||
abbreviate
|
||||
abbreviated
|
||||
abbreviates
|
||||
abbreviating
|
||||
abbreviation
|
||||
abbreviations
|
||||
Abby
|
||||
abdomen
|
||||
abdomens
|
||||
abdominal
|
||||
abduct
|
||||
abducted
|
||||
abduction
|
||||
abductions
|
||||
abductor
|
||||
abductors
|
||||
abducts
|
||||
Abe
|
||||
abed
|
||||
Abel
|
||||
Abelian
|
||||
Abelson
|
||||
Aberdeen
|
||||
Abernathy
|
||||
aberrant
|
||||
aberration
|
||||
|
||||
2 abase
|
||||
abased
|
||||
abasement
|
||||
abasements
|
||||
abases
|
||||
abash
|
||||
abashed
|
||||
abashes
|
||||
abashing
|
||||
abasing
|
||||
abate
|
||||
abated
|
||||
abatement
|
||||
abatements
|
||||
abater
|
||||
abates
|
||||
abating
|
||||
Abba
|
||||
abbe
|
||||
abbey
|
||||
abbeys
|
||||
abbot
|
||||
abbots
|
||||
Abbott
|
||||
abbreviate
|
||||
abbreviated
|
||||
abbreviates
|
||||
abbreviating
|
||||
abbreviation
|
||||
abbreviations
|
||||
Abby
|
||||
abdomen
|
||||
abdomens
|
||||
abdominal
|
||||
abduct
|
||||
abducted
|
||||
abduction
|
||||
abductions
|
||||
abductor
|
||||
abductors
|
||||
abducts
|
||||
Abe
|
||||
abed
|
||||
Abel
|
||||
Abelian
|
||||
Abelson
|
||||
Aberdeen
|
||||
Abernathy
|
||||
aberrant
|
||||
aberration
|
||||
|
||||
SELECT * FROM test.t1 ORDER BY blob_column;
|
||||
a blob_column
|
||||
1 abase
|
||||
abased
|
||||
abasement
|
||||
abasements
|
||||
abases
|
||||
abash
|
||||
abashed
|
||||
abashes
|
||||
abashing
|
||||
abasing
|
||||
abate
|
||||
abated
|
||||
abatement
|
||||
abatements
|
||||
abater
|
||||
abates
|
||||
abating
|
||||
Abba
|
||||
abbe
|
||||
abbey
|
||||
abbeys
|
||||
abbot
|
||||
abbots
|
||||
Abbott
|
||||
abbreviate
|
||||
abbreviated
|
||||
abbreviates
|
||||
abbreviating
|
||||
abbreviation
|
||||
abbreviations
|
||||
Abby
|
||||
abdomen
|
||||
abdomens
|
||||
abdominal
|
||||
abduct
|
||||
abducted
|
||||
abduction
|
||||
abductions
|
||||
abductor
|
||||
abductors
|
||||
abducts
|
||||
Abe
|
||||
abed
|
||||
Abel
|
||||
Abelian
|
||||
Abelson
|
||||
Aberdeen
|
||||
Abernathy
|
||||
aberrant
|
||||
aberration
|
||||
|
||||
2 abase
|
||||
abased
|
||||
abasement
|
||||
abasements
|
||||
abases
|
||||
abash
|
||||
abashed
|
||||
abashes
|
||||
abashing
|
||||
abasing
|
||||
abate
|
||||
abated
|
||||
abatement
|
||||
abatements
|
||||
abater
|
||||
abates
|
||||
abating
|
||||
Abba
|
||||
abbe
|
||||
abbey
|
||||
abbeys
|
||||
abbot
|
||||
abbots
|
||||
Abbott
|
||||
abbreviate
|
||||
abbreviated
|
||||
abbreviates
|
||||
abbreviating
|
||||
abbreviation
|
||||
abbreviations
|
||||
Abby
|
||||
abdomen
|
||||
abdomens
|
||||
abdominal
|
||||
abduct
|
||||
abducted
|
||||
abduction
|
||||
abductions
|
||||
abductor
|
||||
abductors
|
||||
abducts
|
||||
Abe
|
||||
abed
|
||||
Abel
|
||||
Abelian
|
||||
Abelson
|
||||
Aberdeen
|
||||
Abernathy
|
||||
aberrant
|
||||
aberration
|
||||
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP TABLE test.t1;
|
||||
include/rpl_reset.inc
|
||||
SELECT repeat('x',20) INTO OUTFILE 'MYSQLTEST_VARDIR/tmp/bug_39701.data';
|
||||
DROP TABLE IF EXISTS t1;
|
||||
CREATE TABLE t1 (t text);
|
||||
CREATE PROCEDURE p(file varchar(4096))
|
||||
BEGIN
|
||||
INSERT INTO t1 VALUES (LOAD_FILE(file));
|
||||
END|
|
||||
include/stop_slave.inc
|
||||
CALL p('MYSQLTEST_VARDIR/tmp/bug_39701.data');
|
||||
include/start_slave.inc
|
||||
include/diff_tables.inc [master:t1, slave:t1]
|
||||
DROP TABLE t1;
|
||||
DROP PROCEDURE p;
|
||||
include/rpl_end.inc
|
||||
#
|
||||
# Check that the loaded data is encrypted in the master binlog
|
||||
#
|
||||
NOT FOUND /xxxxxxxxxxx/ in master-bin.0*
|
||||
11
mysql-test/suite/binlog_encryption/rpl_loadfile.test
Normal file
11
mysql-test/suite/binlog_encryption/rpl_loadfile.test
Normal file
@@ -0,0 +1,11 @@
|
||||
--source extra/rpl_tests/rpl_loadfile.inc
|
||||
|
||||
--let $datadir= `SELECT @@datadir`
|
||||
|
||||
--echo #
|
||||
--echo # Check that the loaded data is encrypted in the master binlog
|
||||
--echo #
|
||||
|
||||
--let SEARCH_FILE=$datadir/master-bin.0*
|
||||
--let SEARCH_PATTERN= xxxxxxxxxxx
|
||||
--source include/search_pattern_in_file.inc
|
||||
@@ -0,0 +1,186 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
||||
SET GLOBAL max_binlog_cache_size = 4096;
|
||||
SET GLOBAL binlog_cache_size = 4096;
|
||||
SET GLOBAL max_binlog_stmt_cache_size = 4096;
|
||||
SET GLOBAL binlog_stmt_cache_size = 4096;
|
||||
CREATE TABLE t1(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
|
||||
CREATE TABLE t2(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=MyIsam;
|
||||
CREATE TABLE t3(a INT PRIMARY KEY, data VARCHAR(30000)) ENGINE=Innodb;
|
||||
########################################################################################
|
||||
# 1 - SINGLE STATEMENT
|
||||
########################################################################################
|
||||
*** Single statement on transactional table ***
|
||||
Got one of the listed errors
|
||||
*** Single statement on non-transactional table ***
|
||||
Got one of the listed errors
|
||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1590]
|
||||
*** Single statement on both transactional and non-transactional tables. ***
|
||||
Got one of the listed errors
|
||||
include/wait_for_slave_sql_error_and_skip.inc [errno=1590]
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################################
|
||||
# 2 - BEGIN - IMPLICIT COMMIT by DDL
|
||||
########################################################################################
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
set default_storage_engine=innodb;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
INSERT INTO t1 (a, data) VALUES (7, 's');;
|
||||
INSERT INTO t2 (a, data) VALUES (8, 's');;
|
||||
INSERT INTO t1 (a, data) VALUES (9, 's');;
|
||||
ALTER TABLE t3 ADD COLUMN d int;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
INSERT INTO t1 (a, data) VALUES (19, 's');;
|
||||
INSERT INTO t2 (a, data) VALUES (20, 's');;
|
||||
INSERT INTO t1 (a, data) VALUES (21, 's');;
|
||||
CREATE TABLE t4 SELECT * FROM t1;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
INSERT INTO t1 (a, data) VALUES (27, 's');;
|
||||
INSERT INTO t2 (a, data) VALUES (28, 's');;
|
||||
INSERT INTO t1 (a, data) VALUES (29, 's');;
|
||||
CREATE TABLE t5 (a int);
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################################
|
||||
# 3 - BEGIN - COMMIT
|
||||
########################################################################################
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
COMMIT;
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################################
|
||||
# 4 - BEGIN - ROLLBACK
|
||||
########################################################################################
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################################
|
||||
# 5 - PROCEDURE
|
||||
########################################################################################
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
CREATE PROCEDURE p1(pd VARCHAR(30000))
|
||||
BEGIN
|
||||
INSERT INTO t1 (a, data) VALUES (1, pd);
|
||||
INSERT INTO t1 (a, data) VALUES (2, pd);
|
||||
INSERT INTO t1 (a, data) VALUES (3, pd);
|
||||
INSERT INTO t1 (a, data) VALUES (4, pd);
|
||||
INSERT INTO t1 (a, data) VALUES (5, 's');
|
||||
END//
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t1;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
COMMIT;
|
||||
TRUNCATE TABLE t1;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
ROLLBACK;
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################################
|
||||
# 6 - XID
|
||||
########################################################################################
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
INSERT INTO t1 (a, data) VALUES (7, 's');;
|
||||
INSERT INTO t2 (a, data) VALUES (8, 's');;
|
||||
INSERT INTO t1 (a, data) VALUES (9, 's');;
|
||||
ROLLBACK TO sv;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
COMMIT;
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################################
|
||||
# 7 - NON-TRANS TABLE
|
||||
########################################################################################
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
TRUNCATE TABLE t3;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
Got one of the listed errors
|
||||
INSERT INTO t1 (a, data) VALUES (8, 's');;
|
||||
INSERT INTO t1 (a, data) VALUES (9, 's');;
|
||||
INSERT INTO t2 (a, data) VALUES (10, 's');;
|
||||
INSERT INTO t1 (a, data) VALUES (11, 's');;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
Got one of the listed errors
|
||||
COMMIT;
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
########################################################################
|
||||
# 8 - Bug#55375(Regression Bug) Transaction bigger than
|
||||
# max_binlog_cache_size crashes slave
|
||||
########################################################################
|
||||
# [ On Slave ]
|
||||
SET GLOBAL max_binlog_cache_size = 4096;
|
||||
SET GLOBAL binlog_cache_size = 4096;
|
||||
SET GLOBAL max_binlog_stmt_cache_size = 4096;
|
||||
SET GLOBAL binlog_stmt_cache_size = 4096;
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage.*");
|
||||
CALL mtr.add_suppression("Multi-statement transaction required more than 'max_binlog_stmt_cache_size' bytes of storage.*");
|
||||
CALL mtr.add_suppression("Writing one row to the row-based binary log failed.*");
|
||||
CALL mtr.add_suppression("Slave SQL.*The incident LOST_EVENTS occurred on the master. Message: error writing to the binary log");
|
||||
TRUNCATE t1;
|
||||
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
|
||||
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
|
||||
SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
|
||||
SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
|
||||
BEGIN;
|
||||
Repeat statement 'INSERT INTO t1 VALUES($n, repeat("a", 32))' 128 times
|
||||
COMMIT;
|
||||
include/wait_for_slave_sql_error.inc [errno=1197]
|
||||
SELECT count(*) FROM t1;
|
||||
count(*)
|
||||
0
|
||||
include/show_binlog_events.inc
|
||||
SET GLOBAL max_binlog_cache_size= ORIGINAL_VALUE;
|
||||
SET GLOBAL binlog_cache_size= ORIGINAL_VALUE;
|
||||
SET GLOBAL max_binlog_stmt_cache_size= ORIGINAL_VALUE;
|
||||
SET GLOBAL binlog_stmt_cache_size= ORIGINAL_VALUE;
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
SELECT count(*) FROM t1;
|
||||
count(*)
|
||||
128
|
||||
########################################################################################
|
||||
# CLEAN
|
||||
########################################################################################
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE IF EXISTS t4;
|
||||
DROP TABLE t5;
|
||||
DROP PROCEDURE p1;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1,7 @@
|
||||
--source include/master-slave.inc
|
||||
--source include/not_embedded.inc
|
||||
--source include/not_windows.inc
|
||||
--source include/have_binlog_format_mixed.inc
|
||||
|
||||
--source extra/rpl_tests/rpl_binlog_max_cache_size.test
|
||||
--source include/rpl_end.inc
|
||||
10
mysql-test/suite/binlog_encryption/rpl_packet.cnf
Normal file
10
mysql-test/suite/binlog_encryption/rpl_packet.cnf
Normal file
@@ -0,0 +1,10 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.1]
|
||||
max_allowed_packet=1024
|
||||
net_buffer_length=1024
|
||||
|
||||
[mysqld.2]
|
||||
max_allowed_packet=1024
|
||||
net_buffer_length=1024
|
||||
slave_max_allowed_packet=1024
|
||||
58
mysql-test/suite/binlog_encryption/rpl_packet.result
Normal file
58
mysql-test/suite/binlog_encryption/rpl_packet.result
Normal file
@@ -0,0 +1,58 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression("Slave I/O: Got a packet bigger than 'slave_max_allowed_packet' bytes, .*error.* 1153");
|
||||
call mtr.add_suppression("Log entry on master is longer than slave_max_allowed_packet");
|
||||
drop database if exists DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
create database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
SET @@global.max_allowed_packet=1024;
|
||||
SET @@global.net_buffer_length=1024;
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
select @@net_buffer_length, @@max_allowed_packet;
|
||||
@@net_buffer_length @@max_allowed_packet
|
||||
1024 1024
|
||||
create table `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa1023');
|
||||
select count(*) from `DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________`.`t1` /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
SHOW STATUS LIKE 'Slave_running';
|
||||
Variable_name Value
|
||||
Slave_running ON
|
||||
select * from information_schema.session_status where variable_name= 'SLAVE_RUNNING';
|
||||
VARIABLE_NAME VARIABLE_VALUE
|
||||
SLAVE_RUNNING ON
|
||||
drop database DB_NAME_OF_MAX_LENGTH_AKA_NAME_LEN_64_BYTES_____________________;
|
||||
SET @@global.max_allowed_packet=4096;
|
||||
SET @@global.net_buffer_length=4096;
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
CREATE TABLE `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||
include/wait_for_slave_io_error.inc [errno=1153]
|
||||
Last_IO_Error = 'Got a packet bigger than 'slave_max_allowed_packet' bytes'
|
||||
include/stop_slave_sql.inc
|
||||
include/rpl_reset.inc
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
|
||||
INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
|
||||
include/wait_for_slave_io_error.inc [errno=1153]
|
||||
Last_IO_Error = 'Got a packet bigger than 'slave_max_allowed_packet' bytes'
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
SET @max_allowed_packet_0= @@session.max_allowed_packet;
|
||||
SHOW BINLOG EVENTS;
|
||||
SET @max_allowed_packet_1= @@session.max_allowed_packet;
|
||||
SHOW BINLOG EVENTS;
|
||||
SET @max_allowed_packet_2= @@session.max_allowed_packet;
|
||||
==== clean up ====
|
||||
DROP TABLE t1;
|
||||
SET @@global.max_allowed_packet= 1024;
|
||||
Warnings:
|
||||
Warning 1708 The value of 'max_allowed_packet' should be no less than the value of 'net_buffer_length'
|
||||
SET @@global.net_buffer_length= 1024;
|
||||
SET @@global.slave_max_allowed_packet= 1073741824;
|
||||
DROP TABLE t1;
|
||||
RESET SLAVE;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_packet.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_packet.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_packet.inc
|
||||
1774
mysql-test/suite/binlog_encryption/rpl_parallel.result
Normal file
1774
mysql-test/suite/binlog_encryption/rpl_parallel.result
Normal file
File diff suppressed because it is too large
Load Diff
1
mysql-test/suite/binlog_encryption/rpl_parallel.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_parallel.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_parallel.inc
|
||||
@@ -0,0 +1,6 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.2]
|
||||
plugin-load-add= @ENV.FILE_KEY_MANAGEMENT_SO
|
||||
loose-file-key-management-filename=@ENV.MYSQLTEST_VARDIR/std_data/keys.txt
|
||||
encrypt-binlog
|
||||
@@ -0,0 +1,12 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
[connection slave]
|
||||
SET DEBUG_SYNC= 'after_show_binlog_events SIGNAL on_show_binlog_events WAIT_FOR end';
|
||||
SHOW BINLOG EVENTS;
|
||||
[connection slave1]
|
||||
SET DEBUG_SYNC= 'now WAIT_FOR on_show_binlog_events';
|
||||
FLUSH LOGS;
|
||||
SET DEBUG_SYNC= 'now SIGNAL end';
|
||||
[connection slave]
|
||||
SET DEBUG_SYNC= 'RESET';
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_parallel_show_binlog_events_purge_logs.inc
|
||||
@@ -0,0 +1,5 @@
|
||||
--max_relay_log_size=16384
|
||||
--log-warnings
|
||||
--plugin-load-add=$FILE_KEY_MANAGEMENT_SO
|
||||
--loose-file-key-management-filename=$MYSQLTEST_VARDIR/std_data/keys.txt
|
||||
--encrypt-binlog
|
||||
13
mysql-test/suite/binlog_encryption/rpl_relayrotate.result
Normal file
13
mysql-test/suite/binlog_encryption/rpl_relayrotate.result
Normal file
@@ -0,0 +1,13 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
stop slave;
|
||||
create table t1 (a int) engine=innodb;
|
||||
reset slave;
|
||||
start slave;
|
||||
stop slave;
|
||||
start slave;
|
||||
select max(a) from t1;
|
||||
max(a)
|
||||
8000
|
||||
drop table t1;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_relayrotate.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_relayrotate.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_relayrotate.inc
|
||||
465
mysql-test/suite/binlog_encryption/rpl_semi_sync.result
Normal file
465
mysql-test/suite/binlog_encryption/rpl_semi_sync.result
Normal file
@@ -0,0 +1,465 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression("Timeout waiting for reply of binlog");
|
||||
call mtr.add_suppression("Read semi-sync reply");
|
||||
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT.");
|
||||
call mtr.add_suppression("Master server does not support semi-sync");
|
||||
call mtr.add_suppression("Semi-sync slave .* reply");
|
||||
call mtr.add_suppression("Slave SQL.*Request to stop slave SQL Thread received while applying a group that has non-transactional changes; waiting for completion of the group");
|
||||
#
|
||||
# Uninstall semi-sync plugins on master and slave
|
||||
#
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
set global rpl_semi_sync_master_enabled= 0;
|
||||
set global rpl_semi_sync_slave_enabled= 0;
|
||||
reset master;
|
||||
set global rpl_semi_sync_master_enabled= 0;
|
||||
set global rpl_semi_sync_slave_enabled= 0;
|
||||
#
|
||||
# Main test of semi-sync replication start here
|
||||
#
|
||||
[ on master ]
|
||||
set global rpl_semi_sync_master_timeout= 60000;
|
||||
[ default state of semi-sync on master should be OFF ]
|
||||
show variables like 'rpl_semi_sync_master_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_master_enabled OFF
|
||||
[ enable semi-sync on master ]
|
||||
set global rpl_semi_sync_master_enabled = 1;
|
||||
show variables like 'rpl_semi_sync_master_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_master_enabled ON
|
||||
[ status of semi-sync on master should be ON even without any semi-sync slaves ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 0
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 0
|
||||
#
|
||||
# BUG#45672 Semisync repl: ActiveTranx:insert_tranx_node: transaction node allocation failed
|
||||
# BUG#45673 Semisynch reports correct operation even if no slave is connected
|
||||
#
|
||||
[ status of semi-sync on master should be OFF ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 0
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status OFF
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 0
|
||||
reset master;
|
||||
[ on slave ]
|
||||
[ default state of semi-sync on slave should be OFF ]
|
||||
show variables like 'rpl_semi_sync_slave_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_slave_enabled OFF
|
||||
[ enable semi-sync on slave ]
|
||||
set global rpl_semi_sync_slave_enabled = 1;
|
||||
show variables like 'rpl_semi_sync_slave_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_slave_enabled ON
|
||||
include/start_slave.inc
|
||||
[ on master ]
|
||||
[ initial master state after the semi-sync slave connected ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 0
|
||||
create table t1(a int) engine = ENGINE_TYPE;
|
||||
[ master state after CREATE TABLE statement ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 1
|
||||
select CONNECTIONS_NORMAL_SLAVE - CONNECTIONS_NORMAL_SLAVE as 'Should be 0';
|
||||
Should be 0
|
||||
0
|
||||
[ insert records to table ]
|
||||
insert t1 values (10);
|
||||
insert t1 values (9);
|
||||
insert t1 values (8);
|
||||
insert t1 values (7);
|
||||
insert t1 values (6);
|
||||
insert t1 values (5);
|
||||
insert t1 values (4);
|
||||
insert t1 values (3);
|
||||
insert t1 values (2);
|
||||
insert t1 values (1);
|
||||
[ master status after inserts ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 11
|
||||
[ on slave ]
|
||||
[ slave status after replicated inserts ]
|
||||
show status like 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status ON
|
||||
select count(distinct a) from t1;
|
||||
count(distinct a)
|
||||
10
|
||||
select min(a) from t1;
|
||||
min(a)
|
||||
1
|
||||
select max(a) from t1;
|
||||
max(a)
|
||||
10
|
||||
|
||||
# BUG#50157
|
||||
# semi-sync replication crashes when replicating a transaction which
|
||||
# include 'CREATE TEMPORARY TABLE `MyISAM_t` SELECT * FROM `Innodb_t` ;
|
||||
[ on master ]
|
||||
SET SESSION AUTOCOMMIT= 0;
|
||||
CREATE TABLE t2(c1 INT) ENGINE=innodb;
|
||||
BEGIN;
|
||||
|
||||
# Even though it is in a transaction, this statement is binlogged into binlog
|
||||
# file immediately.
|
||||
CREATE TEMPORARY TABLE t3 SELECT c1 FROM t2 where 1=1;
|
||||
|
||||
# These statements will not be binlogged until the transaction is committed
|
||||
INSERT INTO t2 VALUES(11);
|
||||
INSERT INTO t2 VALUES(22);
|
||||
COMMIT;
|
||||
DROP TABLE t2, t3;
|
||||
SET SESSION AUTOCOMMIT= 1;
|
||||
#
|
||||
# Test semi-sync master will switch OFF after one transaction
|
||||
# timeout waiting for slave reply.
|
||||
#
|
||||
include/stop_slave.inc
|
||||
[ on master ]
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
[ master status should be ON ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
[ semi-sync replication of these transactions will fail ]
|
||||
insert into t1 values (500);
|
||||
[ master status should be OFF ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status OFF
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 1
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
delete from t1 where a=10;
|
||||
delete from t1 where a=9;
|
||||
delete from t1 where a=8;
|
||||
delete from t1 where a=7;
|
||||
delete from t1 where a=6;
|
||||
delete from t1 where a=5;
|
||||
delete from t1 where a=4;
|
||||
delete from t1 where a=3;
|
||||
delete from t1 where a=2;
|
||||
delete from t1 where a=1;
|
||||
insert into t1 values (100);
|
||||
[ master status should be OFF ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status OFF
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
#
|
||||
# Test semi-sync status on master will be ON again when slave catches up
|
||||
#
|
||||
[ on slave ]
|
||||
[ slave status should be OFF ]
|
||||
show status like 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
include/start_slave.inc
|
||||
[ slave status should be ON ]
|
||||
show status like 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status ON
|
||||
select count(distinct a) from t1;
|
||||
count(distinct a)
|
||||
2
|
||||
select min(a) from t1;
|
||||
min(a)
|
||||
100
|
||||
select max(a) from t1;
|
||||
max(a)
|
||||
500
|
||||
[ on master ]
|
||||
[ master status should be ON again after slave catches up ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 14
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
#
|
||||
# Test disable/enable master semi-sync on the fly.
|
||||
#
|
||||
drop table t1;
|
||||
[ on slave ]
|
||||
include/stop_slave.inc
|
||||
#
|
||||
# Flush status
|
||||
#
|
||||
[ Semi-sync master status variables before FLUSH STATUS ]
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 12
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 15
|
||||
FLUSH NO_WRITE_TO_BINLOG STATUS;
|
||||
[ Semi-sync master status variables after FLUSH STATUS ]
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 0
|
||||
[ on master ]
|
||||
show master logs;
|
||||
Log_name master-bin.000001
|
||||
File_size #
|
||||
show variables like 'rpl_semi_sync_master_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_master_enabled ON
|
||||
[ disable semi-sync on the fly ]
|
||||
set global rpl_semi_sync_master_enabled=0;
|
||||
show variables like 'rpl_semi_sync_master_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_master_enabled OFF
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status OFF
|
||||
[ enable semi-sync on the fly ]
|
||||
set global rpl_semi_sync_master_enabled=1;
|
||||
show variables like 'rpl_semi_sync_master_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_master_enabled ON
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
#
|
||||
# Test RESET MASTER/SLAVE
|
||||
#
|
||||
[ on slave ]
|
||||
include/start_slave.inc
|
||||
[ on master ]
|
||||
create table t1 (a int) engine = ENGINE_TYPE;
|
||||
drop table t1;
|
||||
show status like 'Rpl_relay%';
|
||||
Variable_name Value
|
||||
[ test reset master ]
|
||||
[ on master]
|
||||
reset master;
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 0
|
||||
[ on slave ]
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
kill query _tid;
|
||||
include/start_slave.inc
|
||||
[ on master ]
|
||||
create table t1 (a int) engine = ENGINE_TYPE;
|
||||
insert into t1 values (1);
|
||||
insert into t1 values (2), (3);
|
||||
[ on slave ]
|
||||
select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
[ on master ]
|
||||
[ master semi-sync status should be ON ]
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 3
|
||||
#
|
||||
# Start semi-sync replication without SUPER privilege
|
||||
#
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
[ on master ]
|
||||
reset master;
|
||||
kill query _tid;
|
||||
set sql_log_bin=0;
|
||||
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
|
||||
flush privileges;
|
||||
set sql_log_bin=1;
|
||||
[ on slave ]
|
||||
grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl_password';
|
||||
flush privileges;
|
||||
change master to master_user='rpl',master_password='rpl_password';
|
||||
include/start_slave.inc
|
||||
show status like 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status ON
|
||||
[ on master ]
|
||||
[ master semi-sync should be ON ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 0
|
||||
insert into t1 values (4);
|
||||
insert into t1 values (5);
|
||||
[ master semi-sync should be ON ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
show status like 'Rpl_semi_sync_master_no_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_no_tx 0
|
||||
show status like 'Rpl_semi_sync_master_yes_tx';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_yes_tx 2
|
||||
#
|
||||
# Test semi-sync slave connect to non-semi-sync master
|
||||
#
|
||||
[ on slave ]
|
||||
include/stop_slave.inc
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
[ on master ]
|
||||
kill query _tid;
|
||||
[ Semi-sync status on master should be ON ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 0
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status ON
|
||||
set global rpl_semi_sync_master_enabled= 0;
|
||||
[ on slave ]
|
||||
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_slave_enabled ON
|
||||
include/start_slave.inc
|
||||
[ on master ]
|
||||
insert into t1 values (8);
|
||||
[ master semi-sync clients should be 1, status should be OFF ]
|
||||
show status like 'Rpl_semi_sync_master_clients';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_clients 1
|
||||
show status like 'Rpl_semi_sync_master_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_master_status OFF
|
||||
[ on slave ]
|
||||
show status like 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status ON
|
||||
include/stop_slave.inc
|
||||
[ on master ]
|
||||
set global rpl_semi_sync_master_enabled= 0;
|
||||
[ on slave ]
|
||||
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_slave_enabled ON
|
||||
include/start_slave.inc
|
||||
[ on master ]
|
||||
insert into t1 values (10);
|
||||
#
|
||||
# Test non-semi-sync slave connect to semi-sync master
|
||||
#
|
||||
set global rpl_semi_sync_master_timeout= 5000;
|
||||
set global rpl_semi_sync_master_enabled= 1;
|
||||
[ on slave ]
|
||||
include/stop_slave.inc
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
[ uninstall semi-sync slave plugin ]
|
||||
set global rpl_semi_sync_slave_enabled= 0;
|
||||
[ reinstall semi-sync slave plugin and disable semi-sync ]
|
||||
SHOW VARIABLES LIKE 'rpl_semi_sync_slave_enabled';
|
||||
Variable_name Value
|
||||
rpl_semi_sync_slave_enabled OFF
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
include/start_slave.inc
|
||||
SHOW STATUS LIKE 'Rpl_semi_sync_slave_status';
|
||||
Variable_name Value
|
||||
Rpl_semi_sync_slave_status OFF
|
||||
#
|
||||
# Clean up
|
||||
#
|
||||
include/stop_slave.inc
|
||||
set global rpl_semi_sync_slave_enabled= 0;
|
||||
set global rpl_semi_sync_master_enabled= 0;
|
||||
change master to master_user='root',master_password='';
|
||||
include/start_slave.inc
|
||||
drop table t1;
|
||||
drop user rpl@127.0.0.1;
|
||||
flush privileges;
|
||||
set global rpl_semi_sync_master_timeout= default;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_semi_sync.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_semi_sync.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_semi_sync.inc
|
||||
@@ -0,0 +1,6 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.2]
|
||||
plugin-load-add= @ENV.FILE_KEY_MANAGEMENT_SO
|
||||
loose-file-key-management-filename=@ENV.MYSQLTEST_VARDIR/std_data/keys.txt
|
||||
encrypt-binlog
|
||||
252
mysql-test/suite/binlog_encryption/rpl_skip_replication.result
Normal file
252
mysql-test/suite/binlog_encryption/rpl_skip_replication.result
Normal file
@@ -0,0 +1,252 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
CREATE USER 'nonsuperuser'@'127.0.0.1';
|
||||
GRANT ALTER,CREATE,DELETE,DROP,EVENT,INSERT,PROCESS,REPLICATION SLAVE,
|
||||
SELECT,UPDATE ON *.* TO 'nonsuperuser'@'127.0.0.1';
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_MASTER;
|
||||
ERROR 42000: Access denied; you need (at least one of) the SUPER privilege(s) for this operation
|
||||
DROP USER'nonsuperuser'@'127.0.0.1';
|
||||
SELECT @@global.replicate_events_marked_for_skip;
|
||||
@@global.replicate_events_marked_for_skip
|
||||
REPLICATE
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_SLAVE;
|
||||
ERROR HY000: This operation cannot be performed as you have a running slave ''; run STOP SLAVE '' first
|
||||
SELECT @@global.replicate_events_marked_for_skip;
|
||||
@@global.replicate_events_marked_for_skip
|
||||
REPLICATE
|
||||
STOP SLAVE;
|
||||
SET SESSION replicate_events_marked_for_skip=FILTER_ON_MASTER;
|
||||
ERROR HY000: Variable 'replicate_events_marked_for_skip' is a GLOBAL variable and should be set with SET GLOBAL
|
||||
SELECT @@global.replicate_events_marked_for_skip;
|
||||
@@global.replicate_events_marked_for_skip
|
||||
REPLICATE
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_MASTER;
|
||||
SELECT @@global.replicate_events_marked_for_skip;
|
||||
@@global.replicate_events_marked_for_skip
|
||||
FILTER_ON_MASTER
|
||||
START SLAVE;
|
||||
SELECT @@skip_replication;
|
||||
@@skip_replication
|
||||
0
|
||||
SET GLOBAL skip_replication=1;
|
||||
ERROR HY000: Variable 'skip_replication' is a SESSION variable and can't be used with SET GLOBAL
|
||||
SELECT @@skip_replication;
|
||||
@@skip_replication
|
||||
0
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
||||
CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=innodb;
|
||||
INSERT INTO t1(a) VALUES (1);
|
||||
INSERT INTO t2(a) VALUES (1);
|
||||
SET skip_replication=1;
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
||||
INSERT INTO t1(a) VALUES (2);
|
||||
INSERT INTO t2(a) VALUES (2);
|
||||
FLUSH NO_WRITE_TO_BINLOG LOGS;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
t1
|
||||
t2
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 NULL
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 NULL
|
||||
DROP TABLE t3;
|
||||
FLUSH NO_WRITE_TO_BINLOG LOGS;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_SLAVE;
|
||||
START SLAVE;
|
||||
SET skip_replication=1;
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
||||
INSERT INTO t1(a) VALUES (3);
|
||||
INSERT INTO t2(a) VALUES (3);
|
||||
FLUSH NO_WRITE_TO_BINLOG LOGS;
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
t1
|
||||
t2
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
1 NULL
|
||||
SELECT * FROM t2;
|
||||
a b
|
||||
1 NULL
|
||||
DROP TABLE t3;
|
||||
FLUSH NO_WRITE_TO_BINLOG LOGS;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL replicate_events_marked_for_skip=REPLICATE;
|
||||
START SLAVE;
|
||||
SET skip_replication=1;
|
||||
CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=myisam;
|
||||
INSERT INTO t3(a) VALUES(2);
|
||||
SELECT * FROM t3;
|
||||
a b
|
||||
2 NULL
|
||||
DROP TABLE t3;
|
||||
TRUNCATE t1;
|
||||
RESET MASTER;
|
||||
SET skip_replication=0;
|
||||
INSERT INTO t1 VALUES (1,0);
|
||||
SET skip_replication=1;
|
||||
INSERT INTO t1 VALUES (2,0);
|
||||
SET skip_replication=0;
|
||||
INSERT INTO t1 VALUES (3,0);
|
||||
SELECT * FROM t1 ORDER by a;
|
||||
a b
|
||||
1 0
|
||||
2 0
|
||||
3 0
|
||||
STOP SLAVE;
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_MASTER;
|
||||
TRUNCATE t1;
|
||||
SELECT * FROM t1 ORDER by a;
|
||||
a b
|
||||
1 0
|
||||
2 0
|
||||
3 0
|
||||
START SLAVE;
|
||||
SELECT * FROM t1 ORDER by a;
|
||||
a b
|
||||
1 0
|
||||
3 0
|
||||
TRUNCATE t1;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL sql_slave_skip_counter=6;
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_SLAVE;
|
||||
START SLAVE;
|
||||
SET @old_binlog_format= @@binlog_format;
|
||||
SET binlog_format= statement;
|
||||
SET skip_replication=0;
|
||||
INSERT INTO t1 VALUES (1,5);
|
||||
SET skip_replication=1;
|
||||
INSERT INTO t1 VALUES (2,5);
|
||||
SET skip_replication=0;
|
||||
INSERT INTO t1 VALUES (3,5);
|
||||
INSERT INTO t1 VALUES (4,5);
|
||||
SET binlog_format= @old_binlog_format;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
4 5
|
||||
include/stop_slave.inc
|
||||
SET @old_slave_binlog_format= @@global.binlog_format;
|
||||
SET GLOBAL binlog_format= row;
|
||||
include/start_slave.inc
|
||||
TRUNCATE t1;
|
||||
SET @old_binlog_format= @@binlog_format;
|
||||
SET binlog_format= row;
|
||||
BINLOG 'wlZOTw8BAAAA8QAAAPUAAAAAAAQANS41LjIxLU1hcmlhREItZGVidWctbG9nAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAEzgNAAgAEgAEBAQEEgAA2QAEGggAAAAICAgCAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
|
||||
AAAAAAAAAAAA371saA==';
|
||||
BINLOG 'wlZOTxMBAAAAKgAAAGMBAAAAgCkAAAAAAAEABHRlc3QAAnQxAAIDAwAC
|
||||
wlZOTxcBAAAAJgAAAIkBAAAAgCkAAAAAAAEAAv/8AQAAAAgAAAA=';
|
||||
BINLOG 'wlZOTxMBAAAAKgAAADwCAAAAACkAAAAAAAEABHRlc3QAAnQxAAIDAwAC
|
||||
wlZOTxcBAAAAJgAAAGICAAAAACkAAAAAAAEAAv/8AgAAAAgAAAA=';
|
||||
SET binlog_format= @old_binlog_format;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 8
|
||||
2 8
|
||||
SELECT * FROM t1 ORDER by a;
|
||||
a b
|
||||
2 8
|
||||
include/stop_slave.inc
|
||||
SET GLOBAL binlog_format= @old_slave_binlog_format;
|
||||
include/start_slave.inc
|
||||
SET skip_replication=0;
|
||||
BEGIN;
|
||||
SET skip_replication=0;
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a transaction
|
||||
SET skip_replication=1;
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a transaction
|
||||
ROLLBACK;
|
||||
SET skip_replication=1;
|
||||
BEGIN;
|
||||
SET skip_replication=0;
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a transaction
|
||||
SET skip_replication=1;
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a transaction
|
||||
COMMIT;
|
||||
SET autocommit=0;
|
||||
INSERT INTO t2(a) VALUES(100);
|
||||
SET skip_replication=1;
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a transaction
|
||||
ROLLBACK;
|
||||
SET autocommit=1;
|
||||
SET skip_replication=1;
|
||||
CREATE FUNCTION foo (x INT) RETURNS INT BEGIN SET SESSION skip_replication=x; RETURN x; END|
|
||||
CREATE PROCEDURE bar(x INT) BEGIN SET SESSION skip_replication=x; END|
|
||||
CREATE FUNCTION baz (x INT) RETURNS INT BEGIN CALL bar(x); RETURN x; END|
|
||||
SELECT foo(0);
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
SELECT baz(0);
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
SET @a= foo(1);
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
SET @a= baz(1);
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
UPDATE t2 SET b=foo(0);
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
UPDATE t2 SET b=baz(0);
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
INSERT INTO t1 VALUES (101, foo(1));
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
INSERT INTO t1 VALUES (101, baz(0));
|
||||
ERROR HY000: Cannot modify @@session.skip_replication inside a stored function or trigger
|
||||
SELECT @@skip_replication;
|
||||
@@skip_replication
|
||||
1
|
||||
CALL bar(0);
|
||||
SELECT @@skip_replication;
|
||||
@@skip_replication
|
||||
0
|
||||
CALL bar(1);
|
||||
SELECT @@skip_replication;
|
||||
@@skip_replication
|
||||
1
|
||||
DROP FUNCTION foo;
|
||||
DROP PROCEDURE bar;
|
||||
DROP FUNCTION baz;
|
||||
SET skip_replication= 0;
|
||||
TRUNCATE t1;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_MASTER;
|
||||
START SLAVE IO_THREAD;
|
||||
SET skip_replication= 1;
|
||||
INSERT INTO t1(a) VALUES (1);
|
||||
SET skip_replication= 0;
|
||||
INSERT INTO t1(a) VALUES (2);
|
||||
include/save_master_pos.inc
|
||||
include/sync_io_with_master.inc
|
||||
STOP SLAVE IO_THREAD;
|
||||
SET GLOBAL replicate_events_marked_for_skip=REPLICATE;
|
||||
START SLAVE;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
2 NULL
|
||||
SET skip_replication= 0;
|
||||
TRUNCATE t1;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL replicate_events_marked_for_skip=FILTER_ON_SLAVE;
|
||||
START SLAVE IO_THREAD;
|
||||
SET skip_replication= 1;
|
||||
INSERT INTO t1(a) VALUES (1);
|
||||
SET skip_replication= 0;
|
||||
INSERT INTO t1(a) VALUES (2);
|
||||
include/save_master_pos.inc
|
||||
include/sync_io_with_master.inc
|
||||
STOP SLAVE IO_THREAD;
|
||||
SET GLOBAL replicate_events_marked_for_skip=REPLICATE;
|
||||
START SLAVE;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 NULL
|
||||
2 NULL
|
||||
SET skip_replication=0;
|
||||
DROP TABLE t1,t2;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL replicate_events_marked_for_skip=REPLICATE;
|
||||
START SLAVE;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1,2 @@
|
||||
--let $use_remote_mysqlbinlog= 1
|
||||
--source extra/rpl_tests/rpl_skip_replication.inc
|
||||
@@ -0,0 +1 @@
|
||||
--character-set-server=utf16
|
||||
@@ -0,0 +1,8 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression("Cannot use utf16 as character_set_client");
|
||||
CREATE TABLE t1(i VARCHAR(20));
|
||||
INSERT INTO t1 VALUES (0xFFFF);
|
||||
include/diff_tables.inc [master:t1, slave:t1]
|
||||
DROP TABLE t1;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_special_charset.inc
|
||||
@@ -0,0 +1 @@
|
||||
--debug-sporadic-binlog-dump-fail --debug-max-binlog-dump-events=2
|
||||
@@ -0,0 +1,23 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
create table t2(n int);
|
||||
create table t1(n int not null auto_increment primary key);
|
||||
insert into t1 values (NULL),(NULL);
|
||||
truncate table t1;
|
||||
insert into t1 values (4),(NULL);
|
||||
include/stop_slave.inc
|
||||
include/start_slave.inc
|
||||
insert into t1 values (NULL),(NULL);
|
||||
flush logs;
|
||||
truncate table t1;
|
||||
insert into t1 values (10),(NULL),(NULL),(NULL),(NULL),(NULL);
|
||||
select * from t1 ORDER BY n;
|
||||
n
|
||||
10
|
||||
11
|
||||
12
|
||||
13
|
||||
14
|
||||
15
|
||||
drop table t1,t2;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_sporadic_master.inc
|
||||
47
mysql-test/suite/binlog_encryption/rpl_ssl.result
Normal file
47
mysql-test/suite/binlog_encryption/rpl_ssl.result
Normal file
@@ -0,0 +1,47 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
create user replssl@localhost;
|
||||
grant replication slave on *.* to replssl@localhost require ssl;
|
||||
create table t1 (t int auto_increment, KEY(t));
|
||||
stop slave;
|
||||
change master to
|
||||
master_user='replssl',
|
||||
master_password='',
|
||||
master_ssl=1,
|
||||
master_ssl_ca ='MYSQL_TEST_DIR/std_data/cacert.pem',
|
||||
master_ssl_cert='MYSQL_TEST_DIR/std_data/client-cert.pem',
|
||||
master_ssl_key='MYSQL_TEST_DIR/std_data/client-key.pem';
|
||||
start slave;
|
||||
insert into t1 values(1);
|
||||
select * from t1;
|
||||
t
|
||||
1
|
||||
Master_SSL_Allowed = 'Yes'
|
||||
Master_SSL_CA_Path = ''
|
||||
Master_SSL_CA_File = 'MYSQL_TEST_DIR/std_data/cacert.pem'
|
||||
Master_SSL_Cert = 'MYSQL_TEST_DIR/std_data/client-cert.pem'
|
||||
Master_SSL_Key = 'MYSQL_TEST_DIR/std_data/client-key.pem'
|
||||
include/check_slave_is_running.inc
|
||||
STOP SLAVE;
|
||||
select * from t1;
|
||||
t
|
||||
1
|
||||
insert into t1 values (NULL);
|
||||
include/wait_for_slave_to_start.inc
|
||||
Master_SSL_Allowed = 'Yes'
|
||||
Master_SSL_CA_Path = ''
|
||||
Master_SSL_CA_File = 'MYSQL_TEST_DIR/std_data/cacert.pem'
|
||||
Master_SSL_Cert = 'MYSQL_TEST_DIR/std_data/client-cert.pem'
|
||||
Master_SSL_Key = 'MYSQL_TEST_DIR/std_data/client-key.pem'
|
||||
include/check_slave_is_running.inc
|
||||
drop user replssl@localhost;
|
||||
drop table t1;
|
||||
include/stop_slave.inc
|
||||
CHANGE MASTER TO
|
||||
master_user = 'root',
|
||||
master_ssl = 0,
|
||||
master_ssl_ca = '',
|
||||
master_ssl_cert = '',
|
||||
master_ssl_key = '';
|
||||
End of 5.0 tests
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_ssl.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_ssl.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_ssl.inc
|
||||
@@ -0,0 +1 @@
|
||||
--relay-log-space-limit=8192 --relay-log-purge --max-relay-log-size=4096
|
||||
@@ -0,0 +1,5 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
include/assert.inc [Assert that relay log space is close to the limit]
|
||||
include/diff_tables.inc [master:test.t1,slave:test.t1]
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_stm_relay_ign_space.inc
|
||||
@@ -0,0 +1,428 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
drop database if exists mysqltest1;
|
||||
create database mysqltest1;
|
||||
use mysqltest1;
|
||||
set @my_binlog_format= @@global.binlog_format;
|
||||
set session binlog_format=mixed;
|
||||
show session variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format MIXED
|
||||
set session binlog_format=statement;
|
||||
show session variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
set session binlog_format=row;
|
||||
show session variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
set global binlog_format=DEFAULT;
|
||||
show global variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
set global binlog_format=MIXED;
|
||||
show global variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format MIXED
|
||||
set global binlog_format=STATEMENT;
|
||||
show global variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
set global binlog_format=ROW;
|
||||
show global variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
show session variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
ROW ROW
|
||||
CREATE TABLE t1 (a varchar(100));
|
||||
prepare stmt1 from 'insert into t1 select concat(UUID(),?)';
|
||||
set @string="emergency_1_";
|
||||
insert into t1 values("work_2_");
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
insert into t1 values(concat(UUID(),"work_3_"));
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
insert into t1 values(concat("for_4_",UUID()));
|
||||
insert into t1 select "yesterday_5_";
|
||||
create temporary table tmp(a char(100));
|
||||
insert into tmp values("see_6_");
|
||||
set binlog_format=statement;
|
||||
ERROR HY000: Cannot switch out of the row-based binary log format when the session has open temporary tables
|
||||
insert into t1 select * from tmp;
|
||||
drop temporary table tmp;
|
||||
set binlog_format=statement;
|
||||
show global variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format ROW
|
||||
show session variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
ROW STATEMENT
|
||||
set global binlog_format=statement;
|
||||
show global variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
show session variables like "binlog_format%";
|
||||
Variable_name Value
|
||||
binlog_format STATEMENT
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
STATEMENT STATEMENT
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
set @string="emergency_7_";
|
||||
insert into t1 values("work_8_");
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
insert into t1 values("work_9_");
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
insert into t1 values("for_10_");
|
||||
insert into t1 select "yesterday_11_";
|
||||
set binlog_format=statement;
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
STATEMENT STATEMENT
|
||||
set global binlog_format=statement;
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
STATEMENT STATEMENT
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
set @string="emergency_12_";
|
||||
insert into t1 values("work_13_");
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
insert into t1 values("work_14_");
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
insert into t1 values("for_15_");
|
||||
insert into t1 select "yesterday_16_";
|
||||
set global binlog_format=mixed;
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
MIXED STATEMENT
|
||||
set binlog_format=default;
|
||||
select @@global.binlog_format, @@session.binlog_format;
|
||||
@@global.binlog_format @@session.binlog_format
|
||||
MIXED MIXED
|
||||
prepare stmt1 from 'insert into t1 select concat(UUID(),?)';
|
||||
set @string="emergency_17_";
|
||||
insert into t1 values("work_18_");
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
insert into t1 values(concat(UUID(),"work_19_"));
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
insert into t1 values(concat("for_20_",UUID()));
|
||||
insert into t1 select "yesterday_21_";
|
||||
prepare stmt1 from 'insert into t1 select ?';
|
||||
insert into t1 values(concat(UUID(),"work_22_"));
|
||||
execute stmt1 using @string;
|
||||
deallocate prepare stmt1;
|
||||
insert into t1 values(concat("for_23_",UUID()));
|
||||
insert into t1 select "yesterday_24_";
|
||||
create table t2 ENGINE=MyISAM select rpad(UUID(),100,' ');
|
||||
create table t3 select 1 union select UUID();
|
||||
create table t4 select * from t1 where 3 in (select 1 union select 2 union select UUID() union select 3);
|
||||
create table t5 select * from t1 where 3 in (select 1 union select 2 union select curdate() union select 3);
|
||||
Warnings:
|
||||
Warning 1292 Incorrect datetime value: '3'
|
||||
insert into t5 select UUID() from t1 where 3 in (select 1 union select 2 union select 3 union select * from t4);
|
||||
create procedure foo()
|
||||
begin
|
||||
insert into t1 values("work_25_");
|
||||
insert into t1 values(concat("for_26_",UUID()));
|
||||
insert into t1 select "yesterday_27_";
|
||||
end|
|
||||
create procedure foo2()
|
||||
begin
|
||||
insert into t1 values(concat("emergency_28_",UUID()));
|
||||
insert into t1 values("work_29_");
|
||||
insert into t1 values(concat("for_30_",UUID()));
|
||||
set session binlog_format=row; # accepted for stored procs
|
||||
insert into t1 values("more work_31_");
|
||||
set session binlog_format=mixed;
|
||||
end|
|
||||
create function foo3() returns bigint unsigned
|
||||
begin
|
||||
set session binlog_format=row; # rejected for stored funcs
|
||||
insert into t1 values("alarm");
|
||||
return 100;
|
||||
end|
|
||||
create procedure foo4(x varchar(100))
|
||||
begin
|
||||
insert into t1 values(concat("work_250_",x));
|
||||
insert into t1 select "yesterday_270_";
|
||||
end|
|
||||
call foo();
|
||||
call foo2();
|
||||
call foo4("hello");
|
||||
call foo4(UUID());
|
||||
call foo4("world");
|
||||
select foo3();
|
||||
ERROR HY000: Cannot change the binary logging format inside a stored function or trigger
|
||||
select * from t1 where a="alarm";
|
||||
a
|
||||
drop function foo3;
|
||||
create function foo3() returns bigint unsigned
|
||||
begin
|
||||
insert into t1 values("foo3_32_");
|
||||
call foo();
|
||||
return 100;
|
||||
end|
|
||||
insert into t2 select foo3();
|
||||
prepare stmt1 from 'insert into t2 select foo3()';
|
||||
execute stmt1;
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
create function foo4() returns bigint unsigned
|
||||
begin
|
||||
insert into t2 select foo3();
|
||||
return 100;
|
||||
end|
|
||||
select foo4();
|
||||
foo4()
|
||||
100
|
||||
prepare stmt1 from 'select foo4()';
|
||||
execute stmt1;
|
||||
foo4()
|
||||
100
|
||||
execute stmt1;
|
||||
foo4()
|
||||
100
|
||||
deallocate prepare stmt1;
|
||||
create function foo5() returns bigint unsigned
|
||||
begin
|
||||
insert into t2 select UUID();
|
||||
return 100;
|
||||
end|
|
||||
select foo5();
|
||||
foo5()
|
||||
100
|
||||
prepare stmt1 from 'select foo5()';
|
||||
execute stmt1;
|
||||
foo5()
|
||||
100
|
||||
execute stmt1;
|
||||
foo5()
|
||||
100
|
||||
deallocate prepare stmt1;
|
||||
create function foo6(x varchar(100)) returns bigint unsigned
|
||||
begin
|
||||
insert into t2 select x;
|
||||
return 100;
|
||||
end|
|
||||
select foo6("foo6_1_");
|
||||
foo6("foo6_1_")
|
||||
100
|
||||
select foo6(concat("foo6_2_",UUID()));
|
||||
foo6(concat("foo6_2_",UUID()))
|
||||
100
|
||||
prepare stmt1 from 'select foo6(concat("foo6_3_",UUID()))';
|
||||
execute stmt1;
|
||||
foo6(concat("foo6_3_",UUID()))
|
||||
100
|
||||
execute stmt1;
|
||||
foo6(concat("foo6_3_",UUID()))
|
||||
100
|
||||
deallocate prepare stmt1;
|
||||
create view v1 as select uuid();
|
||||
create table t11 (data varchar(255));
|
||||
insert into t11 select * from v1;
|
||||
insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11');
|
||||
prepare stmt1 from "insert into t11 select TABLE_NAME from INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA='mysqltest1' and TABLE_NAME IN ('v1','t11')";
|
||||
execute stmt1;
|
||||
execute stmt1;
|
||||
deallocate prepare stmt1;
|
||||
create trigger t11_bi before insert on t11 for each row
|
||||
begin
|
||||
set NEW.data = concat(NEW.data,UUID());
|
||||
end|
|
||||
insert into t11 values("try_560_");
|
||||
insert delayed into t2 values("delay_1_");
|
||||
insert delayed into t2 values(concat("delay_2_",UUID()));
|
||||
insert delayed into t2 values("delay_6_");
|
||||
insert delayed into t2 values(rand());
|
||||
set @a=2.345;
|
||||
insert delayed into t2 values(@a);
|
||||
create table t20 select * from t1;
|
||||
create table t21 select * from t2;
|
||||
create table t22 select * from t3;
|
||||
drop table t1,t2,t3;
|
||||
create table t1 (a int primary key auto_increment, b varchar(100));
|
||||
create table t2 (a int primary key auto_increment, b varchar(100));
|
||||
create table t3 (b varchar(100));
|
||||
create function f (x varchar(100)) returns int deterministic
|
||||
begin
|
||||
insert into t1 values(null,x);
|
||||
insert into t2 values(null,x);
|
||||
return 1;
|
||||
end|
|
||||
select f("try_41_");
|
||||
f("try_41_")
|
||||
1
|
||||
use mysqltest1;
|
||||
insert into t2 values(2,null),(3,null),(4,null);
|
||||
delete from t2 where a>=2;
|
||||
select f("try_42_");
|
||||
f("try_42_")
|
||||
1
|
||||
insert into t2 values(3,null),(4,null);
|
||||
delete from t2 where a>=3;
|
||||
prepare stmt1 from 'select f(?)';
|
||||
set @string="try_43_";
|
||||
insert into t1 values(null,"try_44_");
|
||||
execute stmt1 using @string;
|
||||
f(?)
|
||||
1
|
||||
deallocate prepare stmt1;
|
||||
create table t12 select * from t1;
|
||||
drop table t1;
|
||||
create table t1 (a int, b varchar(100), key(a));
|
||||
select f("try_45_");
|
||||
f("try_45_")
|
||||
1
|
||||
create table t13 select * from t1;
|
||||
drop table t1;
|
||||
create table t1 (a int primary key auto_increment, b varchar(100));
|
||||
drop function f;
|
||||
create table t14 (unique (a)) select * from t2;
|
||||
truncate table t2;
|
||||
create function f1 (x varchar(100)) returns int deterministic
|
||||
begin
|
||||
insert into t1 values(null,x);
|
||||
return 1;
|
||||
end|
|
||||
create function f2 (x varchar(100)) returns int deterministic
|
||||
begin
|
||||
insert into t2 values(null,x);
|
||||
return 1;
|
||||
end|
|
||||
select f1("try_46_"),f2("try_47_");
|
||||
f1("try_46_") f2("try_47_")
|
||||
1 1
|
||||
insert into t2 values(2,null),(3,null),(4,null);
|
||||
delete from t2 where a>=2;
|
||||
select f1("try_48_"),f2("try_49_");
|
||||
f1("try_48_") f2("try_49_")
|
||||
1 1
|
||||
insert into t3 values(concat("try_50_",f1("try_51_"),f2("try_52_")));
|
||||
drop function f2;
|
||||
create function f2 (x varchar(100)) returns int deterministic
|
||||
begin
|
||||
declare y int;
|
||||
insert into t1 values(null,x);
|
||||
set y = (select count(*) from t2);
|
||||
return y;
|
||||
end|
|
||||
select f1("try_53_"),f2("try_54_");
|
||||
f1("try_53_") f2("try_54_")
|
||||
1 3
|
||||
drop function f2;
|
||||
create trigger t1_bi before insert on t1 for each row
|
||||
begin
|
||||
insert into t2 values(null,"try_55_");
|
||||
end|
|
||||
insert into t1 values(null,"try_56_");
|
||||
alter table t1 modify a int, drop primary key;
|
||||
insert into t1 values(null,"try_57_");
|
||||
CREATE TEMPORARY TABLE t15 SELECT UUID();
|
||||
create table t16 like t15;
|
||||
INSERT INTO t16 SELECT * FROM t15;
|
||||
insert into t16 values("try_65_");
|
||||
drop table t15;
|
||||
insert into t16 values("try_66_");
|
||||
select count(*) from t1;
|
||||
count(*)
|
||||
7
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
5
|
||||
select count(*) from t3;
|
||||
count(*)
|
||||
1
|
||||
select count(*) from t4;
|
||||
count(*)
|
||||
29
|
||||
select count(*) from t5;
|
||||
count(*)
|
||||
58
|
||||
select count(*) from t11;
|
||||
count(*)
|
||||
8
|
||||
select count(*) from t20;
|
||||
count(*)
|
||||
66
|
||||
select count(*) from t21;
|
||||
count(*)
|
||||
19
|
||||
select count(*) from t22;
|
||||
count(*)
|
||||
2
|
||||
select count(*) from t12;
|
||||
count(*)
|
||||
4
|
||||
select count(*) from t13;
|
||||
count(*)
|
||||
1
|
||||
select count(*) from t14;
|
||||
count(*)
|
||||
4
|
||||
select count(*) from t16;
|
||||
count(*)
|
||||
3
|
||||
DROP TABLE IF EXISTS t11;
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
CREATE TABLE t11 (song VARCHAR(255));
|
||||
LOCK TABLES t11 WRITE;
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
INSERT INTO t11 VALUES('Several Species of Small Furry Animals Gathered Together in a Cave and Grooving With a Pict');
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
INSERT INTO t11 VALUES('Careful With That Axe, Eugene');
|
||||
UNLOCK TABLES;
|
||||
SELECT * FROM t11;
|
||||
song Several Species of Small Furry Animals Gathered Together in a Cave and Grooving With a Pict
|
||||
song Careful With That Axe, Eugene
|
||||
USE mysqltest1;
|
||||
SELECT * FROM t11;
|
||||
song Several Species of Small Furry Animals Gathered Together in a Cave and Grooving With a Pict
|
||||
song Careful With That Axe, Eugene
|
||||
DROP TABLE IF EXISTS t12;
|
||||
SET SESSION BINLOG_FORMAT=MIXED;
|
||||
CREATE TABLE t12 (data LONG);
|
||||
LOCK TABLES t12 WRITE;
|
||||
INSERT INTO t12 VALUES(UUID());
|
||||
UNLOCK TABLES;
|
||||
CREATE FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
CREATE FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
DROP TABLE IF EXISTS t13;
|
||||
CREATE TABLE t13 (data CHAR(64));
|
||||
INSERT INTO t13 VALUES (USER());
|
||||
INSERT INTO t13 VALUES (my_user());
|
||||
INSERT INTO t13 VALUES (CURRENT_USER());
|
||||
INSERT INTO t13 VALUES (my_current_user());
|
||||
drop database mysqltest1;
|
||||
set global binlog_format =@my_binlog_format;
|
||||
include/rpl_end.inc
|
||||
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_switch_stm_row_mixed.inc
|
||||
2
mysql-test/suite/binlog_encryption/rpl_sync-master.opt
Normal file
2
mysql-test/suite/binlog_encryption/rpl_sync-master.opt
Normal file
@@ -0,0 +1,2 @@
|
||||
--default-storage-engine=MyISAM
|
||||
--loose-innodb-file-per-table=0
|
||||
2
mysql-test/suite/binlog_encryption/rpl_sync-slave.opt
Normal file
2
mysql-test/suite/binlog_encryption/rpl_sync-slave.opt
Normal file
@@ -0,0 +1,2 @@
|
||||
--sync-relay-log-info=1 --relay-log-recovery=1 --loose-innodb_file_format_check=1 --default-storage-engine=MyISAM --loose-innodb-file-per-table=0
|
||||
--skip-core-file --skip-slave-start
|
||||
41
mysql-test/suite/binlog_encryption/rpl_sync.result
Normal file
41
mysql-test/suite/binlog_encryption/rpl_sync.result
Normal file
@@ -0,0 +1,41 @@
|
||||
=====Configuring the enviroment=======;
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
call mtr.add_suppression('Attempting backtrace');
|
||||
call mtr.add_suppression("Recovery from master pos .* and file master-bin.000001");
|
||||
ALTER TABLE mysql.gtid_slave_pos ENGINE=InnoDB;
|
||||
flush tables;
|
||||
CREATE TABLE t1(a INT, PRIMARY KEY(a)) engine=innodb;
|
||||
insert into t1(a) values(1);
|
||||
insert into t1(a) values(2);
|
||||
insert into t1(a) values(3);
|
||||
=====Inserting data on the master but without the SQL Thread being running=======;
|
||||
include/stop_slave_sql.inc
|
||||
insert into t1(a) values(4);
|
||||
insert into t1(a) values(5);
|
||||
insert into t1(a) values(6);
|
||||
=====Removing relay log files and crashing/recoverying the slave=======;
|
||||
include/stop_slave_io.inc
|
||||
SET SESSION debug_dbug="d,crash_before_rotate_relaylog";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
include/rpl_reconnect.inc
|
||||
=====Dumping and comparing tables=======;
|
||||
include/start_slave.inc
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
=====Corrupting the master.info=======;
|
||||
include/stop_slave.inc
|
||||
FLUSH LOGS;
|
||||
insert into t1(a) values(7);
|
||||
insert into t1(a) values(8);
|
||||
insert into t1(a) values(9);
|
||||
SET SESSION debug_dbug="d,crash_before_rotate_relaylog";
|
||||
FLUSH LOGS;
|
||||
ERROR HY000: Lost connection to MySQL server during query
|
||||
include/rpl_reconnect.inc
|
||||
=====Dumping and comparing tables=======;
|
||||
include/start_slave.inc
|
||||
include/diff_tables.inc [master:t1,slave:t1]
|
||||
=====Clean up=======;
|
||||
drop table t1;
|
||||
include/rpl_end.inc
|
||||
1
mysql-test/suite/binlog_encryption/rpl_sync.test
Normal file
1
mysql-test/suite/binlog_encryption/rpl_sync.test
Normal file
@@ -0,0 +1 @@
|
||||
--source extra/rpl_tests/rpl_sync.inc
|
||||
@@ -0,0 +1,6 @@
|
||||
!include my.cnf
|
||||
|
||||
[mysqld.2]
|
||||
plugin-load-add= @ENV.FILE_KEY_MANAGEMENT_SO
|
||||
loose-file-key-management-filename=@ENV.MYSQLTEST_VARDIR/std_data/keys.txt
|
||||
encrypt-binlog
|
||||
@@ -0,0 +1,83 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
SELECT @@global.mysql56_temporal_format AS on_master;
|
||||
on_master
|
||||
1
|
||||
SELECT @@global.mysql56_temporal_format AS on_slave;
|
||||
on_slave
|
||||
1
|
||||
CREATE TABLE t1
|
||||
(
|
||||
c0 TIME(0),
|
||||
c1 TIME(1),
|
||||
c2 TIME(2),
|
||||
c3 TIME(3),
|
||||
c4 TIME(4),
|
||||
c5 TIME(5),
|
||||
c6 TIME(6)
|
||||
);
|
||||
CREATE TABLE t2
|
||||
(
|
||||
c0 TIMESTAMP(0),
|
||||
c1 TIMESTAMP(1),
|
||||
c2 TIMESTAMP(2),
|
||||
c3 TIMESTAMP(3),
|
||||
c4 TIMESTAMP(4),
|
||||
c5 TIMESTAMP(5),
|
||||
c6 TIMESTAMP(6)
|
||||
);
|
||||
CREATE TABLE t3
|
||||
(
|
||||
c0 DATETIME(0),
|
||||
c1 DATETIME(1),
|
||||
c2 DATETIME(2),
|
||||
c3 DATETIME(3),
|
||||
c4 DATETIME(4),
|
||||
c5 DATETIME(5),
|
||||
c6 DATETIME(6)
|
||||
);
|
||||
INSERT INTO t1 VALUES ('01:01:01','01:01:01.1','01:01:01.11','01:01:01.111','01:01:01.1111','01:01:01.11111','01:01:01.111111');
|
||||
INSERT INTO t2 VALUES ('2001-01-01 01:01:01','2001-01-01 01:01:01.1','2001-01-01 01:01:01.11','2001-01-01 01:01:01.111','2001-01-01 01:01:01.1111','2001-01-01 01:01:01.11111','2001-01-01 01:01:01.111111');
|
||||
INSERT INTO t3 VALUES ('2001-01-01 01:01:01','2001-01-01 01:01:01.1','2001-01-01 01:01:01.11','2001-01-01 01:01:01.111','2001-01-01 01:01:01.1111','2001-01-01 01:01:01.11111','2001-01-01 01:01:01.111111');
|
||||
SELECT TABLE_NAME, TABLE_ROWS, AVG_ROW_LENGTH,DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_NAME RLIKE 't[1-3]' ORDER BY TABLE_NAME;
|
||||
TABLE_NAME TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH
|
||||
t1 1 34 34
|
||||
t2 1 41 41
|
||||
t3 1 48 48
|
||||
SELECT * FROM t1;;
|
||||
c0 01:01:01
|
||||
c1 01:01:01.1
|
||||
c2 01:01:01.11
|
||||
c3 01:01:01.111
|
||||
c4 01:01:01.1111
|
||||
c5 01:01:01.11111
|
||||
c6 01:01:01.111111
|
||||
SELECT * FROM t2;;
|
||||
c0 2001-01-01 01:01:01
|
||||
c1 2001-01-01 01:01:01.1
|
||||
c2 2001-01-01 01:01:01.11
|
||||
c3 2001-01-01 01:01:01.111
|
||||
c4 2001-01-01 01:01:01.1111
|
||||
c5 2001-01-01 01:01:01.11111
|
||||
c6 2001-01-01 01:01:01.111111
|
||||
SELECT * FROM t3;;
|
||||
c0 2001-01-01 01:01:01
|
||||
c1 2001-01-01 01:01:01.1
|
||||
c2 2001-01-01 01:01:01.11
|
||||
c3 2001-01-01 01:01:01.111
|
||||
c4 2001-01-01 01:01:01.1111
|
||||
c5 2001-01-01 01:01:01.11111
|
||||
c6 2001-01-01 01:01:01.111111
|
||||
SELECT TABLE_NAME, TABLE_ROWS, AVG_ROW_LENGTH,DATA_LENGTH FROM INFORMATION_SCHEMA.TABLES
|
||||
WHERE TABLE_NAME RLIKE 't[1-3]' ORDER BY TABLE_NAME;
|
||||
TABLE_NAME TABLE_ROWS AVG_ROW_LENGTH DATA_LENGTH
|
||||
t1 1 34 34
|
||||
t2 1 41 41
|
||||
t3 1 48 48
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
SET @@global.mysql56_temporal_format=DEFAULT;
|
||||
SET @@global.mysql56_temporal_format=DEFAULT;
|
||||
include/rpl_end.inc
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user