mirror of
https://github.com/MariaDB/server.git
synced 2025-08-26 01:44:06 +03:00
Major replication test framework cleanup. This does the following: - Ensure that all tests clean up the replication state when they finish, by making check-testcase check the output of SHOW SLAVE STATUS. This implies: - Slave must not be running after test finished. This is good because it removes the risk for sporadic errors in subsequent tests when a test forgets to sync correctly. - Slave SQL and IO errors must be cleared when test ends. This is good because we will notice if a test gets an unexpected error in the slave threads near the end. - We no longer have to clean up before a test starts. - Ensure that all tests that wait for an error in one of the slave threads waits for a specific error. It is no longer possible to source wait_for_slave_[sql|io]_to_stop.inc when there is an error in one of the slave threads. This is good because: - If a test expects an error but there is a bug that causes another error to happen, or if it stops the slave thread without an error, then we will notice. - When developing tests, wait_for_*_to_[start|stop].inc will fail immediately if there is an error in the relevant slave thread. Before this patch, we had to wait for the timeout. - Remove duplicated and repeated code for setting up unusual replication topologies. Now, there is a single file that is capable of setting up arbitrary topologies (include/rpl_init.inc, but include/master-slave.inc is still available for the most common topology). Tests can now end with include/rpl_end.inc, which will clean up correctly no matter what topology is used. The topology can be changed with include/rpl_change_topology.inc. - Improved debug information when tests fail. This includes: - debug info is printed on all servers configured by include/rpl_init.inc - User can set $rpl_debug=1, which makes auxiliary replication files print relevant debug info. - Improved documentation for all auxiliary replication files. Now they describe purpose, usage, parameters, and side effects. - Many small code cleanups: - Made have_innodb.inc output a sensible error message. - Moved contents of rpl000017-slave.sh into rpl000017.test - Added mysqltest variables that expose the current state of disable_warnings/enable_warnings and friends. - Too many to list here: see per-file comments for details.
241 lines
6.4 KiB
Plaintext
241 lines
6.4 KiB
Plaintext
# TBF - difference in row level logging
|
|
-- source include/have_binlog_format_mixed_or_statement.inc
|
|
-- source include/master-slave.inc
|
|
|
|
--disable_warnings
|
|
drop database if exists mysqltest1;
|
|
--enable_warnings
|
|
create database mysqltest1;
|
|
|
|
use mysqltest1;
|
|
create table t1 (a int);
|
|
insert into t1 values(9);
|
|
select * from mysqltest1.t1;
|
|
sync_slave_with_master;
|
|
show databases like 'mysqltest1'; # should be empty
|
|
select * from test.t1;
|
|
# cleanup
|
|
connection master;
|
|
drop table t1;
|
|
drop database mysqltest1;
|
|
sync_slave_with_master;
|
|
|
|
#
|
|
# BUG#6353:
|
|
# Option --replicate-rewrite-db should work together with LOAD DATA INFILE
|
|
#
|
|
|
|
connection slave;
|
|
--disable_warnings
|
|
drop database if exists rewrite;
|
|
--enable_warnings
|
|
create database rewrite;
|
|
|
|
connection master;
|
|
use test;
|
|
create table t1 (a date, b date, c date not null, d date);
|
|
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',';
|
|
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' IGNORE 2 LINES;
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
select * from rewrite.t1;
|
|
|
|
connection master;
|
|
truncate table t1;
|
|
load data infile '../../std_data/loaddata1.dat' into table t1 fields terminated by ',' LINES STARTING BY ',' (b,c,d);
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
select * from rewrite.t1;
|
|
|
|
connection master;
|
|
drop table t1;
|
|
create table t1 (a text, b text);
|
|
load data infile '../../std_data/loaddata2.dat' into table t1 fields terminated by ',' enclosed by '''';
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
select concat('|',a,'|'), concat('|',b,'|') from rewrite.t1;
|
|
|
|
connection master;
|
|
drop table t1;
|
|
create table t1 (a int, b char(10));
|
|
load data infile '../../std_data/loaddata3.dat' into table t1 fields terminated by '' enclosed by '' ignore 1 lines;
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
select * from rewrite.t1;
|
|
|
|
connection master;
|
|
truncate table t1;
|
|
load data infile '../../std_data/loaddata4.dat' into table t1 fields terminated by '' enclosed by '' lines terminated by '' ignore 1 lines;
|
|
sync_slave_with_master;
|
|
|
|
connection slave;
|
|
# The empty line last comes from the end line field in the file
|
|
select * from rewrite.t1;
|
|
|
|
set sql_log_bin= 0;
|
|
drop database rewrite;
|
|
set sql_log_bin= 1;
|
|
|
|
connection master;
|
|
set sql_log_bin= 0;
|
|
drop table t1;
|
|
set sql_log_bin= 1;
|
|
|
|
# End of 4.1 tests
|
|
|
|
--echo
|
|
--echo ****
|
|
--echo **** Bug #46861 Auto-closing of temporary tables broken by replicate-rewrite-db
|
|
--echo ****
|
|
--echo
|
|
|
|
--echo ****
|
|
--echo **** Preparing the environment
|
|
--echo ****
|
|
connection master;
|
|
|
|
connect (con_temp_03,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
|
connect (con_temp_02,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
|
connect (con_temp_01,127.0.0.1,root,,test,$MASTER_MYPORT,);
|
|
|
|
connection master;
|
|
SET sql_log_bin= 0;
|
|
CREATE DATABASE database_master_temp_01;
|
|
CREATE DATABASE database_master_temp_02;
|
|
CREATE DATABASE database_master_temp_03;
|
|
SET sql_log_bin= 1;
|
|
|
|
connection slave;
|
|
SET sql_log_bin= 0;
|
|
CREATE DATABASE database_slave_temp_01;
|
|
CREATE DATABASE database_slave_temp_02;
|
|
CREATE DATABASE database_slave_temp_03;
|
|
SET sql_log_bin= 1;
|
|
|
|
--echo
|
|
--echo ****
|
|
--echo **** Creating temporary tables on different databases with different connections
|
|
--echo ****
|
|
--echo **** con_temp_01 --> creates
|
|
--echo **** t_01_01_temp on database_master_temp_01
|
|
--echo ****
|
|
--echo **** con_temp_02 --> creates
|
|
--echo **** t_01_01_temp on database_master_temp_01
|
|
--echo **** t_02_01_temp, t_02_02_temp on database_master_temp_02
|
|
--echo ****
|
|
--echo **** con_temp_02 --> creates
|
|
--echo **** t_01_01_temp on database_master_temp_01
|
|
--echo **** t_02_01_temp, t_02_02_temp on database_master_temp_02
|
|
--echo **** t_03_01_temp, t_03_02_temp, t_03_03_temp on database_master_temp_03
|
|
--echo ****
|
|
|
|
--echo
|
|
--echo con_temp_01
|
|
--echo
|
|
connection con_temp_01;
|
|
USE database_master_temp_01;
|
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
|
INSERT INTO t_01_01_temp VALUES(1);
|
|
|
|
--echo
|
|
--echo con_temp_02
|
|
--echo
|
|
connection con_temp_02;
|
|
USE database_master_temp_01;
|
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
|
INSERT INTO t_01_01_temp VALUES(1);
|
|
USE database_master_temp_02;
|
|
CREATE TEMPORARY TABLE t_02_01_temp(a int);
|
|
INSERT INTO t_02_01_temp VALUES(1);
|
|
CREATE TEMPORARY TABLE t_02_02_temp(a int);
|
|
INSERT INTO t_02_02_temp VALUES(1);
|
|
|
|
--echo
|
|
--echo con_temp_03
|
|
--echo
|
|
connection con_temp_03;
|
|
USE database_master_temp_01;
|
|
CREATE TEMPORARY TABLE t_01_01_temp(a int);
|
|
INSERT INTO t_01_01_temp VALUES(1);
|
|
USE database_master_temp_02;
|
|
CREATE TEMPORARY TABLE t_02_01_temp(a int);
|
|
INSERT INTO t_02_01_temp VALUES(1);
|
|
CREATE TEMPORARY TABLE t_02_02_temp(a int);
|
|
INSERT INTO t_02_02_temp VALUES(1);
|
|
USE database_master_temp_03;
|
|
CREATE TEMPORARY TABLE t_03_01_temp(a int);
|
|
INSERT INTO t_03_01_temp VALUES(1);
|
|
CREATE TEMPORARY TABLE t_03_02_temp(a int);
|
|
INSERT INTO t_03_02_temp VALUES(1);
|
|
CREATE TEMPORARY TABLE t_03_03_temp(a int);
|
|
INSERT INTO t_03_03_temp VALUES(1);
|
|
|
|
--echo
|
|
--echo **** Dropping the connections
|
|
--echo **** We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
|
--echo **** guarantee that logging of the terminated con1 has been done yet.a To be
|
|
--echo **** sure that logging has been done, we use a user lock.
|
|
--echo
|
|
connection master;
|
|
sync_slave_with_master;
|
|
connection slave;
|
|
show status like 'Slave_open_temp_tables';
|
|
|
|
connection master;
|
|
let $binlog_start= query_get_value(SHOW MASTER STATUS, Position, 1);
|
|
connection con_temp_01;
|
|
select get_lock("con_01",10);
|
|
connection master;
|
|
disconnect con_temp_01;
|
|
select get_lock("con_01",10);
|
|
|
|
connection con_temp_02;
|
|
select get_lock("con_02",10);
|
|
connection master;
|
|
disconnect con_temp_02;
|
|
select get_lock("con_02",10);
|
|
|
|
connection con_temp_03;
|
|
select get_lock("con_03",10);
|
|
connection master;
|
|
disconnect con_temp_03;
|
|
select get_lock("con_03",10);
|
|
|
|
--echo
|
|
--echo **** Checking the binary log and temporary tables
|
|
--echo
|
|
connection master;
|
|
sync_slave_with_master;
|
|
connection slave;
|
|
show status like 'Slave_open_temp_tables';
|
|
|
|
connection master;
|
|
--source include/show_binlog_events.inc
|
|
|
|
--echo ****
|
|
--echo **** Cleaning up the test case
|
|
--echo ****
|
|
connection master;
|
|
SET sql_log_bin= 0;
|
|
DROP DATABASE database_master_temp_01;
|
|
DROP DATABASE database_master_temp_02;
|
|
DROP DATABASE database_master_temp_03;
|
|
SET sql_log_bin= 1;
|
|
|
|
connection slave;
|
|
SET sql_log_bin= 0;
|
|
DROP DATABASE database_slave_temp_01;
|
|
DROP DATABASE database_slave_temp_02;
|
|
DROP DATABASE database_slave_temp_03;
|
|
SET sql_log_bin= 1;
|
|
|
|
connection master;
|
|
sync_slave_with_master;
|
|
|
|
# end of 5.0 tests
|
|
--source include/rpl_end.inc
|