mirror of
https://github.com/MariaDB/server.git
synced 2025-08-31 22:22:30 +03:00
BUG#49019 Mixing self-logging eng. and regular eng. does not switch to row in mixed mode
Reading from a self-logging engine and updating a transactional engine such as Innodb generates changes that are written to the binary log in the statement format and may make slaves diverge. In the mixed mode, such changes should be written to the binary log in the row format. Note that the issue does not happen if we mix a self-logging engine and MyIsam as this case is caught by checking the mixture of non-transactional and transactional engines. So, we classify a mixed statement where one reads from NDB and writes into another engine as unsafe: if (multi_engine && flags_some_set & HA_HAS_OWN_BINLOGGING) lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_MULTIPLE_ENGINES_AND_SELF_LOGGING_ENGINE);
This commit is contained in:
@@ -341,6 +341,25 @@ ROLLBACK;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
SET AUTOCOMMIT = 1;
|
||||
---- Mixed statements Innodb ----
|
||||
BEGIN;
|
||||
INSERT INTO tndb VALUES (147);
|
||||
INSERT INTO tinnodb SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
COMMIT;
|
||||
INSERT INTO tndb VALUES (148);
|
||||
BEGIN;
|
||||
INSERT INTO tinnodb SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
INSERT INTO tndb VALUES (149);
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO tndb VALUES (150);
|
||||
INSERT INTO tmyisam SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
COMMIT;
|
||||
INSERT INTO tndb VALUES (151);
|
||||
BEGIN;
|
||||
INSERT INTO tmyisam SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
INSERT INTO tndb VALUES (152);
|
||||
COMMIT;
|
||||
==== Verify the result ====
|
||||
SELECT * FROM tmyisam ORDER BY a;
|
||||
a
|
||||
@@ -393,6 +412,8 @@ a
|
||||
140
|
||||
142
|
||||
146
|
||||
150
|
||||
151
|
||||
SELECT * FROM tinnodb ORDER BY a;
|
||||
a
|
||||
1
|
||||
@@ -420,6 +441,8 @@ a
|
||||
120
|
||||
125
|
||||
127
|
||||
147
|
||||
148
|
||||
SELECT * FROM tndb ORDER BY a;
|
||||
a
|
||||
2
|
||||
@@ -447,6 +470,12 @@ a
|
||||
121
|
||||
123
|
||||
126
|
||||
147
|
||||
148
|
||||
149
|
||||
150
|
||||
151
|
||||
152
|
||||
[on slave]
|
||||
Comparing tables master:test.tmyisam and slave:test.tmyisam
|
||||
Comparing tables master:test.tinnodb and slave:test.tinnodb
|
||||
|
@@ -418,6 +418,29 @@ ROLLBACK;
|
||||
|
||||
SET AUTOCOMMIT = 1;
|
||||
|
||||
--echo ---- Mixed statements Innodb ----
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO tndb VALUES (147);
|
||||
INSERT INTO tinnodb SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO tndb VALUES (148);
|
||||
BEGIN;
|
||||
INSERT INTO tinnodb SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
INSERT INTO tndb VALUES (149);
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
INSERT INTO tndb VALUES (150);
|
||||
INSERT INTO tmyisam SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
COMMIT;
|
||||
|
||||
INSERT INTO tndb VALUES (151);
|
||||
BEGIN;
|
||||
INSERT INTO tmyisam SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
INSERT INTO tndb VALUES (152);
|
||||
COMMIT;
|
||||
|
||||
--echo ==== Verify the result ====
|
||||
|
||||
|
Reference in New Issue
Block a user