Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
M
mariadb
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
mariadb
Commits
1666ecf0
Commit
1666ecf0
authored
Dec 21, 2007
by
mats@capulet.kindahl.net
Browse files
Options
Browse Files
Download
Plain Diff
Merge capulet.kindahl.net:/home/mats/devel/b12691-mysql-5.0-rpl
into capulet.kindahl.net:/home/mats/devel/fix-mysql-5.0-rpl
parents
c2f00cc3
f1c32705
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
271 additions
and
7 deletions
+271
-7
mysql-test/r/rpl_slave_skip.result
mysql-test/r/rpl_slave_skip.result
+101
-3
mysql-test/t/rpl_slave_skip.test
mysql-test/t/rpl_slave_skip.test
+166
-3
sql/slave.cc
sql/slave.cc
+4
-1
No files found.
mysql-test/r/rpl_slave_skip.result
View file @
1666ecf0
...
...
@@ -5,8 +5,10 @@ reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
**** On Master ****
CREATE TABLE t1 (a INT, b SET('master','slave')) ENGINE=INNODB;
CREATE TABLE t2 (a INT, b SET('master','slave')) ENGINE=MYISAM;
CREATE TABLE t1 (a INT, b SET('master','slave')) ENGINE=InnoDB;
CREATE TABLE t2 (a INT, b SET('master','slave')) ENGINE=MyISAM;
CREATE TABLE t3 (a CHAR(20), b SET('master','slave')) ENGINE=InnoDB;
CREATE TABLE t4 (a CHAR(20), b SET('master','slave')) ENGINE=MyISAM;
==== Skipping normal transactions ====
**** On Slave ****
STOP SLAVE;
...
...
@@ -139,6 +141,102 @@ a b
SELECT * FROM t2 ORDER BY a;
a b
5 master,slave
==== Skipping first event of a LOAD DATA for a transactional table ====
**** On Slave ****
STOP SLAVE;
**** On Master ****
SET AUTOCOMMIT=1;
LOAD DATA INFILE '../std_data_ln/words.dat' INTO TABLE t3(a) SET b = 'master';
INSERT INTO t3 VALUES ('Go Rin No Sho', 'master,slave');
SELECT COUNT(*) FROM t3;
COUNT(*)
71
**** On Slave ****
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
-- Should only contain records marked 'master,slave'
SELECT * FROM t3 ORDER BY a;
a b
Go Rin No Sho master,slave
**** On Master ****
DELETE FROM t3;
==== Skipping first event of a LOAD DATA for a non-transactional table ====
**** On Slave ****
STOP SLAVE;
**** On Master ****
SET AUTOCOMMIT=1;
LOAD DATA INFILE '../std_data_ln/words.dat' INTO TABLE t4(a) SET b = 'master';
INSERT INTO t4 VALUES ('Go Rin No Sho', 'master,slave');
SELECT COUNT(*) FROM t4;
COUNT(*)
71
**** On Slave ****
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
-- Should only contain records marked 'master,slave'
SELECT * FROM t4 ORDER BY a;
a b
Go Rin No Sho master,slave
**** On Master ****
DELETE FROM t4;
==== Try with a big file so that we get an append_block event as well
**** On Slave ****
STOP SLAVE;
**** On Master ****
SET AUTOCOMMIT=1;
SET SQL_LOG_BIN=0;
LOAD DATA INFILE '../std_data_ln/words.dat' INTO TABLE t4(a) SET b = 'master';
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
INSERT INTO t4 SELECT * FROM t4;
SELECT a FROM t4 INTO OUTFILE 'rpl_slave_skip_words.dat';
SET SQL_LOG_BIN=1;
LOAD DATA INFILE 'rpl_slave_skip_words.dat' INTO TABLE t4(a) SET b = 'master';
INSERT INTO t4 VALUES ('Go Rin No Sho', 'master,slave');
SELECT COUNT(*) FROM t4;
COUNT(*)
286721
**** On Slave ****
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
-- Should only contain records marked 'master,slave'
SELECT * FROM t4 ORDER BY a;
a b
Go Rin No Sho master,slave
**** On Master ****
DELETE FROM t4;
**** On Master ****
CREATE TABLE t5 (a int, b int, c SET('master','slave'), PRIMARY KEY (a,b)) ENGINE=MyISAM;
LOAD DATA INFILE '../std_data_ln/loaddata5.dat' INTO TABLE t5 FIELDS TERMINATED BY '' ENCLOSED BY '' (a,b) SET c='master,slave';
**** On Slave ****
STOP SLAVE;
**** On Master ****
LOAD DATA INFILE '../std_data_ln/loaddata5.dat' INTO TABLE t5 FIELDS TERMINATED BY '' ENCLOSED BY '' (a,b) SET c='';
ERROR 23000: Duplicate entry '1-2' for key 1
INSERT INTO t5 VALUES (42, 42, 'master,slave');
SELECT * FROM t5;
a b c
1 2 master,slave
3 4 master,slave
5 6 master,slave
42 42 master,slave
**** On Slave ****
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
SELECT * FROM t5;
a b c
1 2 master,slave
3 4 master,slave
5 6 master,slave
42 42 master,slave
==== Cleanup ====
**** On Master ****
DROP TABLE t1, t2;
DROP TABLE t1, t2
, t3, t4, t5
;
mysql-test/t/rpl_slave_skip.test
View file @
1666ecf0
...
...
@@ -13,8 +13,10 @@ source include/master-slave.inc;
# it back to get the non-transactional change into the table.
--
echo
****
On
Master
****
CREATE
TABLE
t1
(
a
INT
,
b
SET
(
'master'
,
'slave'
))
ENGINE
=
INNODB
;
CREATE
TABLE
t2
(
a
INT
,
b
SET
(
'master'
,
'slave'
))
ENGINE
=
MYISAM
;
CREATE
TABLE
t1
(
a
INT
,
b
SET
(
'master'
,
'slave'
))
ENGINE
=
InnoDB
;
CREATE
TABLE
t2
(
a
INT
,
b
SET
(
'master'
,
'slave'
))
ENGINE
=
MyISAM
;
CREATE
TABLE
t3
(
a
CHAR
(
20
),
b
SET
(
'master'
,
'slave'
))
ENGINE
=
InnoDB
;
CREATE
TABLE
t4
(
a
CHAR
(
20
),
b
SET
(
'master'
,
'slave'
))
ENGINE
=
MyISAM
;
--
echo
====
Skipping
normal
transactions
====
...
...
@@ -195,9 +197,170 @@ sync_with_master;
SELECT
*
FROM
t1
ORDER
BY
a
;
SELECT
*
FROM
t2
ORDER
BY
a
;
--
echo
====
Skipping
first
event
of
a
LOAD
DATA
for
a
transactional
table
====
--
echo
****
On
Slave
****
connection
slave
;
STOP
SLAVE
;
source
include
/
wait_for_slave_to_stop
.
inc
;
--
echo
****
On
Master
****
connection
master
;
SET
AUTOCOMMIT
=
1
;
LOAD
DATA
INFILE
'../std_data_ln/words.dat'
INTO
TABLE
t3
(
a
)
SET
b
=
'master'
;
INSERT
INTO
t3
VALUES
(
'Go Rin No Sho'
,
'master,slave'
);
save_master_pos
;
SELECT
COUNT
(
*
)
FROM
t3
;
# This will skip a begin event and the first INSERT of the
# transaction, and it should keep skipping until it has reached the
# transaction terminator.
--
echo
****
On
Slave
****
connection
slave
;
SET
GLOBAL
SQL_SLAVE_SKIP_COUNTER
=
1
;
START
SLAVE
;
source
include
/
wait_for_slave_to_start
.
inc
;
sync_with_master
;
--
echo
--
Should
only
contain
records
marked
'master,slave'
SELECT
*
FROM
t3
ORDER
BY
a
;
--
echo
****
On
Master
****
connection
master
;
DELETE
FROM
t3
;
sync_slave_with_master
;
--
echo
====
Skipping
first
event
of
a
LOAD
DATA
for
a
non
-
transactional
table
====
--
echo
****
On
Slave
****
connection
slave
;
STOP
SLAVE
;
source
include
/
wait_for_slave_to_stop
.
inc
;
--
echo
****
On
Master
****
connection
master
;
SET
AUTOCOMMIT
=
1
;
LOAD
DATA
INFILE
'../std_data_ln/words.dat'
INTO
TABLE
t4
(
a
)
SET
b
=
'master'
;
INSERT
INTO
t4
VALUES
(
'Go Rin No Sho'
,
'master,slave'
);
save_master_pos
;
SELECT
COUNT
(
*
)
FROM
t4
;
# This will skip a begin event and the first INSERT of the
# transaction, and it should keep skipping until it has reached the
# transaction terminator.
--
echo
****
On
Slave
****
connection
slave
;
SET
GLOBAL
SQL_SLAVE_SKIP_COUNTER
=
1
;
START
SLAVE
;
source
include
/
wait_for_slave_to_start
.
inc
;
sync_with_master
;
--
echo
--
Should
only
contain
records
marked
'master,slave'
SELECT
*
FROM
t4
ORDER
BY
a
;
--
echo
****
On
Master
****
connection
master
;
DELETE
FROM
t4
;
sync_slave_with_master
;
--
echo
====
Try
with
a
big
file
so
that
we
get
an
append_block
event
as
well
--
echo
****
On
Slave
****
connection
slave
;
STOP
SLAVE
;
source
include
/
wait_for_slave_to_stop
.
inc
;
--
echo
****
On
Master
****
connection
master
;
SET
AUTOCOMMIT
=
1
;
# This contain about 70 words, so we double it a few times to get more than 128 KiB
SET
SQL_LOG_BIN
=
0
;
LOAD
DATA
INFILE
'../std_data_ln/words.dat'
INTO
TABLE
t4
(
a
)
SET
b
=
'master'
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
INSERT
INTO
t4
SELECT
*
FROM
t4
;
SELECT
a
FROM
t4
INTO
OUTFILE
'rpl_slave_skip_words.dat'
;
SET
SQL_LOG_BIN
=
1
;
# Start the real job
LOAD
DATA
INFILE
'rpl_slave_skip_words.dat'
INTO
TABLE
t4
(
a
)
SET
b
=
'master'
;
INSERT
INTO
t4
VALUES
(
'Go Rin No Sho'
,
'master,slave'
);
#SHOW BINLOG EVENTS;
save_master_pos
;
SELECT
COUNT
(
*
)
FROM
t4
;
# This will skip a begin event and the first INSERT of the
# transaction, and it should keep skipping until it has reached the
# transaction terminator.
--
echo
****
On
Slave
****
connection
slave
;
SET
GLOBAL
SQL_SLAVE_SKIP_COUNTER
=
1
;
START
SLAVE
;
source
include
/
wait_for_slave_to_start
.
inc
;
sync_with_master
;
--
echo
--
Should
only
contain
records
marked
'master,slave'
SELECT
*
FROM
t4
ORDER
BY
a
;
--
echo
****
On
Master
****
connection
master
;
DELETE
FROM
t4
;
sync_slave_with_master
;
# Test to generate a Delete_file log event, and see that it works as well.
--
echo
****
On
Master
****
connection
master
;
CREATE
TABLE
t5
(
a
int
,
b
int
,
c
SET
(
'master'
,
'slave'
),
PRIMARY
KEY
(
a
,
b
))
ENGINE
=
MyISAM
;
LOAD
DATA
INFILE
'../std_data_ln/loaddata5.dat'
INTO
TABLE
t5
FIELDS
TERMINATED
BY
''
ENCLOSED
BY
''
(
a
,
b
)
SET
c
=
'master,slave'
;
--
echo
****
On
Slave
****
sync_slave_with_master
;
STOP
SLAVE
;
source
include
/
wait_for_slave_to_stop
.
inc
;
--
echo
****
On
Master
****
connection
master
;
error
ER_DUP_ENTRY
;
LOAD
DATA
INFILE
'../std_data_ln/loaddata5.dat'
INTO
TABLE
t5
FIELDS
TERMINATED
BY
''
ENCLOSED
BY
''
(
a
,
b
)
SET
c
=
''
;
INSERT
INTO
t5
VALUES
(
42
,
42
,
'master,slave'
);
save_master_pos
;
#SHOW BINLOG EVENTS;
SELECT
*
FROM
t5
;
--
echo
****
On
Slave
****
connection
slave
;
SET
GLOBAL
SQL_SLAVE_SKIP_COUNTER
=
1
;
START
SLAVE
;
source
include
/
wait_for_slave_to_start
.
inc
;
sync_with_master
;
SELECT
*
FROM
t5
;
connection
slave
;
--
echo
====
Cleanup
====
--
echo
****
On
Master
****
connection
master
;
DROP
TABLE
t1
,
t2
;
DROP
TABLE
t1
,
t2
,
t3
,
t4
,
t5
;
sync_slave_with_master
;
sql/slave.cc
View file @
1666ecf0
...
...
@@ -3348,7 +3348,10 @@ static int exec_relay_log_event(THD* thd, RELAY_LOG_INFO* rli)
if
(
rli
->
slave_skip_counter
&&
!
((
type_code
==
INTVAR_EVENT
||
type_code
==
RAND_EVENT
||
type_code
==
USER_VAR_EVENT
)
&&
type_code
==
USER_VAR_EVENT
||
type_code
==
BEGIN_LOAD_QUERY_EVENT
||
type_code
==
APPEND_BLOCK_EVENT
||
type_code
==
CREATE_FILE_EVENT
)
&&
rli
->
slave_skip_counter
==
1
)
&&
#if MYSQL_VERSION_ID < 50100
/*
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment