So based on the backtrace this is what we have as the position up to which the workers have executed everything: group_relay_log_name = "./relay-bin.000973", '\000' , group_relay_log_pos = 616886798, Looking at the relay log following are the events in the relay log starting at position 616886798: # at 616886798 #140618 19:31:55 server id 11 end_log_pos 616886824 CRC32 0xca064602 GTID [commit=yes] SET @@SESSION.GTID_NEXT= 'da2d1223-8151-11e3-8e1d-997ca3babb7c:4367700088'/*!*/; # at 616886846 #140618 19:31:55 server id 11 end_log_pos 616886911 CRC32 0x893a663b Query thread_id=708866417 exec_time=0 error_code=0 SET TIMESTAMP=1403119915/*!*/; BEGIN /*!*/; # at 616886933 #140618 19:31:55 server id 11 end_log_pos 616887078 CRC32 0xb7f1ec9f Query thread_id=708866417 exec_time=0 error_code=0 SET TIMESTAMP=1403119915/*!*/; UPDATE some_table ... /*!*/; # at 616887100 #140618 19:32:05 server id 6 end_log_pos 616887123 CRC32 0xfdd70dd7 Stop DELIMITER ; # End of log file So after the UPDATE there is no COMMIT event, but a STOP event. A STOP event is written when mysqld is being shutdown. The above UPDATE is what the worker thread executed in the transaction that is still open. So what happened was that while IO thread was writing an event group to the relay log, mysqld was shutdown and the event group was written partially. When MySQL comes back up again, the log is rotated, and IO thread starts writing from the event group which was partially written. So the next log has the following event group: #140618 19:31:55 server id 11 end_log_pos 616886824 CRC32 0xca064602 GTID [commit=yes] SET @@SESSION.GTID_NEXT= 'da2d1223-8151-11e3-8e1d-997ca3babb7c:4367700088'/*!*/; # at 478 #140618 19:31:55 server id 11 end_log_pos 616886911 CRC32 0x893a663b Query thread_id=708866417 exec_time=0 error_code=0 SET TIMESTAMP=1403119915/*!*/; SET @@session.pseudo_thread_id=708866417/*!*/; SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; SET @@session.sql_mode=1073741824/*!*/; SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; /*!\C utf8mb4 *//*!*/; SET @@session.character_set_client=45,@@session.collation_connection=45,@@session.collation_server=224/*!*/; SET @@session.lc_time_names=0/*!*/; SET @@session.collation_database=DEFAULT/*!*/; BEGIN /*!*/; # at 565 #140618 19:31:55 server id 11 end_log_pos 616887078 CRC32 0xb7f1ec9f Query thread_id=708866417 exec_time=0 error_code=0 use `db2`/*!*/; SET TIMESTAMP=1403119915/*!*/; UPDATE some_tbl .... /*!*/; # at 732 #140618 19:31:55 server id 11 end_log_pos 616887109 CRC32 0x8f5b2f7c Xid = 30416488792 COMMIT/*!*/; You can see that the "end_log_pos" values are the same for the partial event I showed earlier and this one. It is the same UPDATE transaction that was partially written. Now comes the interesting part. When the coordinator reads the relay log, it sends the partial event to the worker, since the event is partial hence the worker never commits the transaction and the transaction is kept open. The coordinator reads the next event (which is the full version of the partial event) but the coordinator cannot assign the next event to another worker because of one of the workers having an open transaction. And apparently, MTS waits for workers to commit transactions when it sees log rotated. Correct behavior would be for MTS to execute a rollback when it sees a STOP event.