mirror of
https://github.com/MariaDB/server.git
synced 2025-09-02 09:41:40 +03:00
errors In the fix of BUG#39934 in 5.1-rep+3, errors are generated when binlog_format=row and a statement modifies a table restricted to statement-logging (ER_BINLOG_ROW_MODE_AND_STMT_ENGINE); or if binlog_format=statement and a statement modifies a table restricted to row-logging (ER_BINLOG_STMT_MODE_AND_ROW_ENGINE). However, some DDL statements that lock tables (e.g. ALTER TABLE, CREATE INDEX and CREATE TRIGGER) were causing spurious errors, although no row might be inserted into the binary log. To fix the problem, we tagged statements that may generate rows into the binary log and thence the warning messages are only printed out when the appropriate conditions hold and rows might be changed.
106 lines
5.5 KiB
Plaintext
106 lines
5.5 KiB
Plaintext
call mtr.add_suppression("Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT");
|
|
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 t1b VALUES (1,1), (1,2), (2,1), (2,2);
|
|
INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2);
|
|
UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c;
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
|
|
The last event before the COMMIT is use `test`; 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;
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement accesses nontransactional table as well as transactional or temporary table, and writes to any of them.
|
|
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
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2)
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2)
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; UPDATE t1m, t1b SET m = 2, b = 3 WHERE n = c
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; UPDATE t1n, t1b SET e = 2, b = 3 WHERE f = c
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2)
|
|
mysqld-bin.000001 # Query # # use `test`; UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Table_map # # table_id: # (test.t1n)
|
|
mysqld-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
|
|
mysqld-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # use `test`; TRUNCATE t1m
|
|
mysqld-bin.000001 # Query # # use `test`; TRUNCATE t1b
|
|
mysqld-bin.000001 # Query # # use `test`; TRUNCATE t1n
|
|
RESET MASTER;
|
|
SET SESSION BINLOG_FORMAT=MIXED;
|
|
INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2);
|
|
INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2);
|
|
The last event before the COMMIT is use `test`; INSERT INTO t1m 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: Cannot execute statement: impossible to write to binary log since more than one engine is 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
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; INSERT INTO t1b VALUES (1,1), (1,2), (2,1), (2,2)
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Query # # use `test`; INSERT INTO t1m VALUES (1,1), (1,2), (2,1), (2,2)
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Table_map # # table_id: # (test.t1n)
|
|
mysqld-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
|
|
mysqld-bin.000001 # Write_rows # # table_id: #
|
|
mysqld-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # use `test`; TRUNCATE t1m
|
|
mysqld-bin.000001 # Query # # use `test`; TRUNCATE t1b
|
|
mysqld-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);
|
|
INSERT INTO t1n VALUES (1,1), (1,2), (2,1), (2,2);
|
|
UPDATE t1m, t1n SET m = 2, e = 3 WHERE n = f;
|
|
ERROR HY000: Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.
|
|
UPDATE t1n, t1b SET e = 2, b = 3 WHERE f = c;
|
|
ERROR HY000: Cannot execute statement: impossible to write to binary log since more than one engine is involved and at least one engine is self-logging.
|
|
show binlog events from <binlog_start>;
|
|
Log_name Pos Event_type Server_id End_log_pos Info
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Table_map # # table_id: # (test.t1m)
|
|
mysqld-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Table_map # # table_id: # (test.t1b)
|
|
mysqld-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
mysqld-bin.000001 # Query # # BEGIN
|
|
mysqld-bin.000001 # Table_map # # table_id: # (test.t1n)
|
|
mysqld-bin.000001 # Table_map # # table_id: # (mysql.ndb_apply_status)
|
|
mysqld-bin.000001 # Write_rows # # table_id: #
|
|
mysqld-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
|
mysqld-bin.000001 # Query # # COMMIT
|
|
RESET MASTER;
|
|
DROP TABLE t1m, t1b, t1n;
|