mirror of
https://github.com/MariaDB/server.git
synced 2025-08-08 11:22:35 +03:00
Merge branch '10.3' into 10.4
This commit is contained in:
16
mysql-test/suite/rpl/r/rpl_empty_string_is_null.result
Normal file
16
mysql-test/suite/rpl/r/rpl_empty_string_is_null.result
Normal file
@@ -0,0 +1,16 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
#
|
||||
# MDEV-18918 SQL mode EMPTY_STRING_IS_NULL breaks RBR upon CREATE TABLE .. SELECT
|
||||
#
|
||||
SET SQL_MODE= 'EMPTY_STRING_IS_NULL';
|
||||
CREATE TABLE t1 AS SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE 1 = 0;
|
||||
connection slave;
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`TABLE_NAME` varchar(64) CHARACTER SET utf8 NOT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
include/rpl_end.inc
|
@@ -0,0 +1,40 @@
|
||||
include/master-slave.inc
|
||||
[connection master]
|
||||
connection slave;
|
||||
include/stop_slave.inc
|
||||
SET @save_dbug= @@GLOBAL.debug_dbug;
|
||||
SET @@global.debug_dbug="+d,pause_sql_thread_on_fde";
|
||||
include/start_slave.inc
|
||||
# Future events must be logged at least 2 seconds after
|
||||
# the slave starts
|
||||
connection master;
|
||||
# Write events to ensure slave will be consistent with master
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1);
|
||||
# Flush logs on master forces slave to generate a Format description
|
||||
# event in its relay log
|
||||
flush logs;
|
||||
connection slave;
|
||||
# Ignore FDEs that happen before the CREATE/INSERT commands
|
||||
SET DEBUG_SYNC='now WAIT_FOR paused_on_fde';
|
||||
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||
SET DEBUG_SYNC='now WAIT_FOR paused_on_fde';
|
||||
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||
# On the next FDE, the slave should have the master CREATE/INSERT events
|
||||
SET DEBUG_SYNC='now WAIT_FOR paused_on_fde';
|
||||
select count(*)=1 from t1;
|
||||
count(*)=1
|
||||
1
|
||||
# The relay log FDE has been processed - here we check to ensure it was
|
||||
# not considered in Seconds_Behind_Master calculation
|
||||
connection slave1;
|
||||
# Safely resume slave SQL thread
|
||||
SET @@global.debug_dbug='';
|
||||
SET DEBUG_SYNC='pause_sql_thread_on_fde CLEAR';
|
||||
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||
SET DEBUG_SYNC='RESET';
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
connection slave;
|
||||
SET @@global.debug_dbug=$save_dbug;
|
||||
include/rpl_end.inc
|
15
mysql-test/suite/rpl/t/rpl_empty_string_is_null.test
Normal file
15
mysql-test/suite/rpl/t/rpl_empty_string_is_null.test
Normal file
@@ -0,0 +1,15 @@
|
||||
--source include/master-slave.inc
|
||||
--source include/have_binlog_format_row.inc
|
||||
|
||||
--echo #
|
||||
--echo # MDEV-18918 SQL mode EMPTY_STRING_IS_NULL breaks RBR upon CREATE TABLE .. SELECT
|
||||
--echo #
|
||||
|
||||
SET SQL_MODE= 'EMPTY_STRING_IS_NULL';
|
||||
CREATE TABLE t1 AS SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE 1 = 0;
|
||||
--sync_slave_with_master
|
||||
SHOW CREATE TABLE t1;
|
||||
--connection master
|
||||
DROP TABLE t1;
|
||||
|
||||
--source include/rpl_end.inc
|
88
mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test
Normal file
88
mysql-test/suite/rpl/t/rpl_seconds_behind_master_spike.test
Normal file
@@ -0,0 +1,88 @@
|
||||
#
|
||||
# Purpose:
|
||||
# This test validates that a slave's relay log format description event is
|
||||
# not used to calculate the Seconds_Behind_Master time displayed by
|
||||
# SHOW SLAVE STATUS.
|
||||
#
|
||||
# Methodology:
|
||||
# Ensure that a slave's reported Seconds_Behind_Master does not point before
|
||||
# a time in which we can prove that it has progressed beyond. The slave's
|
||||
# relay log events are created using the timestamp at which the IO thread was
|
||||
# created. Therefore, after starting the slave's IO thread, we sleep so any
|
||||
# proceeding events are forced to have later timestamps. After sleeping, we run
|
||||
# MDL statements on the master and save the time at which they are binlogged.
|
||||
# Once the slave executes these MDL commands, we have proven that the slave has
|
||||
# caught up to this saved timestamp. At this point, if the value of
|
||||
# Seconds_Behind_Master points before the time in which the MDL events were
|
||||
# logged, it is invalid.
|
||||
#
|
||||
# References:
|
||||
# MDEV-16091: Seconds_Behind_Master spikes to millions of seconds
|
||||
#
|
||||
--source include/have_debug.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/master-slave.inc
|
||||
|
||||
--connection slave
|
||||
--source include/stop_slave.inc
|
||||
SET @save_dbug= @@GLOBAL.debug_dbug;
|
||||
SET @@global.debug_dbug="+d,pause_sql_thread_on_fde";
|
||||
--source include/start_slave.inc
|
||||
|
||||
--let $sleep_time=2
|
||||
--echo # Future events must be logged at least $sleep_time seconds after
|
||||
--echo # the slave starts
|
||||
--sleep $sleep_time
|
||||
|
||||
--connection master
|
||||
--echo # Write events to ensure slave will be consistent with master
|
||||
create table t1 (a int);
|
||||
insert into t1 values (1);
|
||||
--let $t_master_events_logged= `SELECT UNIX_TIMESTAMP()`
|
||||
|
||||
--echo # Flush logs on master forces slave to generate a Format description
|
||||
--echo # event in its relay log
|
||||
flush logs;
|
||||
|
||||
--connection slave
|
||||
--echo # Ignore FDEs that happen before the CREATE/INSERT commands
|
||||
SET DEBUG_SYNC='now WAIT_FOR paused_on_fde';
|
||||
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||
SET DEBUG_SYNC='now WAIT_FOR paused_on_fde';
|
||||
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||
|
||||
--echo # On the next FDE, the slave should have the master CREATE/INSERT events
|
||||
SET DEBUG_SYNC='now WAIT_FOR paused_on_fde';
|
||||
select count(*)=1 from t1;
|
||||
|
||||
--echo # The relay log FDE has been processed - here we check to ensure it was
|
||||
--echo # not considered in Seconds_Behind_Master calculation
|
||||
--connection slave1
|
||||
let $sbm= query_get_value(SHOW SLAVE STATUS, Seconds_Behind_Master, 1);
|
||||
--let $t_now= `SELECT UNIX_TIMESTAMP()`
|
||||
|
||||
# Ensure Seconds_Behind_Master does not point beyond when we have proven the
|
||||
# events we have proven to have executed. The extra second is needed as a
|
||||
# buffer because the recorded times are not exact with when the events were
|
||||
# recorded on the master.
|
||||
if(`select $sbm > $t_now - $t_master_events_logged + 1`)
|
||||
{
|
||||
die "A relay log event was incorrectly used to set Seconds_Behind_Master";
|
||||
}
|
||||
|
||||
--echo # Safely resume slave SQL thread
|
||||
SET @@global.debug_dbug='';
|
||||
SET DEBUG_SYNC='pause_sql_thread_on_fde CLEAR';
|
||||
SET DEBUG_SYNC='now SIGNAL sql_thread_continue';
|
||||
|
||||
# Reset last sql_thread_continue signal
|
||||
SET DEBUG_SYNC='RESET';
|
||||
|
||||
# Cleanup
|
||||
--connection master
|
||||
DROP TABLE t1;
|
||||
|
||||
--connection slave
|
||||
SET @@global.debug_dbug=$save_dbug;
|
||||
|
||||
--source include/rpl_end.inc
|
Reference in New Issue
Block a user