Bug #49522 | Replication problem with mixed MyISAM/InnoDB | ||
---|---|---|---|
Submitted: | 8 Dec 2009 1:33 | Modified: | 14 Oct 2010 12:27 |
Reporter: | Arjen Lentz | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Replication | Severity: | S2 (Serious) |
Version: | 5.1.39, 5.1 bzr | OS: | Any |
Assigned to: | Luis Soares | CPU Architecture: | Any |
Tags: | innodb, myisam, regression, replication |
[8 Dec 2009 1:33]
Arjen Lentz
[8 Dec 2009 6:51]
Sveta Smirnova
Thank you for the report. Verified as described. Versions 5.0 and next-mr are not affected. One should have binlog-format=statement to repeat this.
[9 Dec 2009 2:37]
Luis Soares
Related: BUG#29288.
[9 Dec 2009 11:03]
Mats Kindahl
Could you please add the result of SHOW BINLOG EVENTS after executing the statements above?
[9 Dec 2009 11:47]
Arjen Lentz
Sorry don't have it handy - Sveta, since you repeated it, can you provide the binlog events to Mats? Thanks Btw Mats, to see the ref to the other bug that was fixed in a later version... if it's the same thing, fixing this is as simple as backporting that fix. It is a regression.
[11 Dec 2009 8:23]
Mats Kindahl
Arjen, Yes, but the reason to why it works earlier is because we started to replicate the AUTOCOMMIT flag to fix some other bugs. The binary log from a similar example is: mysqld.1> show binlog events from 106; +-------------------+-----+------------+-----------+-------------+-------------------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +-------------------+-----+------------+-----------+-------------+-------------------------------------------+ | master-bin.000001 | 106 | Query | 1 | 192 | use `test`; create table t1 (a int) | | master-bin.000001 | 192 | Query | 1 | 284 | use `test`; insert into t1 values (1),(2) | | master-bin.000001 | 284 | Query | 1 | 376 | use `test`; insert into t1 values (3),(4) | +-------------------+-----+------------+-----------+-------------+-------------------------------------------+ 3 rows in set (0.00 sec) mysqld.1> select @@autocommit; +--------------+ | @@autocommit | +--------------+ | 0 | +--------------+ 1 row in set (0.00 sec) Note that there is no BEGIN-COMMIT around the statements even though a commit was executed just after the statement.
[11 Dec 2009 8:26]
Sveta Smirnova
SHOW BINLOG EVENTS; Log_name Pos Event_type Server_id End_log_pos Info master-bin.000001 4 Format_desc 1 106 Server ver: 5.1.43-debug-log, Binlog ver: 4 master-bin.000001 106 Query 1 467 use `test`; CREATE TABLE `MailerType` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `active` tinyint(1) unsigned DEFAULT NULL, `en_US` varchar(300) DEFAULT NULL, `email_id` int(10) unsigned NOT NULL, `min_resend_hours` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 master-bin.000001 467 Query 1 644 use `test`; insert into MailerType (active, en_US, email_id, min_resend_hours, id) values (1, 'OA bombs19', 13, null, 1501580)
[11 Dec 2009 8:27]
Sveta Smirnova
Test used: $cat src/tests/t/rpl_bug49522.test --source include/master-slave.inc CREATE TABLE `MailerType` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `active` tinyint(1) unsigned DEFAULT NULL, `en_US` varchar(300) DEFAULT NULL, `email_id` int(10) unsigned NOT NULL, `min_resend_hours` int(10) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1; sleep 1; connection slave; alter table MailerType engine=innodb; connection master; SET autocommit=0; insert into MailerType (active, en_US, email_id, min_resend_hours, id) values (1, 'OA bombs19', 13, null, 1501580); commit; rollback; SET autocommit=1; select * from MailerType; SHOW BINLOG EVENTS; sleep 1; connection slave; select * from MailerType; $cat src/tests/t/rpl_bug49522-master.opt --binlog-format=statement $cat src/tests/t/rpl_bug49522-slave.opt --innodb
[7 May 2010 17:49]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/107778 3373 Luis Soares 2010-05-07 [merge] BUG#49522: Replication problem with mixed MyISAM/InnoDB When using a non-transactional table (t1) on the master and with autocommit disabled, no COMMIT is recorded in the binary log ending the statement. Therefore, if the slave has t1 in a transactional engine, then it will be as if a transaction is started but never ends. This is actually BUG#29288 all over again. We fix this by cherrypicking the cset for BUG#29288 which was pushed to a later mysql version. The revision picked was: mats@sun.com-20090923094343-bnheplq8n95opjay . Additionally, a test case for covering the scenario depicted in the bug report is included in this cset.
[20 May 2010 1:23]
Luis Soares
Queued in mysql-5.1-bugteam and mysql-pe: - http://pb2.norway.sun.com/web.py?template=push_details&push=1270678 - http://pb2.norway.sun.com/web.py?template=push_details&push=1270677
[28 May 2010 5:52]
Bugs System
Pushed into mysql-next-mr (revid:alik@sun.com-20100524190136-egaq7e8zgkwb9aqi) (version source revid:alik@sun.com-20100524190136-egaq7e8zgkwb9aqi) (pib:16)
[28 May 2010 6:21]
Bugs System
Pushed into 6.0.14-alpha (revid:alik@sun.com-20100524190941-nuudpx60if25wsvx) (version source revid:alik@sun.com-20100524190409-5w4l7mje1wk1c90l) (merge vers: 6.0.14-alpha) (pib:16)
[28 May 2010 6:49]
Bugs System
Pushed into 5.5.5-m3 (revid:alik@sun.com-20100524185725-c8k5q7v60i5nix3t) (version source revid:alexey.kopytov@sun.com-20100523204118-0tl3goawu658rxh6) (merge vers: 5.5.5-m3) (pib:16)
[2 Jun 2010 8:50]
Bugs System
Pushed into 5.1.48 (revid:georgi.kodinov@oracle.com-20100602084411-2yu607bslbmgufl3) (version source revid:luis.soares@sun.com-20100519234918-lwg5aqhatjuesp9l) (merge vers: 5.1.47) (pib:16)
[3 Jun 2010 10:20]
Jon Stephens
Documented fix in the 5.1.48, 5.5.5, and 6.0.14 changelogs, as follows: When using a non-transactional table on the master with autocommit disabled, no COMMIT was recorded in the binary log following a statement affecting this table. If the slave's copy of the table used a transactional storage engine, the result on the slave was as though a transaction had been started, but never completed. See also BUG#29288. Closed.
[14 Oct 2010 8:30]
Bugs System
Pushed into mysql-5.1-telco-7.0 5.1.51-ndb-7.0.20 (revid:martin.skold@mysql.com-20101014082627-jrmy9xbfbtrebw3c) (version source revid:vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh) (merge vers: 5.5.5-m3) (pib:21)
[14 Oct 2010 8:45]
Bugs System
Pushed into mysql-5.1-telco-6.3 5.1.51-ndb-6.3.39 (revid:martin.skold@mysql.com-20101014083757-5qo48b86d69zjvzj) (version source revid:vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh) (merge vers: 5.5.5-m3) (pib:21)
[14 Oct 2010 8:59]
Bugs System
Pushed into mysql-5.1-telco-6.2 5.1.51-ndb-6.2.19 (revid:martin.skold@mysql.com-20101014084420-y54ecj85j5we27oa) (version source revid:vasil.dimov@oracle.com-20100513074652-0cvlhgkesgbb2bfh) (merge vers: 5.5.5-m3) (pib:21)
[14 Oct 2010 12:27]
Jon Stephens
No new changelog entry required. Setting back to Closed state.