mirror of
https://github.com/MariaDB/server.git
synced 2025-11-25 17:25:02 +03:00
Fix rpl_skip_error test. We cant reset Slave_skipped_errors(even with FLUSH STATUS), So instead of absolute slave_skipped_errors we look for delta of slave_skipped_errors Fix rpl.rpl_binlog_errors and binlog_encryption.rpl_binlog_errors We create the $load_file and $load_file2 but we never remove them. Fix rpl_000011.test Instead of real value use delta value , Since flush status wont flush LONGLONG variable. Fix rpl_row_find_row_debug Instead of searching whole log_error_ file we will use search_pattern_in_file which runs pattern search only on latest test run , instead of full file. Fix rpl_ip_mix rpl_ip_mix2 We should call reset slave all because we also want to reset master_host otherwise show slave status wont be empty and making repeat N a failure. Fix rpl_rotate_logs First we have to remove master.info file (cleanup) and second we have to call reset slave all because if we do not call reset slave all then we wont read master.info file beacuse we already have master config in memory. And this makes start slave to pass , which shoud fail becuase its permision is 000 Fix circular_serverid0 test The reason is that ++dbug_rows_event_count == 2 in queue_event does not take --repeat into account. So I have reseted the dbug_rows_event_count in if body.
176 lines
4.8 KiB
Plaintext
176 lines
4.8 KiB
Plaintext
# ==== Purpose ====
|
|
#
|
|
# Verify that --slave-skip-errors works correctly. The error messages
|
|
# specified by --slave-skip-errors on slave should be ignored. If
|
|
# such errors occur, they should not be reported and not cause the
|
|
# slave to stop.
|
|
#
|
|
# ==== Method ====
|
|
#
|
|
# We run the slave with --slave-skip-errors=1062 (the code for
|
|
# duplicate key). Then we have two set of tests. In the first
|
|
# set, we insert value 1 in a table on the slave, and then, on
|
|
# master, we insert value 1 in the table. In the second set, we
|
|
# insert several values on the master, disable the binlog and
|
|
# delete one of the values and re-enable the binlog. Right after,
|
|
# we perform an update on the set of values in order to generate
|
|
# a duplicate key on the slave. The errors should be ignored on
|
|
# the slave.
|
|
#
|
|
# ==== Related bugs ====
|
|
#
|
|
# BUG#28839: Errors in strict mode silently stop SQL thread if --slave-skip-errors exists
|
|
# bug in this test: BUG#30594: rpl.rpl_skip_error is nondeterministic:
|
|
# BUG#39393: slave-skip-errors does not work when using ROW based replication
|
|
|
|
source include/have_innodb.inc;
|
|
source include/master-slave.inc;
|
|
|
|
--connection slave
|
|
let $initial_skipped_error= query_get_value(show global status like "Slave_skipped_errors", Value, 1);
|
|
|
|
connection master;
|
|
--echo ==== Test Without sql_mode=strict_trans_tables ====
|
|
|
|
create table t1 (n int not null primary key);
|
|
|
|
sync_slave_with_master;
|
|
insert into t1 values (1);
|
|
|
|
connection master;
|
|
# Here we expect (ignored) error, since 1 is already in slave table
|
|
insert into t1 values (1);
|
|
# These should work fine
|
|
insert into t1 values (2),(3);
|
|
|
|
sync_slave_with_master;
|
|
select * from t1 order by n;
|
|
|
|
--echo ==== Test With sql_mode=strict_trans_tables ====
|
|
insert into t1 values (7),(8);
|
|
connection master;
|
|
set sql_mode=strict_trans_tables;
|
|
insert into t1 values (7), (8), (9);
|
|
sync_slave_with_master;
|
|
select * from t1 order by n;
|
|
source include/check_slave_is_running.inc;
|
|
|
|
--echo ==== Clean Up ====
|
|
connection master;
|
|
drop table t1;
|
|
sync_slave_with_master;
|
|
# End of 4.1 tests
|
|
|
|
#
|
|
# #28839 Errors in strict mode silently stop SQL thread if --slave-skip-errors exists
|
|
#
|
|
connection master;
|
|
create table t1(a int primary key);
|
|
insert into t1 values (1),(2);
|
|
SET SQL_LOG_BIN=0;
|
|
delete from t1;
|
|
SET SQL_LOG_BIN=1;
|
|
set sql_mode=strict_trans_tables;
|
|
insert into t1 values (1), (2), (3);
|
|
|
|
sync_slave_with_master;
|
|
select * from t1;
|
|
source include/check_slave_is_running.inc;
|
|
|
|
|
|
--echo ==== Clean Up ====
|
|
|
|
connection master;
|
|
drop table t1;
|
|
sync_slave_with_master;
|
|
# End of 5.0 tests
|
|
|
|
#
|
|
# BUG#39393: slave-skip-errors does not work when using ROW based replication
|
|
#
|
|
--echo ==== Using Innodb ====
|
|
|
|
connection master;
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
CREATE TABLE t1(id INT NOT NULL PRIMARY KEY, data INT) Engine=InnoDB;
|
|
SHOW CREATE TABLE t1;
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
connection slave;
|
|
|
|
call mtr.add_suppression("Slave SQL.*Could not execute .*te_rows event on table test.t.; Duplicate entry.* error.* 1062");
|
|
|
|
CREATE TABLE t1(id INT NOT NULL PRIMARY KEY, data INT) Engine=InnoDB;
|
|
SHOW CREATE TABLE t1;
|
|
|
|
connection master;
|
|
|
|
INSERT INTO t1 VALUES(1, 1);
|
|
INSERT INTO t1 VALUES(2, 1);
|
|
INSERT INTO t1 VALUES(3, 1);
|
|
INSERT INTO t1 VALUES(4, 1);
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
DELETE FROM t1 WHERE id = 4;
|
|
SET SQL_LOG_BIN=1;
|
|
UPDATE t1 SET id= id + 3, data = 2;
|
|
|
|
sync_slave_with_master;
|
|
|
|
let $error= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
|
|
echo $error;
|
|
|
|
--echo **** We cannot execute a select as there are differences in the
|
|
--echo **** behavior between STMT and RBR.
|
|
|
|
--echo ==== Using MyIsam ====
|
|
|
|
connection master;
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
CREATE TABLE t2(id INT NOT NULL PRIMARY KEY, data INT) Engine=MyIsam;
|
|
SHOW CREATE TABLE t2;
|
|
SET SQL_LOG_BIN=1;
|
|
|
|
connection slave;
|
|
|
|
CREATE TABLE t2(id INT NOT NULL PRIMARY KEY, data INT) Engine=MyIsam;
|
|
SHOW CREATE TABLE t2;
|
|
let $current_skipped_error= query_get_value(show global status like "Slave_skipped_errors", Value, 1);
|
|
--let $delta_skipped_error= `select $current_skipped_error - $initial_skipped_error from dual`
|
|
--echo # Slave_skipped_errros = $delta_skipped_error
|
|
connection master;
|
|
|
|
INSERT INTO t2 VALUES(1, 1);
|
|
INSERT INTO t2 VALUES(2, 1);
|
|
INSERT INTO t2 VALUES(3, 1);
|
|
INSERT INTO t2 VALUES(5, 1);
|
|
|
|
SET SQL_LOG_BIN=0;
|
|
DELETE FROM t2 WHERE id = 5;
|
|
SET SQL_LOG_BIN=1;
|
|
UPDATE t2 SET id= id + 3, data = 2;
|
|
|
|
sync_slave_with_master;
|
|
|
|
let $error= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
|
|
echo $error;
|
|
|
|
let $current_skipped_error= query_get_value(show global status like "Slave_skipped_errors", Value, 1);
|
|
--let $delta_skipped_error= `select $current_skipped_error - $initial_skipped_error from dual`
|
|
--echo # Slave_skipped_errros = $delta_skipped_error
|
|
|
|
--echo **** We cannot execute a select as there are differences in the
|
|
--echo **** behavior between STMT and RBR.
|
|
|
|
--echo ==== Clean Up ====
|
|
|
|
connection master;
|
|
|
|
DROP TABLE t1;
|
|
DROP TABLE t2;
|
|
|
|
sync_slave_with_master;
|
|
--source include/rpl_end.inc
|