mirror of
https://github.com/MariaDB/server.git
synced 2025-10-23 16:17:30 +02:00

This is actually an existing problem in the old binlog implementation, and this patch is applicable to old binlog also. The problem is that RESET MASTER can run concurrently with binlog dump threads / connected slaves. This will remove the binlog from under the feet of the reader, which can cause all sorts of strange behaviour. This patch fixes the problem by disallowing to run RESET MASTER when dump threads (or other RESET MASTER or SHOW BINARY LOGS) are running. An error is thrown in this case, user must stop slaves and/or kill dump threads to make the RESET MASTER go through. A slave that connects in the middle of RESET MASTER will wait for it to complete. Fix a lot of test cases to kill any lingering dump threads before doing RESET MASTER, mostly just by sourcing include/kill_binlog_dump_threads.inc. Signed-off-by: Kristian Nielsen <knielsen@knielsen-hq.org>
408 lines
11 KiB
Text
408 lines
11 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
---Setup Section --
|
|
set timestamp=1000000000;
|
|
CREATE TABLE t1(word VARCHAR(20));
|
|
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY);
|
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT);
|
|
INSERT INTO t1 VALUES ("abirvalg");
|
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
|
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
|
set @d1 = 'dd1';
|
|
set @d1 = concat(@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1);
|
|
set @d1 = concat(@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1);
|
|
set @d1 = concat(@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1,@d1);
|
|
---Test 1 check table load --
|
|
SELECT COUNT(*) from t1;
|
|
COUNT(*)
|
|
351
|
|
SELECT COUNT(*) from t2;
|
|
COUNT(*)
|
|
500
|
|
SELECT COUNT(*) from t3;
|
|
COUNT(*)
|
|
500
|
|
SELECT * FROM t1 ORDER BY word LIMIT 5;
|
|
word
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
SELECT * FROM t2 ORDER BY id LIMIT 5;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
SELECT c1, c3, c4, c5 FROM t3 ORDER BY c1 LIMIT 5;
|
|
c1 c3 c4 c5
|
|
1 2006-02-22 00:00:00 Tested in Texas 2.2
|
|
2 2006-02-22 00:00:00 Tested in Texas 4.4
|
|
3 2006-02-22 00:00:00 Tested in Texas 6.6
|
|
4 2006-02-22 00:00:00 Tested in Texas 8.8
|
|
5 2006-02-22 00:00:00 Tested in Texas 11
|
|
connection slave;
|
|
SELECT COUNT(*) from t1;
|
|
COUNT(*)
|
|
351
|
|
SELECT COUNT(*) from t2;
|
|
COUNT(*)
|
|
500
|
|
SELECT COUNT(*) from t3;
|
|
COUNT(*)
|
|
500
|
|
SELECT * FROM t1 ORDER BY word LIMIT 5;
|
|
word
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
SELECT * FROM t2 ORDER BY id LIMIT 5;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
SELECT c1, c3, c4, c5 FROM t3 ORDER BY c1 LIMIT 5;
|
|
c1 c3 c4 c5
|
|
1 2006-02-22 00:00:00 Tested in Texas 2.2
|
|
2 2006-02-22 00:00:00 Tested in Texas 4.4
|
|
3 2006-02-22 00:00:00 Tested in Texas 6.6
|
|
4 2006-02-22 00:00:00 Tested in Texas 8.8
|
|
5 2006-02-22 00:00:00 Tested in Texas 11
|
|
connection master;
|
|
insert into t1 values ("Alas");
|
|
flush logs;
|
|
--- Test 1 Dump binlog to file --
|
|
--- Test 1 delete tables, clean master and slave --
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t3;
|
|
connection slave;
|
|
stop slave;
|
|
include/wait_for_slave_to_stop.inc
|
|
connection master;
|
|
include/kill_binlog_dump_threads.inc
|
|
reset master;
|
|
connection slave;
|
|
include/reset_slave.inc
|
|
start slave;
|
|
include/wait_for_slave_to_start.inc
|
|
connection master;
|
|
--- Test 1 Load from Dump binlog file --
|
|
--- Test 1 Check Load Results --
|
|
SELECT COUNT(*) from t1;
|
|
COUNT(*)
|
|
352
|
|
SELECT COUNT(*) from t2;
|
|
COUNT(*)
|
|
500
|
|
SELECT COUNT(*) from t3;
|
|
COUNT(*)
|
|
500
|
|
SELECT * FROM t1 ORDER BY word LIMIT 5;
|
|
word
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
SELECT * FROM t2 ORDER BY id LIMIT 5;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
SELECT c1, c3, c4, c5 FROM t3 ORDER BY c1 LIMIT 5;
|
|
c1 c3 c4 c5
|
|
1 2006-02-22 00:00:00 Tested in Texas 2.2
|
|
2 2006-02-22 00:00:00 Tested in Texas 4.4
|
|
3 2006-02-22 00:00:00 Tested in Texas 6.6
|
|
4 2006-02-22 00:00:00 Tested in Texas 8.8
|
|
5 2006-02-22 00:00:00 Tested in Texas 11
|
|
connection slave;
|
|
SELECT COUNT(*) from t1;
|
|
COUNT(*)
|
|
352
|
|
SELECT COUNT(*) from t2;
|
|
COUNT(*)
|
|
500
|
|
SELECT COUNT(*) from t3;
|
|
COUNT(*)
|
|
500
|
|
SELECT * FROM t1 ORDER BY word LIMIT 5;
|
|
word
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
SELECT * FROM t2 ORDER BY id LIMIT 5;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
SELECT c1, c3, c4, c5 FROM t3 ORDER BY c1 LIMIT 5;
|
|
c1 c3 c4 c5
|
|
1 2006-02-22 00:00:00 Tested in Texas 2.2
|
|
2 2006-02-22 00:00:00 Tested in Texas 4.4
|
|
3 2006-02-22 00:00:00 Tested in Texas 6.6
|
|
4 2006-02-22 00:00:00 Tested in Texas 8.8
|
|
5 2006-02-22 00:00:00 Tested in Texas 11
|
|
connection master;
|
|
--- Test 2 position test --
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
|
/*!40019 SET @@session.max_delayed_threads=0*/;
|
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
|
DELIMITER /*!*/;
|
|
ROLLBACK/*!*/;
|
|
use `test`/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
SET @@session.pseudo_thread_id=999999999/*!*/;
|
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1, @@session.system_versioning_insert_history=0/*!*/;
|
|
SET @@session.sql_mode=1411383296/*!*/;
|
|
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
|
/*!\C latin1 *//*!*/;
|
|
SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
|
SET @@session.lc_time_names=0/*!*/;
|
|
SET @@session.collation_database=DEFAULT/*!*/;
|
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
|
|
/*!*/;
|
|
DELIMITER ;
|
|
# End of log file
|
|
ROLLBACK /* added by mysqlbinlog */;
|
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
|
--- Test 3 First Remote test --
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
|
/*!40019 SET @@session.max_delayed_threads=0*/;
|
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
|
DELIMITER /*!*/;
|
|
ROLLBACK/*!*/;
|
|
use `test`/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
SET @@session.pseudo_thread_id=999999999/*!*/;
|
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1, @@session.system_versioning_insert_history=0/*!*/;
|
|
SET @@session.sql_mode=1411383296/*!*/;
|
|
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
|
/*!\C latin1 *//*!*/;
|
|
SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
|
SET @@session.lc_time_names=0/*!*/;
|
|
SET @@session.collation_database=DEFAULT/*!*/;
|
|
CREATE TABLE t1(word VARCHAR(20))
|
|
/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)
|
|
/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
|
|
/*!*/;
|
|
DELIMITER ;
|
|
# End of log file
|
|
ROLLBACK /* added by mysqlbinlog */;
|
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
|
--- Test 4 Second Remote test --
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
DROP TABLE t3;
|
|
connection slave;
|
|
stop slave;
|
|
include/wait_for_slave_to_stop.inc
|
|
connection master;
|
|
include/kill_binlog_dump_threads.inc
|
|
reset master;
|
|
connection slave;
|
|
include/reset_slave.inc
|
|
start slave;
|
|
include/wait_for_slave_to_start.inc
|
|
connection master;
|
|
SELECT COUNT(*) from t1;
|
|
COUNT(*)
|
|
352
|
|
SELECT COUNT(*) from t2;
|
|
COUNT(*)
|
|
500
|
|
SELECT COUNT(*) from t3;
|
|
COUNT(*)
|
|
500
|
|
SELECT * FROM t1 ORDER BY word LIMIT 5;
|
|
word
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
SELECT * FROM t2 ORDER BY id LIMIT 5;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
SELECT c1, c3, c4, c5 FROM t3 ORDER BY c1 LIMIT 5;
|
|
c1 c3 c4 c5
|
|
1 2006-02-22 00:00:00 Tested in Texas 2.2
|
|
2 2006-02-22 00:00:00 Tested in Texas 4.4
|
|
3 2006-02-22 00:00:00 Tested in Texas 6.6
|
|
4 2006-02-22 00:00:00 Tested in Texas 8.8
|
|
5 2006-02-22 00:00:00 Tested in Texas 11
|
|
connection slave;
|
|
SELECT COUNT(*) from t1;
|
|
COUNT(*)
|
|
352
|
|
SELECT COUNT(*) from t2;
|
|
COUNT(*)
|
|
500
|
|
SELECT COUNT(*) from t3;
|
|
COUNT(*)
|
|
500
|
|
SELECT * FROM t1 ORDER BY word LIMIT 5;
|
|
word
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
Aarhus
|
|
SELECT * FROM t2 ORDER BY id LIMIT 5;
|
|
id
|
|
1
|
|
2
|
|
3
|
|
4
|
|
5
|
|
SELECT c1, c3, c4, c5 FROM t3 ORDER BY c1 LIMIT 5;
|
|
c1 c3 c4 c5
|
|
1 2006-02-22 00:00:00 Tested in Texas 2.2
|
|
2 2006-02-22 00:00:00 Tested in Texas 4.4
|
|
3 2006-02-22 00:00:00 Tested in Texas 6.6
|
|
4 2006-02-22 00:00:00 Tested in Texas 8.8
|
|
5 2006-02-22 00:00:00 Tested in Texas 11
|
|
connection master;
|
|
--- Test 5 LOAD DATA --
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
|
/*!40019 SET @@session.max_delayed_threads=0*/;
|
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
|
DELIMITER /*!*/;
|
|
DELIMITER ;
|
|
# End of log file
|
|
ROLLBACK /* added by mysqlbinlog */;
|
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
|
--- Test 6 reading stdin --
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
|
/*!40019 SET @@session.max_delayed_threads=0*/;
|
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
|
DELIMITER /*!*/;
|
|
ROLLBACK/*!*/;
|
|
use `test`/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
SET @@session.pseudo_thread_id=999999999/*!*/;
|
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1, @@session.system_versioning_insert_history=0/*!*/;
|
|
SET @@session.sql_mode=1411383296/*!*/;
|
|
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
|
/*!\C latin1 *//*!*/;
|
|
SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
|
SET @@session.lc_time_names=0/*!*/;
|
|
SET @@session.collation_database=DEFAULT/*!*/;
|
|
CREATE TABLE t1(word VARCHAR(20))
|
|
/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
CREATE TABLE t2(id INT AUTO_INCREMENT NOT NULL PRIMARY KEY)
|
|
/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
|
|
/*!*/;
|
|
DELIMITER ;
|
|
# End of log file
|
|
ROLLBACK /* added by mysqlbinlog */;
|
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
|
--- Test 7 reading stdin w/position --
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;
|
|
/*!40019 SET @@session.max_delayed_threads=0*/;
|
|
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
|
|
DELIMITER /*!*/;
|
|
ROLLBACK/*!*/;
|
|
use `test`/*!*/;
|
|
SET TIMESTAMP=1000000000/*!*/;
|
|
SET @@session.pseudo_thread_id=999999999/*!*/;
|
|
SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1, @@session.check_constraint_checks=1, @@session.sql_if_exists=0, @@session.explicit_defaults_for_timestamp=1, @@session.system_versioning_insert_history=0/*!*/;
|
|
SET @@session.sql_mode=1411383296/*!*/;
|
|
SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;
|
|
/*!\C latin1 *//*!*/;
|
|
SET @@session.character_set_client=latin1,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
|
|
SET @@session.lc_time_names=0/*!*/;
|
|
SET @@session.collation_database=DEFAULT/*!*/;
|
|
CREATE TABLE t3(c1 INT NOT NULL PRIMARY KEY, c2 LONGBLOB, c3 TIMESTAMP, c4 TEXT, c5 FLOAT)
|
|
/*!*/;
|
|
DELIMITER ;
|
|
# End of log file
|
|
ROLLBACK /* added by mysqlbinlog */;
|
|
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
|
|
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;
|
|
--- Test 8 switch internal charset --
|
|
connection slave;
|
|
stop slave;
|
|
include/wait_for_slave_to_stop.inc
|
|
connection master;
|
|
include/kill_binlog_dump_threads.inc
|
|
reset master;
|
|
connection slave;
|
|
include/reset_slave.inc
|
|
start slave;
|
|
include/wait_for_slave_to_start.inc
|
|
connection master;
|
|
create table t4 (f text character set utf8);
|
|
create table t5 (f text character set cp932);
|
|
flush logs;
|
|
rename table t4 to t04, t5 to t05;
|
|
select HEX(f) from t04;
|
|
HEX(f)
|
|
E382BD
|
|
select HEX(f) from t4;
|
|
HEX(f)
|
|
E382BD
|
|
select HEX(f) from t05;
|
|
HEX(f)
|
|
835C
|
|
select HEX(f) from t5;
|
|
HEX(f)
|
|
835C
|
|
connection slave;
|
|
select HEX(f) from t04;
|
|
HEX(f)
|
|
E382BD
|
|
select HEX(f) from t4;
|
|
HEX(f)
|
|
E382BD
|
|
select HEX(f) from t05;
|
|
HEX(f)
|
|
835C
|
|
select HEX(f) from t5;
|
|
HEX(f)
|
|
835C
|
|
--- Test cleanup --
|
|
connection master;
|
|
connection slave;
|
|
connection master;
|
|
DROP TABLE t1, t2, t3, t04, t05, t4, t5;
|
|
CREATE TABLE t1 (a INT NOT NULL KEY, b INT);
|
|
INSERT INTO t1 VALUES(1,1);
|
|
SELECT * FROM t1;
|
|
a b
|
|
1 1
|
|
FLUSH LOGS;
|
|
DROP TABLE t1;
|
|
connection slave;
|
|
include/rpl_end.inc
|