BUG#49019 Mixing self-logging eng. and regular eng. does not switch to row in mixed mode
Backport of the patch for 5.1-bugteam.
This commit is contained in:
parent
455f754e6b
commit
f438d08aee
@ -341,6 +341,33 @@ 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;
|
||||
Warnings:
|
||||
Note 1592 Statement may not be safe to log in statement format.
|
||||
COMMIT;
|
||||
INSERT INTO tndb VALUES (148);
|
||||
BEGIN;
|
||||
INSERT INTO tinnodb SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
Warnings:
|
||||
Note 1592 Statement may not be safe to log in statement format.
|
||||
INSERT INTO tndb VALUES (149);
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO tndb VALUES (150);
|
||||
INSERT INTO tmyisam SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
Warnings:
|
||||
Note 1592 Statement may not be safe to log in statement format.
|
||||
COMMIT;
|
||||
INSERT INTO tndb VALUES (151);
|
||||
BEGIN;
|
||||
INSERT INTO tmyisam SELECT * FROM tndb ORDER BY a DESC LIMIT 1;
|
||||
Warnings:
|
||||
Note 1592 Statement may not be safe to log in statement format.
|
||||
INSERT INTO tndb VALUES (152);
|
||||
COMMIT;
|
||||
==== Verify the result ====
|
||||
SELECT * FROM tmyisam ORDER BY a;
|
||||
a
|
||||
@ -393,6 +420,8 @@ a
|
||||
140
|
||||
142
|
||||
146
|
||||
150
|
||||
151
|
||||
SELECT * FROM tinnodb ORDER BY a;
|
||||
a
|
||||
1
|
||||
@ -420,6 +449,8 @@ a
|
||||
120
|
||||
125
|
||||
127
|
||||
147
|
||||
148
|
||||
SELECT * FROM tndb ORDER BY a;
|
||||
a
|
||||
2
|
||||
@ -447,6 +478,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
|
||||
|
@ -415,6 +415,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 ====
|
||||
|
||||
|
@ -5183,6 +5183,16 @@ int decide_logging_format(THD *thd, TABLE_LIST *tables)
|
||||
thd->variables.binlog_format));
|
||||
DBUG_PRINT("info", ("multi_engine: %s",
|
||||
multi_engine ? "TRUE" : "FALSE"));
|
||||
/*
|
||||
Reading from a self-logging engine and updating another engine
|
||||
generates changes that are written to the binary log in the
|
||||
statement format and may make slaves to diverge. In the mixed
|
||||
mode, such changes should be written to the binary log in the
|
||||
row format.
|
||||
*/
|
||||
if (multi_engine &&
|
||||
(flags_some_set & HA_HAS_OWN_BINLOGGING))
|
||||
thd->lex->set_stmt_unsafe();
|
||||
|
||||
int error= 0;
|
||||
if (flags_all_set == 0)
|
||||
|
Loading…
x
Reference in New Issue
Block a user