polardbxengine/mysql-test/suite/xengine_binlog_gtid/t/binlog_gtid_mysqlpump.test

71 lines
2.3 KiB
Plaintext

# ==== Purpose ====
#
# Verify that GTID_EXECUTED and GTID_PURGED are correctly restored by
# mysqlpump, even after a restart.
#
# ==== Implementation ====
#
# Execute some transactions in different binary logs, purge some of them.
# Take a dump. Drop the table and RESET MASTER. Verify that
# GTID_EXECUTED and GTID_PURGED after the dump equal GTID_EXECUTED before
# the dump. Restart server. Repeat the check.
#
# ==== Bugs ====
#
# BUG#24590891: RESTARTING A SLAVE AFTER SEEDING IT WITH A MYSQLDUMP LOSES IT'S POSITION
# Agnostic to binlog_format.
--source include/have_binlog_format_statement.inc
--echo ==== Initialize ====
CREATE TABLE t1 (a INT);
FLUSH LOGS;
--let $current_binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
--replace_result $current_binlog_file <CURRENT_BINLOG>
eval PURGE BINARY LOGS TO '$current_binlog_file';
INSERT INTO t1 VALUES (1);
FLUSH LOGS;
INSERT INTO t1 VALUES (2);
--let $gtid_executed= `SELECT @@GLOBAL.GTID_EXECUTED`
--let $name= pump
# Skip routines to workaround BUG#25292963
--let $program= $MYSQL_PUMP --add-drop-table --all-databases --include-routines=o
--echo ==== $name and restore ====
--echo # $name
# Apparently mysql.proc is not fully restored on the slave, so
# unless we remove it from the dump, check-testcase will fail.
--exec $PROGRAM >> $MYSQL_TMP_DIR/mysql$name.sql
DROP TABLE t1;
RESET MASTER;
--echo # restore
--exec $MYSQL < $MYSQL_TMP_DIR/mysql$name.sql
--echo ==== Verify after restoring from $name ====
--let $assert_text= GTID_EXECUTED should equal master GTID_EXECUTED after $name restored
--let $assert_cond= @@GLOBAL.GTID_EXECUTED = "$gtid_executed"
--source include/assert.inc
--let $assert_text= GTID_PURGED should equal master GTID_EXECUTED after $name restored
--let $assert_cond= @@GLOBAL.GTID_PURGED = "$gtid_executed"
--source include/assert.inc
--source include/restart_mysqld.inc
--let $assert_text= GTID_EXECUTED should equal master GTID_EXECUTED after server restarted
--let $assert_cond= @@GLOBAL.GTID_EXECUTED = "$gtid_executed"
--source include/assert.inc
--let $assert_text= GTID_PURGED should equal master GTID_EXECUTED after server restarted
--let $assert_cond= @@GLOBAL.GTID_PURGED = "$gtid_executed"
--source include/assert.inc
--echo ==== Clean up ====
DROP TABLE t1;
--remove_file $MYSQL_TMP_DIR/mysql$name.sql