mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 15:50:51 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			181 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			181 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 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;
 | |
| call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
 | |
| call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
 | |
| SET @@session.binlog_direct_non_transactional_updates= FALSE;
 | |
| DROP DATABASE IF EXISTS db1;
 | |
| DROP DATABASE IF EXISTS db2;
 | |
| CREATE DATABASE db1;
 | |
| CREATE DATABASE db2;
 | |
| use db1;
 | |
| CREATE TABLE db1.t1 (a INT) ENGINE=InnoDB;
 | |
| CREATE TABLE db1.t2 (s CHAR(255)) ENGINE=MyISAM;
 | |
| include/stop_slave.inc
 | |
| [on master]
 | |
| CREATE PROCEDURE db1.p1 ()
 | |
| BEGIN
 | |
| INSERT INTO t1 VALUES (1);
 | |
| INSERT INTO t1 VALUES (2);
 | |
| INSERT INTO t1 VALUES (3);
 | |
| INSERT INTO t1 VALUES (4);
 | |
| INSERT INTO t1 VALUES (5);
 | |
| END//
 | |
| CREATE PROCEDURE db1.p2 ()
 | |
| BEGIN
 | |
| INSERT INTO t1 VALUES (6);
 | |
| INSERT INTO t1 VALUES (7);
 | |
| INSERT INTO t1 VALUES (8);
 | |
| INSERT INTO t1 VALUES (9);
 | |
| INSERT INTO t1 VALUES (10);
 | |
| INSERT INTO t2 VALUES ('executed db1.p2()');
 | |
| END//
 | |
| INSERT INTO db1.t2 VALUES ('before call db1.p1()');
 | |
| use test;
 | |
| BEGIN;
 | |
| CALL db1.p1();
 | |
| COMMIT;
 | |
| INSERT INTO db1.t2 VALUES ('after call db1.p1()');
 | |
| SELECT * FROM db1.t1;
 | |
| a
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| 4
 | |
| 5
 | |
| SELECT * FROM db1.t2;
 | |
| s
 | |
| before call db1.p1()
 | |
| after call db1.p1()
 | |
| [on slave]
 | |
| start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_POS;
 | |
| #
 | |
| # If we got non-zero here, then we're suffering BUG#43263
 | |
| #
 | |
| SELECT 0 as 'Must be 0';
 | |
| Must be 0
 | |
| 0
 | |
| SELECT * from db1.t1;
 | |
| a
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| 4
 | |
| 5
 | |
| SELECT * from db1.t2;
 | |
| s
 | |
| before call db1.p1()
 | |
| [on master]
 | |
| INSERT INTO db1.t2 VALUES ('before call db1.p2()');
 | |
| BEGIN;
 | |
| CALL db1.p2();
 | |
| Warnings:
 | |
| Note	1592	Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
 | |
| ROLLBACK;
 | |
| INSERT INTO db1.t2 VALUES ('after call db1.p2()');
 | |
| SELECT * FROM db1.t1;
 | |
| a
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| 4
 | |
| 5
 | |
| SELECT * FROM db1.t2;
 | |
| s
 | |
| before call db1.p1()
 | |
| after call db1.p1()
 | |
| before call db1.p2()
 | |
| executed db1.p2()
 | |
| after call db1.p2()
 | |
| [on slave]
 | |
| start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_POS;
 | |
| #
 | |
| # If we got non-zero here, then we're suffering BUG#43263
 | |
| #
 | |
| SELECT 0 as 'Must be 0';
 | |
| Must be 0
 | |
| 0
 | |
| SELECT * from db1.t1;
 | |
| a
 | |
| 1
 | |
| 2
 | |
| 3
 | |
| 4
 | |
| 5
 | |
| SELECT * from db1.t2;
 | |
| s
 | |
| before call db1.p1()
 | |
| executed db1.p2()
 | |
| START SLAVE;
 | |
| #
 | |
| # SAVEPOINT and ROLLBACK TO have the same problem in BUG#43263
 | |
| # This was reported by BUG#50407
 | |
| [on master]
 | |
| SET SESSION AUTOCOMMIT=0
 | |
| BEGIN;
 | |
| INSERT INTO db1.t1 VALUES(20);
 | |
| # 
 | |
| # Verify whether this statement is binlogged correctly
 | |
| /*comment*/ SAVEPOINT has_comment;
 | |
| USE db1;
 | |
| INSERT INTO db1.t1 VALUES(30);
 | |
| INSERT INTO db1.t2 VALUES("in savepoint has_comment");
 | |
| Warnings:
 | |
| Note	1592	Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
 | |
| USE db2;
 | |
| SavePoint mixed_cases;
 | |
| USE db1;
 | |
| INSERT INTO db1.t2 VALUES("in savepoint mixed_cases");
 | |
| Warnings:
 | |
| Note	1592	Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
 | |
| INSERT INTO db1.t1 VALUES(40);
 | |
| USE db2;
 | |
| ROLLBACK TO mixed_cases;
 | |
| Warnings:
 | |
| Warning	1196	Some non-transactional changed tables couldn't be rolled back
 | |
| ROLLBACK TO has_comment;
 | |
| Warnings:
 | |
| Warning	1196	Some non-transactional changed tables couldn't be rolled back
 | |
| USE db1;
 | |
| INSERT INTO db1.t2 VALUES("after rollback to");
 | |
| Warnings:
 | |
| Note	1592	Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it accesses a non-transactional table after accessing a transactional table within the same transaction.
 | |
| INSERT INTO db1.t1 VALUES(50);
 | |
| USE db2;
 | |
| COMMIT;
 | |
| show binlog events from <binlog_start>;
 | |
| Log_name	Pos	Event_type	Server_id	End_log_pos	Info
 | |
| master-bin.000001	#	Query	#	#	BEGIN
 | |
| master-bin.000001	#	Query	#	#	use `test`; INSERT INTO db1.t1 VALUES(20)
 | |
| master-bin.000001	#	Query	#	#	SAVEPOINT has_comment
 | |
| master-bin.000001	#	Query	#	#	use `db1`; INSERT INTO db1.t1 VALUES(30)
 | |
| master-bin.000001	#	Query	#	#	use `db1`; INSERT INTO db1.t2 VALUES("in savepoint has_comment")
 | |
| master-bin.000001	#	Query	#	#	SAVEPOINT mixed_cases
 | |
| master-bin.000001	#	Query	#	#	use `db1`; INSERT INTO db1.t2 VALUES("in savepoint mixed_cases")
 | |
| master-bin.000001	#	Query	#	#	use `db1`; INSERT INTO db1.t1 VALUES(40)
 | |
| master-bin.000001	#	Query	#	#	ROLLBACK TO mixed_cases
 | |
| master-bin.000001	#	Query	#	#	ROLLBACK TO has_comment
 | |
| master-bin.000001	#	Query	#	#	use `db1`; INSERT INTO db1.t2 VALUES("after rollback to")
 | |
| master-bin.000001	#	Query	#	#	use `db1`; INSERT INTO db1.t1 VALUES(50)
 | |
| master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 | |
| [on slave]
 | |
| #
 | |
| # Verify INSERT statements in savepoints are executed, for MyISAM table
 | |
| # is not effected by ROLLBACK TO
 | |
| SELECT * FROM db1.t2 WHERE s LIKE '% savepoint %';
 | |
| s
 | |
| in savepoint has_comment
 | |
| in savepoint mixed_cases
 | |
| #
 | |
| # Verify INSERT statements on the Innodb table are rolled back;
 | |
| SELECT * FROM db1.t1 WHERE a IN (30, 40);
 | |
| a
 | |
| #
 | |
| # Clean up
 | |
| #
 | |
| DROP DATABASE db1;
 | |
| DROP DATABASE db2;
 |