mirror of
https://github.com/MariaDB/server.git
synced 2025-01-31 19:11:46 +01:00
44efa9c18b
Now, every transaction (including autocommit transactions) starts with a BEGIN and ends with a COMMIT/ROLLBACK in the binlog. Added a test case, and updated lots of test case result files. mysql-test/r/multi_update.result: Updated result file mysql-test/r/sp_trans_log.result: Updated result file mysql-test/suite/binlog/r/binlog_innodb.result: Updated result file mysql-test/suite/binlog/r/binlog_multi_engine.result: Updated result file mysql-test/suite/binlog/r/binlog_stm_blackhole.result: Updated result file mysql-test/suite/binlog/r/binlog_stm_mix_innodb_myisam.result: Updated result file mysql-test/suite/ndb/r/ndb_binlog_format.result: Updated result file mysql-test/suite/rpl/r/rpl_innodb_mixed_dml.result: Updated result file mysql-test/suite/rpl/r/rpl_row_charset_innodb.result: Updated result file mysql-test/suite/rpl/r/rpl_row_create_table.result: Updated result file mysql-test/suite/rpl/r/rpl_row_log_innodb.result: Updated result file mysql-test/suite/rpl/r/rpl_switch_stm_row_mixed.result: Updated result file mysql-test/suite/rpl/r/rpl_truncate_3innodb.result: Updated result file mysql-test/suite/rpl/t/rpl_row_create_table.test: Updated result file mysql-test/suite/rpl_ndb/r/rpl_ndb_stm_innodb.result: Updated result file sql/log.cc: - Always write BEGIN and COMMIT around statements, even in autocommit mode. - Added comments for binlog_commit and binlog_rollback. sql/log_event.cc: Added debug trigger to avoid writing xid events to the binlog. mysql-test/suite/rpl_ndb/r/rpl_ndb_transaction.result: Results for new test case mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-master.opt: Options for new test case mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction-slave.opt: Options for new test case mysql-test/suite/rpl_ndb/t/rpl_ndb_transaction.test: Added new test case.
94 lines
5.1 KiB
Text
94 lines
5.1 KiB
Text
CREATE TABLE t1m (m INT, n INT) ENGINE=MYISAM;
|
|
CREATE TABLE t1b (b INT, c INT) ENGINE=BLACKHOLE;
|
|
CREATE TABLE t1n (e INT, f INT) ENGINE=NDB;
|
|
RESET MASTER;
|
|
SET SESSION BINLOG_FORMAT=STATEMENT;
|
|
INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2);
|
|
INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2);
|
|
UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c;
|
|
*** Please look in binlog_multi_engine.test if you have a diff here ****
|
|
START TRANSACTION;
|
|
INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2);
|
|
UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f;
|
|
UPDATE t1n, t1b SET e = 2, b = 3 WHERE f = c;
|
|
COMMIT;
|
|
TRUNCATE t1m;
|
|
TRUNCATE t1b;
|
|
TRUNCATE t1n;
|
|
show binlog events from <binlog_start>;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2)
|
|
master-bin.000001 # Query # # use `test`; BEGIN
|
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2)
|
|
master-bin.000001 # Query # # use `test`; COMMIT
|
|
master-bin.000001 # Query # # use `test`; BEGIN
|
|
master-bin.000001 # Query # # use `test`; UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c
|
|
master-bin.000001 # Query # # use `test`; COMMIT
|
|
master-bin.000001 # Query # # use `test`; BEGIN
|
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2)
|
|
master-bin.000001 # Query # # use `test`; UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f
|
|
master-bin.000001 # Query # # use `test`; UPDATE t1n, t1b SET e = 2, b = 3 WHERE f = c
|
|
master-bin.000001 # Query # # use `test`; COMMIT
|
|
master-bin.000001 # Query # # use `test`; TRUNCATE t1m
|
|
master-bin.000001 # Query # # use `test`; TRUNCATE t1b
|
|
master-bin.000001 # Query # # BEGIN
|
|
master-bin.000001 # Table_map # # table_id: # (test.t1n)
|
|
master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
|
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # COMMIT
|
|
master-bin.000001 # Query # # use `test`; TRUNCATE t1n
|
|
RESET MASTER;
|
|
SET SESSION BINLOG_FORMAT=MIXED;
|
|
INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2);
|
|
INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2);
|
|
INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2);
|
|
UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c;
|
|
UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f;
|
|
ERROR HY000: Binary logging not possible. Message: Statement cannot be written atomically since more than one engine involved and at least one engine is self-logging
|
|
UPDATE t1n, t1b SET e = 2, b = 3 WHERE f = c;
|
|
ERROR HY000: Binary logging not possible. Message: Statement cannot be written atomically since more than one engine involved and at least one engine is self-logging
|
|
TRUNCATE t1m;
|
|
TRUNCATE t1b;
|
|
TRUNCATE t1n;
|
|
show binlog events from <binlog_start>;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2)
|
|
master-bin.000001 # Query # # use `test`; BEGIN
|
|
master-bin.000001 # Query # # use `test`; INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2)
|
|
master-bin.000001 # Query # # use `test`; COMMIT
|
|
master-bin.000001 # Query # # use `test`; BEGIN
|
|
master-bin.000001 # Query # # use `test`; UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c
|
|
master-bin.000001 # Query # # use `test`; COMMIT
|
|
master-bin.000001 # Query # # use `test`; TRUNCATE t1m
|
|
master-bin.000001 # Query # # use `test`; TRUNCATE t1b
|
|
master-bin.000001 # Query # # BEGIN
|
|
master-bin.000001 # Table_map # # table_id: # (test.t1n)
|
|
master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
|
|
master-bin.000001 # Write_rows # # table_id: #
|
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # COMMIT
|
|
master-bin.000001 # Query # # use `test`; TRUNCATE t1n
|
|
RESET MASTER;
|
|
SET SESSION BINLOG_FORMAT=ROW;
|
|
INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2);
|
|
INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2);
|
|
ERROR HY000: Binary logging not possible. Message: Row-based format required for this statement, but not allowed by this combination of engines
|
|
INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2);
|
|
UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c;
|
|
ERROR HY000: Binary logging not possible. Message: Row-based format required for this statement, but not allowed by this combination of engines
|
|
UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f;
|
|
ERROR HY000: Binary logging not possible. Message: Statement cannot be written atomically since more than one engine involved and at least one engine is self-logging
|
|
UPDATE t1n, t1b SET e = 2, b = 3 WHERE f = c;
|
|
ERROR HY000: Binary logging not possible. Message: Row-based format required for this statement, but not allowed by this combination of engines
|
|
show binlog events from <binlog_start>;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
master-bin.000001 # Table_map # # table_id: # (test.t1m)
|
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # BEGIN
|
|
master-bin.000001 # Table_map # # table_id: # (test.t1n)
|
|
master-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
|
|
master-bin.000001 # Write_rows # # table_id: #
|
|
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
master-bin.000001 # Query # # COMMIT
|
|
RESET MASTER;
|
|
DROP TABLE t1m, t1b, t1n;
|