mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
automatic merge with 5.1
This commit is contained in:
@ -241,3 +241,59 @@ DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
SET SQL_MODE='';
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# Bug#54201: "SET INSERT_ID" event must be ignored if corresponding event is
|
||||
# ignored.
|
||||
#
|
||||
connection master;
|
||||
|
||||
CREATE TABLE t1(s VARCHAR(10)) ENGINE=myisam;
|
||||
# -slave.opt has --replicate-ignore-table=test.t_ignored1
|
||||
CREATE TABLE t_ignored1(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||
|
||||
connection slave;
|
||||
|
||||
CREATE TABLE test.slave_only(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||
INSERT INTO slave_only VALUES(NULL);
|
||||
CREATE TRIGGER t1_update AFTER UPDATE ON t1 FOR EACH ROW INSERT INTO slave_only VALUES(NULL);
|
||||
|
||||
connection master;
|
||||
|
||||
INSERT INTO t_ignored1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES('s');
|
||||
UPDATE t1 SET s='s1';
|
||||
|
||||
# With Bug#54201, slave stops with duplicate key error here due to trigger
|
||||
# using the insert_id from insert on master into t1_ignored1
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM t1;
|
||||
|
||||
connection master;
|
||||
CREATE TABLE t_ignored2(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
STOP SLAVE;
|
||||
# Ignore the next INSERT into t_ignored2 and the INSERT_ID event just before it.
|
||||
SET GLOBAL sql_slave_skip_counter = 2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t_ignored2 VALUES(NULL);
|
||||
UPDATE t1 SET s='s2';
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
SELECT * FROM t1;
|
||||
SHOW TABLES LIKE 't\_ignored_';
|
||||
SELECT * FROM t_ignored2;
|
||||
DROP TABLE slave_only;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t_ignored1;
|
||||
DROP TABLE t_ignored2;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
@ -73,6 +73,7 @@ UNLOCK TABLES;
|
||||
|
||||
-- connection con2
|
||||
-- reap
|
||||
-- error 0, 1205
|
||||
UNLOCK TABLES;
|
||||
|
||||
-- connection con3
|
||||
|
@ -312,3 +312,32 @@ Comparing tables master:test.t2 and slave:test.t2
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
SET SQL_MODE='';
|
||||
CREATE TABLE t1(s VARCHAR(10)) ENGINE=myisam;
|
||||
CREATE TABLE t_ignored1(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||
CREATE TABLE test.slave_only(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||
INSERT INTO slave_only VALUES(NULL);
|
||||
CREATE TRIGGER t1_update AFTER UPDATE ON t1 FOR EACH ROW INSERT INTO slave_only VALUES(NULL);
|
||||
INSERT INTO t_ignored1 VALUES(NULL);
|
||||
INSERT INTO t1 VALUES('s');
|
||||
UPDATE t1 SET s='s1';
|
||||
SELECT * FROM t1;
|
||||
s
|
||||
s1
|
||||
CREATE TABLE t_ignored2(id INT AUTO_INCREMENT PRIMARY KEY) ENGINE=myisam;
|
||||
STOP SLAVE;
|
||||
SET GLOBAL sql_slave_skip_counter = 2;
|
||||
START SLAVE;
|
||||
INSERT INTO t_ignored2 VALUES(NULL);
|
||||
UPDATE t1 SET s='s2';
|
||||
SELECT * FROM t1;
|
||||
s
|
||||
s2
|
||||
SHOW TABLES LIKE 't\_ignored_';
|
||||
Tables_in_test (t\_ignored_)
|
||||
t_ignored2
|
||||
SELECT * FROM t_ignored2;
|
||||
id
|
||||
DROP TABLE slave_only;
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t_ignored1;
|
||||
DROP TABLE t_ignored2;
|
||||
|
1
mysql-test/suite/rpl/t/rpl_auto_increment-slave.opt
Normal file
1
mysql-test/suite/rpl/t/rpl_auto_increment-slave.opt
Normal file
@ -0,0 +1 @@
|
||||
--replicate-ignore-table=test.t_ignored1
|
@ -3307,6 +3307,19 @@ START SLAVE; . Query: '%s'", expected_error, thd->query());
|
||||
/* If the query was not ignored, it is printed to the general log */
|
||||
if (!thd->is_error() || thd->main_da.sql_errno() != ER_SLAVE_IGNORED_TABLE)
|
||||
general_log_write(thd, COM_QUERY, thd->query(), thd->query_length());
|
||||
else
|
||||
{
|
||||
/*
|
||||
Bug#54201: If we skip an INSERT query that uses auto_increment, then we
|
||||
should reset any @@INSERT_ID set by an Intvar_log_event associated with
|
||||
the query; otherwise the @@INSERT_ID will linger until the next INSERT
|
||||
that uses auto_increment and may affect extra triggers on the slave etc.
|
||||
|
||||
We reset INSERT_ID unconditionally; it is probably cheaper than
|
||||
checking if it is necessary.
|
||||
*/
|
||||
thd->auto_inc_intervals_forced.empty();
|
||||
}
|
||||
|
||||
compare_errors:
|
||||
|
||||
|
@ -247,10 +247,11 @@ rw_lock_create_func(
|
||||
|
||||
lock->mutex.cmutex_name = cmutex_name;
|
||||
ut_d(lock->mutex.mutex_type = 1);
|
||||
#else /* INNODB_RW_LOCKS_USE_ATOMICS */
|
||||
#endif /* INNODB_RW_LOCKS_USE_ATOMICS */
|
||||
#if defined(INNODB_RW_LOCKS_USE_ATOMICS) || !defined(UNIV_DEBUG)
|
||||
(void) cfile_name;
|
||||
(void) cline;
|
||||
#endif /* INNODB_RW_LOCKS_USE_ATOMICS */
|
||||
#endif
|
||||
|
||||
lock->lock_word = X_LOCK_DECR;
|
||||
lock->waiters = 0;
|
||||
|
Reference in New Issue
Block a user