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
3b8cae37
Commit
3b8cae37
authored
May 20, 2010
by
Luis Soares
Browse files
Options
Browse Files
Download
Plain Diff
BUG 49522: automerged bzr bundle from bug report.
parents
5539f5cc
2646306c
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
718 additions
and
6 deletions
+718
-6
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
+21
-0
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test
+38
-0
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result
+286
-0
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-master.opt
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-master.opt
+1
-0
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-slave.opt
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-slave.opt
+1
-0
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test
+349
-0
sql/log_event.cc
sql/log_event.cc
+22
-6
No files found.
mysql-test/suite/rpl/r/rpl_stm_mixing_engines.result
View file @
3b8cae37
...
...
@@ -868,3 +868,24 @@ DROP TABLE nt_4;
DROP PROCEDURE pc_i_tt_3;
DROP FUNCTION f1;
DROP FUNCTION f2;
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
CREATE TABLE `t1` (
`c1` int(10) unsigned NOT NULL AUTO_INCREMENT,
`c2` tinyint(1) unsigned DEFAULT NULL,
`c3` varchar(300) DEFAULT NULL,
`c4` int(10) unsigned NOT NULL,
`c5` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`c1`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;
ALTER TABLE `t1` Engine=InnoDB;
SET AUTOCOMMIT=0;
INSERT INTO t1 (c1,c2,c3,c4,c5) VALUES (1, 1, 'X', 1, NULL);
COMMIT;
ROLLBACK;
SET AUTOCOMMIT=1;
Comparing tables master:test.t1 and slave:test.t1
DROP TABLE `t1`;
mysql-test/suite/rpl/t/rpl_stm_mixing_engines.test
View file @
3b8cae37
...
...
@@ -3,3 +3,41 @@
--
source
include
/
have_innodb
.
inc
--
source
extra
/
rpl_tests
/
rpl_mixing_engines
.
test
#
# BUG#49522: Replication problem with mixed MyISAM/InnoDB
#
--
source
include
/
master
-
slave
-
reset
.
inc
--
connection
master
CREATE
TABLE
`t1`
(
`c1`
int
(
10
)
unsigned
NOT
NULL
AUTO_INCREMENT
,
`c2`
tinyint
(
1
)
unsigned
DEFAULT
NULL
,
`c3`
varchar
(
300
)
DEFAULT
NULL
,
`c4`
int
(
10
)
unsigned
NOT
NULL
,
`c5`
int
(
10
)
unsigned
DEFAULT
NULL
,
PRIMARY
KEY
(
`c1`
))
ENGINE
=
MyISAM
DEFAULT
CHARSET
=
latin1
;
--
sync_slave_with_master
ALTER
TABLE
`t1`
Engine
=
InnoDB
;
--
connection
master
SET
AUTOCOMMIT
=
0
;
INSERT
INTO
t1
(
c1
,
c2
,
c3
,
c4
,
c5
)
VALUES
(
1
,
1
,
'X'
,
1
,
NULL
);
COMMIT
;
ROLLBACK
;
SET
AUTOCOMMIT
=
1
;
--
sync_slave_with_master
--
let
$diff_table_1
=
master
:
test
.
t1
--
let
$diff_table_2
=
slave
:
test
.
t1
--
source
include
/
diff_tables
.
inc
--
connection
master
DROP
TABLE
`t1`
;
--
sync_slave_with_master
--
source
include
/
master
-
slave
-
end
.
inc
mysql-test/suite/rpl_ndb/r/rpl_ndb_mixed_tables.result
0 → 100644
View file @
3b8cae37
==== Initialization ====
stop slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
reset master;
reset slave;
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
start slave;
---- setup master ----
CREATE TABLE myisam_innodb (a INT) ENGINE=MYISAM;
CREATE TABLE innodb_myisam (a INT) ENGINE=INNODB;
CREATE TABLE myisam_ndb (a INT) ENGINE=MYISAM;
CREATE TABLE ndb_myisam (a INT) ENGINE=NDB;
CREATE TABLE innodb_ndb (a INT) ENGINE=INNODB;
CREATE TABLE ndb_innodb (a INT) ENGINE=NDB;
SHOW CREATE TABLE myisam_innodb;
Table Create Table
myisam_innodb CREATE TABLE `myisam_innodb` (
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE innodb_myisam;
Table Create Table
innodb_myisam CREATE TABLE `innodb_myisam` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE myisam_ndb;
Table Create Table
myisam_ndb CREATE TABLE `myisam_ndb` (
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE ndb_myisam;
Table Create Table
ndb_myisam CREATE TABLE `ndb_myisam` (
`a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW CREATE TABLE innodb_ndb;
Table Create Table
innodb_ndb CREATE TABLE `innodb_ndb` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE ndb_innodb;
Table Create Table
ndb_innodb CREATE TABLE `ndb_innodb` (
`a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
---- setup slave with different engines ----
DROP TABLE myisam_innodb, innodb_myisam;
DROP TABLE myisam_ndb, ndb_myisam;
DROP TABLE innodb_ndb, ndb_innodb;
CREATE TABLE myisam_innodb (a INT) ENGINE=INNODB;
CREATE TABLE innodb_myisam (a INT) ENGINE=MYISAM;
CREATE TABLE myisam_ndb (a INT) ENGINE=NDB;
CREATE TABLE ndb_myisam (a INT) ENGINE=MYISAM;
CREATE TABLE innodb_ndb (a INT) ENGINE=NDB;
CREATE TABLE ndb_innodb (a INT) ENGINE=INNODB;
SHOW CREATE TABLE myisam_innodb;
Table Create Table
myisam_innodb CREATE TABLE `myisam_innodb` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
SHOW CREATE TABLE innodb_myisam;
Table Create Table
innodb_myisam CREATE TABLE `innodb_myisam` (
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE myisam_ndb;
Table Create Table
myisam_ndb CREATE TABLE `myisam_ndb` (
`a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW CREATE TABLE ndb_myisam;
Table Create Table
ndb_myisam CREATE TABLE `ndb_myisam` (
`a` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1
SHOW CREATE TABLE innodb_ndb;
Table Create Table
innodb_ndb CREATE TABLE `innodb_ndb` (
`a` int(11) DEFAULT NULL
) ENGINE=ndbcluster DEFAULT CHARSET=latin1
SHOW CREATE TABLE ndb_innodb;
Table Create Table
ndb_innodb CREATE TABLE `ndb_innodb` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
==== AUTOCOMMIT=0, transactions ====
---- COMMIT ----
SET AUTOCOMMIT = 0;
BEGIN;
INSERT INTO myisam_innodb VALUES (1);
INSERT INTO myisam_innodb VALUES (2);
COMMIT;
BEGIN;
INSERT INTO innodb_myisam VALUES (3);
INSERT INTO innodb_myisam VALUES (4);
COMMIT;
BEGIN;
INSERT INTO myisam_ndb VALUES (5);
INSERT INTO myisam_ndb VALUES (6);
COMMIT;
BEGIN;
INSERT INTO ndb_myisam VALUES (7);
INSERT INTO ndb_myisam VALUES (8);
COMMIT;
BEGIN;
INSERT INTO ndb_innodb VALUES (9);
INSERT INTO ndb_innodb VALUES (10);
COMMIT;
BEGIN;
INSERT INTO innodb_ndb VALUES (11);
INSERT INTO innodb_ndb VALUES (12);
COMMIT;
---- ROLLBACK ----
BEGIN;
INSERT INTO myisam_innodb VALUES (13);
INSERT INTO myisam_innodb VALUES (14);
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
BEGIN;
INSERT INTO innodb_myisam VALUES (15);
INSERT INTO innodb_myisam VALUES (16);
ROLLBACK;
BEGIN;
INSERT INTO myisam_ndb VALUES (17);
INSERT INTO myisam_ndb VALUES (18);
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
BEGIN;
INSERT INTO ndb_myisam VALUES (19);
INSERT INTO ndb_myisam VALUES (20);
ROLLBACK;
BEGIN;
INSERT INTO ndb_innodb VALUES (21);
INSERT INTO ndb_innodb VALUES (22);
ROLLBACK;
BEGIN;
INSERT INTO innodb_ndb VALUES (23);
INSERT INTO innodb_ndb VALUES (24);
ROLLBACK;
==== AUTOCOMMIT=1, transactions ====
---- COMMIT ----
SET AUTOCOMMIT = 1;
BEGIN;
INSERT INTO myisam_innodb VALUES (25);
INSERT INTO myisam_innodb VALUES (26);
COMMIT;
BEGIN;
INSERT INTO innodb_myisam VALUES (27);
INSERT INTO innodb_myisam VALUES (28);
COMMIT;
BEGIN;
INSERT INTO myisam_ndb VALUES (29);
INSERT INTO myisam_ndb VALUES (30);
COMMIT;
BEGIN;
INSERT INTO ndb_myisam VALUES (31);
INSERT INTO ndb_myisam VALUES (32);
COMMIT;
BEGIN;
INSERT INTO ndb_innodb VALUES (33);
INSERT INTO ndb_innodb VALUES (34);
COMMIT;
BEGIN;
INSERT INTO innodb_ndb VALUES (35);
INSERT INTO innodb_ndb VALUES (36);
COMMIT;
---- ROLLBACK ----
BEGIN;
INSERT INTO myisam_innodb VALUES (37);
INSERT INTO myisam_innodb VALUES (38);
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
BEGIN;
INSERT INTO innodb_myisam VALUES (39);
INSERT INTO innodb_myisam VALUES (40);
ROLLBACK;
BEGIN;
INSERT INTO myisam_ndb VALUES (41);
INSERT INTO myisam_ndb VALUES (42);
ROLLBACK;
Warnings:
Warning 1196 Some non-transactional changed tables couldn't be rolled back
BEGIN;
INSERT INTO ndb_myisam VALUES (43);
INSERT INTO ndb_myisam VALUES (44);
ROLLBACK;
BEGIN;
INSERT INTO ndb_innodb VALUES (45);
INSERT INTO ndb_innodb VALUES (46);
ROLLBACK;
BEGIN;
INSERT INTO innodb_ndb VALUES (47);
INSERT INTO innodb_ndb VALUES (48);
ROLLBACK;
==== AUTOCOMMIT=1, single statements ====
INSERT INTO myisam_innodb VALUES (49);
INSERT INTO myisam_innodb VALUES (50);
INSERT INTO innodb_myisam VALUES (51);
INSERT INTO innodb_myisam VALUES (52);
INSERT INTO myisam_ndb VALUES (53);
INSERT INTO myisam_ndb VALUES (54);
INSERT INTO ndb_myisam VALUES (55);
INSERT INTO ndb_myisam VALUES (56);
INSERT INTO ndb_innodb VALUES (57);
INSERT INTO ndb_innodb VALUES (58);
INSERT INTO innodb_ndb VALUES (59);
INSERT INTO innodb_ndb VALUES (60);
==== AUTOCOMMIT=0, single statements, myisam on master ====
SET AUTOCOMMIT = 0;
INSERT INTO myisam_innodb VALUES (61);
INSERT INTO myisam_innodb VALUES (62);
INSERT INTO myisam_ndb VALUES (63);
INSERT INTO myisam_ndb VALUES (64);
==== Show results ====
SELECT * FROM myisam_innodb ORDER BY a;
a
1
2
13
14
25
26
37
38
49
50
61
62
SELECT * FROM innodb_myisam ORDER BY a;
a
3
4
27
28
51
52
SELECT * FROM myisam_ndb ORDER BY a;
a
5
6
17
18
29
30
41
42
53
54
63
64
SELECT * FROM ndb_myisam ORDER BY a;
a
7
8
31
32
55
56
SELECT * FROM innodb_ndb ORDER BY a;
a
11
12
35
36
59
60
SELECT * FROM ndb_innodb ORDER BY a;
a
9
10
33
34
57
58
Comparing tables master:test.myisam_innodb and slave:test.myisam_innodb
Comparing tables master:test.innodb_myisam and slave:test.innodb_myisam
Comparing tables master:test.myisam_ndb and slave:test.myisam_ndb
Comparing tables master:test.ndb_myisam and slave:test.ndb_myisam
Comparing tables master:test.innodb_ndb and slave:test.innodb_ndb
Comparing tables master:test.ndb_innodb and slave:test.ndb_innodb
==== Clean up ====
drop table myisam_innodb, innodb_myisam;
drop table myisam_ndb, ndb_myisam;
drop table innodb_ndb, ndb_innodb;
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-master.opt
0 → 100644
View file @
3b8cae37
--innodb --ndbcluster
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables-slave.opt
0 → 100644
View file @
3b8cae37
--innodb --ndbcluster --replicate-ignore-table=mysql.ndb_apply_status
mysql-test/suite/rpl_ndb/t/rpl_ndb_mixed_tables.test
0 → 100644
View file @
3b8cae37
# ==== Purpose ====
#
# Test replication of transactions on tables which have different
# engines on master and slave. This tests all combinations of innodb,
# myisam, and ndb.
#
# ==== Method ====
#
# Set up six tables, each being innodb, myisam, or innodb on master,
# and another of innodb, myisam, or innodb on slave. For each table,
# do the following:
#
# - committed and rollback'ed transactions, with autocommit on and
# off
# - non-transactions with autocommit on
# - non-transactions with autocommit off, where the master table is
# myisam.
#
# Note: we are running the slave with
# --replicate-ignore-table=mysql.ndb_apply_status . See BUG#34557 for
# explanation.
#
# ==== Related bugs ====
#
# BUG#26395: if crash during autocommit update to transactional table on master, slave fails
# BUG#29288: myisam transactions replicated to a transactional slave leaves slave unstable
# BUG#34557: Row-based replication from ndb to non-ndb gives error on slave
# BUG#34600: Rolled-back punch transactions not replicated correctly
#
# ==== Todo ====
#
# We should eventually try transactions touching two tables which are
# of different engines on the same server (so that we try, e.g. punch
# transactions; cf BUG#34600). However, that will make the test much
# bigger (9 master-slave engine combinations [myisam->myisam,
# myisam->ndb, etc]. To try all combinations of one or more such
# tables means 2^9-1=511 transactions. We need to multiplied by 5
# since we want to test committed/rollback'ed transactions
# with/without AUTOCOMMIT, as well as non-transactions with
# autocommit). We'd have to write a script to produce the test case.
--
echo
====
Initialization
====
--
source
include
/
have_ndb
.
inc
--
source
include
/
have_innodb
.
inc
--
source
include
/
ndb_master
-
slave
.
inc
--
echo
----
setup
master
----
CREATE
TABLE
myisam_innodb
(
a
INT
)
ENGINE
=
MYISAM
;
CREATE
TABLE
innodb_myisam
(
a
INT
)
ENGINE
=
INNODB
;
CREATE
TABLE
myisam_ndb
(
a
INT
)
ENGINE
=
MYISAM
;
CREATE
TABLE
ndb_myisam
(
a
INT
)
ENGINE
=
NDB
;
CREATE
TABLE
innodb_ndb
(
a
INT
)
ENGINE
=
INNODB
;
CREATE
TABLE
ndb_innodb
(
a
INT
)
ENGINE
=
NDB
;
SHOW
CREATE
TABLE
myisam_innodb
;
SHOW
CREATE
TABLE
innodb_myisam
;
SHOW
CREATE
TABLE
myisam_ndb
;
SHOW
CREATE
TABLE
ndb_myisam
;
SHOW
CREATE
TABLE
innodb_ndb
;
SHOW
CREATE
TABLE
ndb_innodb
;
--
echo
----
setup
slave
with
different
engines
----
sync_slave_with_master
;
DROP
TABLE
myisam_innodb
,
innodb_myisam
;
DROP
TABLE
myisam_ndb
,
ndb_myisam
;
DROP
TABLE
innodb_ndb
,
ndb_innodb
;
CREATE
TABLE
myisam_innodb
(
a
INT
)
ENGINE
=
INNODB
;
CREATE
TABLE
innodb_myisam
(
a
INT
)
ENGINE
=
MYISAM
;
CREATE
TABLE
myisam_ndb
(
a
INT
)
ENGINE
=
NDB
;
CREATE
TABLE
ndb_myisam
(
a
INT
)
ENGINE
=
MYISAM
;
CREATE
TABLE
innodb_ndb
(
a
INT
)
ENGINE
=
NDB
;
CREATE
TABLE
ndb_innodb
(
a
INT
)
ENGINE
=
INNODB
;
SHOW
CREATE
TABLE
myisam_innodb
;
SHOW
CREATE
TABLE
innodb_myisam
;
SHOW
CREATE
TABLE
myisam_ndb
;
SHOW
CREATE
TABLE
ndb_myisam
;
SHOW
CREATE
TABLE
innodb_ndb
;
SHOW
CREATE
TABLE
ndb_innodb
;
connection
master
;
--
echo
====
AUTOCOMMIT
=
0
,
transactions
====
--
echo
----
COMMIT
----
SET
AUTOCOMMIT
=
0
;
BEGIN
;
INSERT
INTO
myisam_innodb
VALUES
(
1
);
INSERT
INTO
myisam_innodb
VALUES
(
2
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_myisam
VALUES
(
3
);
INSERT
INTO
innodb_myisam
VALUES
(
4
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
myisam_ndb
VALUES
(
5
);
INSERT
INTO
myisam_ndb
VALUES
(
6
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_myisam
VALUES
(
7
);
INSERT
INTO
ndb_myisam
VALUES
(
8
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_innodb
VALUES
(
9
);
INSERT
INTO
ndb_innodb
VALUES
(
10
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_ndb
VALUES
(
11
);
INSERT
INTO
innodb_ndb
VALUES
(
12
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
--
echo
----
ROLLBACK
----
BEGIN
;
INSERT
INTO
myisam_innodb
VALUES
(
13
);
INSERT
INTO
myisam_innodb
VALUES
(
14
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_myisam
VALUES
(
15
);
INSERT
INTO
innodb_myisam
VALUES
(
16
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
myisam_ndb
VALUES
(
17
);
INSERT
INTO
myisam_ndb
VALUES
(
18
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_myisam
VALUES
(
19
);
INSERT
INTO
ndb_myisam
VALUES
(
20
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_innodb
VALUES
(
21
);
INSERT
INTO
ndb_innodb
VALUES
(
22
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_ndb
VALUES
(
23
);
INSERT
INTO
innodb_ndb
VALUES
(
24
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
--
echo
====
AUTOCOMMIT
=
1
,
transactions
====
--
echo
----
COMMIT
----
SET
AUTOCOMMIT
=
1
;
BEGIN
;
INSERT
INTO
myisam_innodb
VALUES
(
25
);
INSERT
INTO
myisam_innodb
VALUES
(
26
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_myisam
VALUES
(
27
);
INSERT
INTO
innodb_myisam
VALUES
(
28
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
myisam_ndb
VALUES
(
29
);
INSERT
INTO
myisam_ndb
VALUES
(
30
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_myisam
VALUES
(
31
);
INSERT
INTO
ndb_myisam
VALUES
(
32
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_innodb
VALUES
(
33
);
INSERT
INTO
ndb_innodb
VALUES
(
34
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_ndb
VALUES
(
35
);
INSERT
INTO
innodb_ndb
VALUES
(
36
);
COMMIT
;
sync_slave_with_master
;
connection
master
;
--
echo
----
ROLLBACK
----
BEGIN
;
INSERT
INTO
myisam_innodb
VALUES
(
37
);
INSERT
INTO
myisam_innodb
VALUES
(
38
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_myisam
VALUES
(
39
);
INSERT
INTO
innodb_myisam
VALUES
(
40
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
myisam_ndb
VALUES
(
41
);
INSERT
INTO
myisam_ndb
VALUES
(
42
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_myisam
VALUES
(
43
);
INSERT
INTO
ndb_myisam
VALUES
(
44
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
ndb_innodb
VALUES
(
45
);
INSERT
INTO
ndb_innodb
VALUES
(
46
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
BEGIN
;
INSERT
INTO
innodb_ndb
VALUES
(
47
);
INSERT
INTO
innodb_ndb
VALUES
(
48
);
ROLLBACK
;
sync_slave_with_master
;
connection
master
;
--
echo
====
AUTOCOMMIT
=
1
,
single
statements
====
INSERT
INTO
myisam_innodb
VALUES
(
49
);
INSERT
INTO
myisam_innodb
VALUES
(
50
);
sync_slave_with_master
;
connection
master
;
INSERT
INTO
innodb_myisam
VALUES
(
51
);
INSERT
INTO
innodb_myisam
VALUES
(
52
);
sync_slave_with_master
;
connection
master
;
INSERT
INTO
myisam_ndb
VALUES
(
53
);
INSERT
INTO
myisam_ndb
VALUES
(
54
);
sync_slave_with_master
;
connection
master
;
INSERT
INTO
ndb_myisam
VALUES
(
55
);
INSERT
INTO
ndb_myisam
VALUES
(
56
);
sync_slave_with_master
;
connection
master
;
INSERT
INTO
ndb_innodb
VALUES
(
57
);
INSERT
INTO
ndb_innodb
VALUES
(
58
);
sync_slave_with_master
;
connection
master
;
INSERT
INTO
innodb_ndb
VALUES
(
59
);
INSERT
INTO
innodb_ndb
VALUES
(
60
);
sync_slave_with_master
;
connection
master
;
--
echo
====
AUTOCOMMIT
=
0
,
single
statements
,
myisam
on
master
====
SET
AUTOCOMMIT
=
0
;
# This tests BUG#29288.
INSERT
INTO
myisam_innodb
VALUES
(
61
);
INSERT
INTO
myisam_innodb
VALUES
(
62
);
sync_slave_with_master
;
connection
master
;
INSERT
INTO
myisam_ndb
VALUES
(
63
);
INSERT
INTO
myisam_ndb
VALUES
(
64
);
sync_slave_with_master
;
connection
master
;
--
echo
====
Show
results
====
SELECT
*
FROM
myisam_innodb
ORDER
BY
a
;
SELECT
*
FROM
innodb_myisam
ORDER
BY
a
;
SELECT
*
FROM
myisam_ndb
ORDER
BY
a
;
SELECT
*
FROM
ndb_myisam
ORDER
BY
a
;
SELECT
*
FROM
innodb_ndb
ORDER
BY
a
;
SELECT
*
FROM
ndb_innodb
ORDER
BY
a
;
let
$diff_table_1
=
master
:
test
.
myisam_innodb
;
let
$diff_table_2
=
slave
:
test
.
myisam_innodb
;
source
include
/
diff_tables
.
inc
;
let
$diff_table_1
=
master
:
test
.
innodb_myisam
;
let
$diff_table_2
=
slave
:
test
.
innodb_myisam
;
source
include
/
diff_tables
.
inc
;
let
$diff_table_1
=
master
:
test
.
myisam_ndb
;
let
$diff_table_2
=
slave
:
test
.
myisam_ndb
;
source
include
/
diff_tables
.
inc
;
let
$diff_table_1
=
master
:
test
.
ndb_myisam
;
let
$diff_table_2
=
slave
:
test
.
ndb_myisam
;
source
include
/
diff_tables
.
inc
;
let
$diff_table_1
=
master
:
test
.
innodb_ndb
;
let
$diff_table_2
=
slave
:
test
.
innodb_ndb
;
source
include
/
diff_tables
.
inc
;
let
$diff_table_1
=
master
:
test
.
ndb_innodb
;
let
$diff_table_2
=
slave
:
test
.
ndb_innodb
;
source
include
/
diff_tables
.
inc
;
--
echo
====
Clean
up
====
drop
table
myisam_innodb
,
innodb_myisam
;
drop
table
myisam_ndb
,
ndb_myisam
;
drop
table
innodb_ndb
,
ndb_innodb
;
sync_slave_with_master
;
sql/log_event.cc
View file @
3b8cae37
...
...
@@ -2406,13 +2406,29 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg,
charset_database_number
=
thd_arg
->
variables
.
collation_database
->
number
;
/*
If we don't use flags2 for anything else than options contained in
thd_arg->options, it would be more efficient to flags2=thd_arg->options
(OPTIONS_WRITTEN_TO_BIN_LOG would be used only at reading time).
But it's likely that we don't want to use 32 bits for 3 bits; in the future
we will probably want to reclaim the 29 bits. So we need the &.
*/
flags2
=
(
uint32
)
(
thd_arg
->
options
&
OPTIONS_WRITTEN_TO_BIN_LOG
);
We only replicate over the bits of flags2 that we need: the rest
are masked out by "& OPTIONS_WRITTEN_TO_BINLOG".
We also force AUTOCOMMIT=1. Rationale (cf. BUG#29288): After
fixing BUG#26395, we always write BEGIN and COMMIT around all
transactions (even single statements in autocommit mode). This is
so that replication from non-transactional to transactional table
and error recovery from XA to non-XA table should work as
expected. The BEGIN/COMMIT are added in log.cc. However, there is
one exception: MyISAM bypasses log.cc and writes directly to the
binlog. So if autocommit is off, master has MyISAM, and slave has
a transactional engine, then the slave will just see one long
never-ending transaction. The only way to bypass explicit
BEGIN/COMMIT in the binlog is by using a non-transactional table.
So setting AUTOCOMMIT=1 will make this work as expected.
Note: explicitly replicate AUTOCOMMIT=1 from master. We do not
assume AUTOCOMMIT=1 on slave; the slave still reads the state of
the autocommit flag as written by the master to the binlog. This
behavior may change after WL#4162 has been implemented.
*/
flags2
=
(
uint32
)
(
thd_arg
->
options
&
(
OPTIONS_WRITTEN_TO_BIN_LOG
&
~
OPTION_NOT_AUTOCOMMIT
));
DBUG_ASSERT
(
thd_arg
->
variables
.
character_set_client
->
number
<
256
*
256
);
DBUG_ASSERT
(
thd_arg
->
variables
.
collation_connection
->
number
<
256
*
256
);
DBUG_ASSERT
(
thd_arg
->
variables
.
collation_server
->
number
<
256
*
256
);
...
...
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