142 lines
4.7 KiB
Plaintext
142 lines
4.7 KiB
Plaintext
# ==== Purpose ====
|
|
#
|
|
# Test case for checking the behavior of binary log cache when encrypted.
|
|
#
|
|
# It will generate a workload doing many SAVEPOINT/ROLLBACK TO SAVEPOINT
|
|
# and then committing the transactions. This will be done with binlog_encryption
|
|
# OFF and ON.
|
|
#
|
|
# After the workloads, it would ensure SHOW BINLOG EVENTS works fine for both
|
|
# binary log files and will sync master and slave comparing their tables
|
|
# contents.
|
|
#
|
|
# ==== Related Bugs and Worklogs ====
|
|
#
|
|
# WL#12079: Binary log cache encryption at rest
|
|
#
|
|
|
|
# Adding big test option for this test.
|
|
--source include/big_test.inc
|
|
--let $rpl_skip_start_slave= 1
|
|
--source include/master-slave.inc
|
|
|
|
# Setup test case variables
|
|
--let $keyring_master= $MYSQL_TMP_DIR/keyring_master
|
|
--let $keyring_slave= $MYSQL_TMP_DIR/keyring_slave
|
|
--let $keyring_original_file= $MYSQL_TEST_DIR/std_data/rpl_nogtid_encryption_keyring_master
|
|
--let $encrypted_binlog_file= $MYSQL_TEST_DIR/std_data/rpl_nogtid_encryption_master-bin.000002
|
|
--let $MASTER_DATADIR= `select @@datadir`
|
|
--source include/rpl_connection_slave.inc
|
|
--let $SLAVE_DATADIR= `select @@datadir`
|
|
--source include/rpl_connection_master.inc
|
|
|
|
|
|
--write_file $MYSQLTEST_VARDIR/tmp/rpl_binlog_cache_encryption.inc PROCEDURE
|
|
--disable_query_log
|
|
--let $trx=50
|
|
--echo # Inserting 50 transactions with save points
|
|
while ($trx)
|
|
{
|
|
BEGIN;
|
|
--let $string=`SELECT REPEAT('MySQL123',1024)`
|
|
--let $savepoints=5
|
|
--let $data_size=400
|
|
while ($savepoints)
|
|
{
|
|
--dec $savepoints
|
|
--let $before_savepoint=20
|
|
while ($before_savepoint > 9)
|
|
{
|
|
--dec $before_savepoint
|
|
--expr $length = $before_savepoint * $data_size
|
|
--eval INSERT INTO t1 (c2) VALUES (LEFT("$string",$length))
|
|
}
|
|
--eval SAVEPOINT point$savepoints
|
|
--let $until_rollback=20
|
|
while ($until_rollback > 9)
|
|
{
|
|
--dec $until_rollback
|
|
--expr $length = $until_rollback * $data_size
|
|
--eval INSERT INTO t1 (c2) VALUES (LEFT("$string",$length))
|
|
}
|
|
--eval ROLLBACK TO SAVEPOINT point$savepoints
|
|
--let $after_rollback=20
|
|
while ($after_rollback > 9)
|
|
{
|
|
--dec $after_rollback
|
|
--expr $length = $after_rollback * $data_size
|
|
--eval INSERT INTO t1 (c2) VALUES (LEFT("$string",$length))
|
|
}
|
|
}
|
|
COMMIT;
|
|
--dec $trx
|
|
}
|
|
--enable_query_log
|
|
#END OF
|
|
PROCEDURE
|
|
|
|
--echo # Part 1 - binlog_encryption = OFF
|
|
--let $plain_master_file=query_get_value(SHOW MASTER STATUS, File, 1)
|
|
CREATE TABLE t1 (c1 INT PRIMARY KEY AUTO_INCREMENT, c2 TEXT);
|
|
|
|
--source $MYSQLTEST_VARDIR/tmp/rpl_binlog_cache_encryption.inc
|
|
|
|
--echo SHOW BINLOG EVENTS shall not fail on the un-encrypted binlog file
|
|
--disable_result_log
|
|
--replace_result $plain_master_file PLAIN_MASTER_FILE
|
|
--eval SHOW BINLOG EVENTS IN '$plain_master_file'
|
|
--enable_result_log
|
|
|
|
--echo # Restarting the server with "--binlog_encryption=ON" and keyring
|
|
--let $rpl_server_number= 1
|
|
--let $rpl_server_parameters= $KEYRING_PLUGIN_OPT $KEYRING_PLUGIN_LOAD --keyring_file_data=$keyring_master --binlog_encryption=ON
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_restart_server.inc
|
|
|
|
--let $assert_text=binlog_encryption option shall be ON
|
|
--let $option_value = `SELECT variable_value FROM performance_schema.global_variables WHERE variable_name = "binlog_encryption"`
|
|
--let $assert_cond= "$option_value" = "ON"
|
|
--source include/assert.inc
|
|
|
|
--let $encrypted_master_file=query_get_value(SHOW MASTER STATUS, File, 1)
|
|
--let $rpl_log_file=$MASTER_DATADIR$encrypted_master_file
|
|
--source include/rpl_get_log_encryption_key_id.inc
|
|
--let $assert_text=Binary log is encrypted using 1st master key
|
|
--let $assert_cond= RIGHT("$rpl_encryption_key_id", 2) = "_1"
|
|
--source include/assert.inc
|
|
|
|
--echo # Part 2 - binlog_encryption = ON
|
|
|
|
--source $MYSQLTEST_VARDIR/tmp/rpl_binlog_cache_encryption.inc
|
|
|
|
--echo SHOW BINLOG EVENTS shall not fail on the encrypted binlog file
|
|
--disable_result_log
|
|
--replace_result $encrypted_master_file ENCRYPTED_MASTER_FILE
|
|
--eval SHOW BINLOG EVENTS IN '$encrypted_master_file'
|
|
--enable_result_log
|
|
|
|
# Restart the server loading the keyring
|
|
--echo # Restarting the server without "--binlog_encryption=ON"
|
|
--let $rpl_server_number= 1
|
|
--let $rpl_server_parameters= $KEYRING_PLUGIN_OPT $KEYRING_PLUGIN_LOAD --keyring_file_data=$keyring_master
|
|
--let $rpl_omit_print_server_parameters= 1
|
|
--source include/rpl_restart_server.inc
|
|
|
|
--source include/rpl_connection_slave.inc
|
|
--source include/start_slave.inc
|
|
--source include/rpl_connection_master.inc
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# Table diff
|
|
--let $diff_tables= master:t1, slave:t1
|
|
--source include/diff_tables.inc
|
|
|
|
# Cleanup
|
|
--source include/rpl_connection_master.inc
|
|
UNINSTALL PLUGIN keyring_file;
|
|
--remove_file $keyring_master
|
|
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_binlog_cache_encryption.inc
|
|
|
|
DROP TABLE t1;
|
|
--source include/rpl_end.inc
|