• Alfranio Correia's avatar
    WL#2687 WL#5072 BUG#40278 BUG#47175 · 60d46624
    Alfranio Correia authored
    Non-transactional updates that take place inside a transaction present problems
    for logging because they are visible to other clients before the transaction
    is committed, and they are not rolled back even if the transaction is rolled
    back. It is not always possible to log correctly in statement format when both
    transactional and non-transactional tables are used in the same transaction.
    
    In the current patch, we ensure that such scenario is completely safe under the
    ROW and MIXED modes.
    60d46624
rpl_rbr_to_sbr.result 2.22 KB
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;
**** On Master ****
CREATE TABLE t1 (a INT, b LONG);
INSERT INTO t1 VALUES (1,1), (2,2);
INSERT INTO t1 VALUES (3,UUID()), (4,UUID());
SHOW BINLOG EVENTS;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
master-bin.000001	#	Format_desc	1	#	Server ver: VERSION, Binlog ver: 4
master-bin.000001	#	Query	1	#	use `test`; CREATE TABLE t1 (a INT, b LONG)
master-bin.000001	#	Query	1	#	BEGIN
master-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
master-bin.000001	#	Query	1	#	COMMIT
master-bin.000001	#	Query	1	#	BEGIN
master-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
master-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
master-bin.000001	#	Query	1	#	COMMIT
**** On Slave ****
SHOW SLAVE STATUS;
Slave_IO_State	#
Master_Host	127.0.0.1
Master_User	root
Master_Port	MASTER_PORT
Connect_Retry	1
Master_Log_File	master-bin.000001
Read_Master_Log_Pos	#
Relay_Log_File	#
Relay_Log_Pos	#
Relay_Master_Log_File	master-bin.000001
Slave_IO_Running	Yes
Slave_SQL_Running	Yes
Replicate_Do_DB	
Replicate_Ignore_DB	
Replicate_Do_Table	
Replicate_Ignore_Table	
Replicate_Wild_Do_Table	
Replicate_Wild_Ignore_Table	
Last_Errno	0
Last_Error	
Skip_Counter	0
Exec_Master_Log_Pos	#
Relay_Log_Space	#
Until_Condition	None
Until_Log_File	
Until_Log_Pos	0
Master_SSL_Allowed	No
Master_SSL_CA_File	
Master_SSL_CA_Path	
Master_SSL_Cert	
Master_SSL_Cipher	
Master_SSL_Key	
Seconds_Behind_Master	#
Master_SSL_Verify_Server_Cert	#
Last_IO_Errno	#
Last_IO_Error	
Last_SQL_Errno	0
Last_SQL_Error	
Replicate_Ignore_Server_Ids	
Master_Server_Id	1
SHOW BINLOG EVENTS;
Log_name	Pos	Event_type	Server_id	End_log_pos	Info
slave-bin.000001	#	Format_desc	2	#	Server ver: VERSION, Binlog ver: 4
slave-bin.000001	#	Query	1	#	use `test`; CREATE TABLE t1 (a INT, b LONG)
slave-bin.000001	#	Query	1	#	BEGIN
slave-bin.000001	#	Query	1	#	use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
slave-bin.000001	#	Query	1	#	COMMIT
slave-bin.000001	#	Query	1	#	BEGIN
slave-bin.000001	#	Table_map	1	#	table_id: # (test.t1)
slave-bin.000001	#	Write_rows	1	#	table_id: # flags: STMT_END_F
slave-bin.000001	#	Query	1	#	COMMIT
DROP TABLE IF EXISTS t1;