Bug#48308
Merge mysql-trunk-bugfixing -> mysql-next-mr-bugfixing
This commit is contained in:
commit
775fd3ec71
@ -12,5 +12,9 @@
|
|||||||
remove_file $_fake_relay_log;
|
remove_file $_fake_relay_log;
|
||||||
remove_file $_fake_relay_index;
|
remove_file $_fake_relay_index;
|
||||||
--disable_query_log
|
--disable_query_log
|
||||||
|
--disable_warnings
|
||||||
|
STOP SLAVE SQL_THREAD;
|
||||||
|
RESET SLAVE;
|
||||||
eval SET @@global.relay_log_purge= $_fake_relay_log_purge;
|
eval SET @@global.relay_log_purge= $_fake_relay_log_purge;
|
||||||
|
--enable_warnings
|
||||||
--enable_query_log
|
--enable_query_log
|
||||||
|
@ -66,8 +66,16 @@ let $_fake_relay_index= $MYSQLD_DATADIR/$_fake_filename.index;
|
|||||||
# CHANGE MASTER modifies it (see the manual for CHANGE MASTER).
|
# CHANGE MASTER modifies it (see the manual for CHANGE MASTER).
|
||||||
let $_fake_relay_log_purge= `SELECT @@global.relay_log_purge`;
|
let $_fake_relay_log_purge= `SELECT @@global.relay_log_purge`;
|
||||||
|
|
||||||
|
# Reset slave and remove relay log and index files if they exist
|
||||||
|
RESET SLAVE;
|
||||||
|
error 0,1;
|
||||||
|
remove_file $MYSQLD_DATADIR/$_fake_filename.000001;
|
||||||
|
error 0,1;
|
||||||
|
remove_file $MYSQLD_DATADIR/$_fake_filename.index;
|
||||||
|
|
||||||
# Create relay log file.
|
# Create relay log file.
|
||||||
copy_file $fake_relay_log $_fake_relay_log;
|
copy_file $fake_relay_log $_fake_relay_log;
|
||||||
|
|
||||||
# Create relay log index.
|
# Create relay log index.
|
||||||
|
|
||||||
# After patch for BUG#12190, the filename used in CHANGE MASTER
|
# After patch for BUG#12190, the filename used in CHANGE MASTER
|
||||||
@ -77,28 +85,12 @@ copy_file $fake_relay_log $_fake_relay_log;
|
|||||||
|
|
||||||
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 0`)
|
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 0`)
|
||||||
{
|
{
|
||||||
-- let $_index_entry= ./$_fake_filename-fake.000001
|
eval select './$_fake_filename-fake.000001\n' into dumpfile '$_fake_relay_index';
|
||||||
}
|
}
|
||||||
|
|
||||||
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") != 0`)
|
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") != 0`)
|
||||||
{
|
{
|
||||||
-- let $_index_entry= .\\\\$_fake_filename-fake.000001
|
eval select '.\\\\$_fake_filename-fake.000001\n' into dumpfile '$_fake_relay_index';
|
||||||
}
|
|
||||||
|
|
||||||
if (`SELECT LENGTH(@@secure_file_priv) > 0`)
|
|
||||||
{
|
|
||||||
-- let $_file_priv_dir= `SELECT @@secure_file_priv`;
|
|
||||||
-- let $_suffix= `SELECT UUID()`
|
|
||||||
-- let $_tmp_file= $_file_priv_dir/fake-index.$_suffix
|
|
||||||
|
|
||||||
-- eval select '$_index_entry\n' into dumpfile '$_tmp_file'
|
|
||||||
-- copy_file $_tmp_file $_fake_relay_index
|
|
||||||
-- remove_file $_tmp_file
|
|
||||||
}
|
|
||||||
|
|
||||||
if (`SELECT LENGTH(@@secure_file_priv) = 0`)
|
|
||||||
{
|
|
||||||
-- eval select '$_index_entry\n' into dumpfile '$_fake_relay_index'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Setup replication from existing relay log.
|
# Setup replication from existing relay log.
|
||||||
|
@ -1,74 +0,0 @@
|
|||||||
# BUG#33029 5.0 to 5.1 replication fails on dup key when inserting
|
|
||||||
# using a trig in SP
|
|
||||||
|
|
||||||
# For all 5.0 up to 5.0.58 exclusive, and 5.1 up to 5.1.12 exclusive,
|
|
||||||
# if one statement in a SP generated AUTO_INCREMENT value by the top
|
|
||||||
# statement, all statements after it would be considered generated
|
|
||||||
# AUTO_INCREMENT value by the top statement, and a erroneous INSERT_ID
|
|
||||||
# value might be associated with these statement, which could cause
|
|
||||||
# duplicate entry error and stop the slave.
|
|
||||||
|
|
||||||
# Test if the slave can replicate from such a buggy master
|
|
||||||
|
|
||||||
# The bug33029-slave-relay-bin.000001 file is the
|
|
||||||
# slave-replay-bin.000003 file generated by run the
|
|
||||||
# rpl_auto_increment_bug33029.test with clean up statements at the end
|
|
||||||
# of the test case removed on a buggy 5.0 server
|
|
||||||
|
|
||||||
source include/have_log_bin.inc;
|
|
||||||
|
|
||||||
# Need to restore this at the end; CHANGE MASTER modifies it (see the
|
|
||||||
# manual for CHANGE MASTER).
|
|
||||||
SET @old_relay_log_purge= @@global.relay_log_purge;
|
|
||||||
|
|
||||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
||||||
|
|
||||||
copy_file $MYSQL_TEST_DIR/std_data/bug33029-slave-relay-bin.000001 $MYSQLD_DATADIR/slave-relay-bin.000001;
|
|
||||||
|
|
||||||
|
|
||||||
# After patch for BUG#12190, the filename used in CHANGE MASTER
|
|
||||||
# RELAY_LOG_FILE will be automatically added the directory of the
|
|
||||||
# relay log before comparison, thus we need to added the directory
|
|
||||||
# part (./ on unix .\ on windows) when faking the relay-log-bin.index.
|
|
||||||
disable_query_log;
|
|
||||||
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") = 0`)
|
|
||||||
{
|
|
||||||
eval select './slave-relay-bin.000001\n' into dumpfile '$MYSQLD_DATADIR/slave-relay-bin.index';
|
|
||||||
}
|
|
||||||
|
|
||||||
if (`select convert(@@version_compile_os using latin1) IN ("Win32","Win64","Windows") != 0`)
|
|
||||||
{
|
|
||||||
eval select '.\\\\slave-relay-bin.000001\n' into dumpfile '$MYSQLD_DATADIR/slave-relay-bin.index';
|
|
||||||
}
|
|
||||||
enable_query_log;
|
|
||||||
|
|
||||||
change master to
|
|
||||||
MASTER_HOST='dummy.localdomain',
|
|
||||||
RELAY_LOG_FILE='slave-relay-bin.000001',
|
|
||||||
RELAY_LOG_POS=4;
|
|
||||||
|
|
||||||
start slave sql_thread;
|
|
||||||
disable_result_log;
|
|
||||||
select MASTER_POS_WAIT('master-bin.000001', 3776);
|
|
||||||
enable_result_log;
|
|
||||||
|
|
||||||
echo # Result on slave;
|
|
||||||
SELECT * FROM t1;
|
|
||||||
SELECT * FROM t2;
|
|
||||||
|
|
||||||
# clean up
|
|
||||||
disable_warnings;
|
|
||||||
DROP TABLE IF EXISTS t1, t2;
|
|
||||||
DROP PROCEDURE IF EXISTS p1;
|
|
||||||
DROP PROCEDURE IF EXISTS p2;
|
|
||||||
DROP FUNCTION IF EXISTS f1;
|
|
||||||
DROP TRIGGER IF EXISTS tr1;
|
|
||||||
enable_warnings;
|
|
||||||
|
|
||||||
stop slave sql_thread;
|
|
||||||
reset slave;
|
|
||||||
source include/wait_for_slave_sql_to_stop.inc;
|
|
||||||
remove_file $MYSQLD_DATADIR/slave-relay-bin.000001;
|
|
||||||
remove_file $MYSQLD_DATADIR/slave-relay-bin.index;
|
|
||||||
|
|
||||||
SET @@global.relay_log_purge= @old_relay_log_purge;
|
|
@ -1,8 +1,4 @@
|
|||||||
SET @old_relay_log_purge= @@global.relay_log_purge;
|
Setting up fake replication from MYSQL_TEST_DIR/std_data/bug33029-slave-relay-bin.000001
|
||||||
change master to
|
|
||||||
MASTER_HOST='dummy.localdomain',
|
|
||||||
RELAY_LOG_FILE='slave-relay-bin.000001',
|
|
||||||
RELAY_LOG_POS=4;
|
|
||||||
start slave sql_thread;
|
start slave sql_thread;
|
||||||
select MASTER_POS_WAIT('master-bin.000001', 3776);
|
select MASTER_POS_WAIT('master-bin.000001', 3776);
|
||||||
# Result on slave
|
# Result on slave
|
||||||
@ -38,5 +34,4 @@ DROP PROCEDURE IF EXISTS p2;
|
|||||||
DROP FUNCTION IF EXISTS f1;
|
DROP FUNCTION IF EXISTS f1;
|
||||||
DROP TRIGGER IF EXISTS tr1;
|
DROP TRIGGER IF EXISTS tr1;
|
||||||
stop slave sql_thread;
|
stop slave sql_thread;
|
||||||
reset slave;
|
Cleaning up after setup_fake_relay_log.inc
|
||||||
SET @@global.relay_log_purge= @old_relay_log_purge;
|
|
42
mysql-test/suite/rpl/t/rpl_binlog_auto_inc_bug33029.test
Normal file
42
mysql-test/suite/rpl/t/rpl_binlog_auto_inc_bug33029.test
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
# BUG#33029 5.0 to 5.1 replication fails on dup key when inserting
|
||||||
|
# using a trig in SP
|
||||||
|
|
||||||
|
# For all 5.0 up to 5.0.58 exclusive, and 5.1 up to 5.1.12 exclusive,
|
||||||
|
# if one statement in a SP generated AUTO_INCREMENT value by the top
|
||||||
|
# statement, all statements after it would be considered generated
|
||||||
|
# AUTO_INCREMENT value by the top statement, and a erroneous INSERT_ID
|
||||||
|
# value might be associated with these statement, which could cause
|
||||||
|
# duplicate entry error and stop the slave.
|
||||||
|
|
||||||
|
# Test if the slave can replicate from such a buggy master
|
||||||
|
|
||||||
|
# The bug33029-slave-relay-bin.000001 file is the
|
||||||
|
# slave-replay-bin.000003 file generated by run the
|
||||||
|
# rpl_auto_increment_bug33029.test with clean up statements at the end
|
||||||
|
# of the test case removed on a buggy 5.0 server
|
||||||
|
|
||||||
|
source include/have_log_bin.inc;
|
||||||
|
|
||||||
|
let $fake_relay_log= $MYSQL_TEST_DIR/std_data/bug33029-slave-relay-bin.000001;
|
||||||
|
source include/setup_fake_relay_log.inc;
|
||||||
|
|
||||||
|
start slave sql_thread;
|
||||||
|
disable_result_log;
|
||||||
|
select MASTER_POS_WAIT('master-bin.000001', 3776);
|
||||||
|
enable_result_log;
|
||||||
|
|
||||||
|
echo # Result on slave;
|
||||||
|
SELECT * FROM t1;
|
||||||
|
SELECT * FROM t2;
|
||||||
|
|
||||||
|
# clean up
|
||||||
|
disable_warnings;
|
||||||
|
DROP TABLE IF EXISTS t1, t2;
|
||||||
|
DROP PROCEDURE IF EXISTS p1;
|
||||||
|
DROP PROCEDURE IF EXISTS p2;
|
||||||
|
DROP FUNCTION IF EXISTS f1;
|
||||||
|
DROP TRIGGER IF EXISTS tr1;
|
||||||
|
enable_warnings;
|
||||||
|
|
||||||
|
stop slave sql_thread;
|
||||||
|
source include/cleanup_fake_relay_log.inc;
|
Loading…
x
Reference in New Issue
Block a user