mirror of
https://github.com/MariaDB/server.git
synced 2025-08-01 03:47:19 +03:00
Merge mysql-trunk -> mysql-trunk-merge
This commit is contained in:
@ -2,65 +2,65 @@ SET BINLOG_FORMAT=MIXED;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 1;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = a * a WHERE a > 3;
|
||||
COMMIT;
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 1*a WHERE a > 1;
|
||||
ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 2;
|
||||
ERROR HY000: Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 3*a WHERE a > 3;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 4*a WHERE a > 4;
|
||||
COMMIT;
|
||||
SET BINLOG_FORMAT=MIXED;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 1*a WHERE a > 1;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 2;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 3*a WHERE a > 3;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 4*a WHERE a > 4;
|
||||
COMMIT;
|
||||
SET BINLOG_FORMAT=ROW;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 1*a WHERE a > 1;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 2;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 3*a WHERE a > 3;
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 4*a WHERE a > 4;
|
||||
COMMIT;
|
||||
show binlog events from <binlog_start>;
|
||||
|
@ -1,3 +1,6 @@
|
||||
SET @old_binlog_format=@@binlog_format;
|
||||
SET BINLOG_FORMAT=ROW;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
@ -9,6 +12,45 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
# Even though the isolation level might be permissive, truncate
|
||||
# table follows a stricter isolation as its locking is based on
|
||||
# (exclusive) metadata locks.
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
@ -22,6 +64,43 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
@ -35,6 +114,43 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
@ -48,6 +164,43 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
@ -61,3 +214,190 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
**** Truncate of empty table shall be logged
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
TRUNCATE TABLE t2;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 t2 SELECT * FROM t1
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
# Truncate is not supported for SBR if the isolation level is
|
||||
# READ UNCOMMITTED or READ COMMITTED. These specific isolation
|
||||
# levels are tested elsewhere.
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
**** Truncate of empty table shall be logged
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
TRUNCATE TABLE t2;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 t2 SELECT * FROM t1
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
**** Truncate of empty table shall be logged
|
||||
TRUNCATE TABLE t1;
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
TRUNCATE TABLE t2;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
|
||||
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 t2 SELECT * FROM t1
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
SET BINLOG_FORMAT=@old_binlog_format;
|
||||
|
@ -1,3 +1,5 @@
|
||||
SET @old_binlog_format=@@binlog_format;
|
||||
SET BINLOG_FORMAT=ROW;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
|
||||
@ -10,3 +12,91 @@ Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
|
||||
INSERT INTO t2 VALUES (1),(2),(3);
|
||||
**** Truncate of empty table shall be logged
|
||||
TRUNCATE TABLE t1;
|
||||
TRUNCATE TABLE t2;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t2
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug#42643: InnoDB does not support replication of TRUNCATE TABLE
|
||||
#
|
||||
CREATE TABLE t1 (a INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a INT) ENGINE=MyISAM;
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
# Connection: default
|
||||
BEGIN;
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
# Connection: truncate
|
||||
TRUNCATE TABLE t1;
|
||||
# Connection: default
|
||||
INSERT INTO t2 SELECT * FROM t1;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
COMMIT;
|
||||
# Connection: truncate
|
||||
# Reaping TRUNCATE TABLE
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
4
|
||||
# Connection: default
|
||||
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 t2 SELECT * FROM t1
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t2 SELECT * FROM t1
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
DROP TABLE t1,t2;
|
||||
SET BINLOG_FORMAT=@old_binlog_format;
|
||||
|
@ -8,14 +8,14 @@ RESET MASTER;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=INNODB;
|
||||
INSERT INTO t1 VALUES (1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
# Should be logged as statement
|
||||
UPDATE t1 SET b = 2*a WHERE a > 1;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
# Should be logged as rows
|
||||
UPDATE t1 SET b = a * a WHERE a > 3;
|
||||
COMMIT;
|
||||
@ -25,69 +25,69 @@ COMMIT;
|
||||
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE;
|
||||
UPDATE t1 SET b = 1*a WHERE a > 1;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
error ER_BINLOG_STMT_MODE_AND_ROW_ENGINE;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 2;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 3*a WHERE a > 3;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 4*a WHERE a > 4;
|
||||
COMMIT;
|
||||
|
||||
SET BINLOG_FORMAT=MIXED;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 1*a WHERE a > 1;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 2;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 3*a WHERE a > 3;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 4*a WHERE a > 4;
|
||||
COMMIT;
|
||||
|
||||
SET BINLOG_FORMAT=ROW;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 1*a WHERE a > 1;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 2*a WHERE a > 2;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 3*a WHERE a > 3;
|
||||
COMMIT;
|
||||
|
||||
BEGIN;
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
BEGIN;
|
||||
UPDATE t1 SET b = 4*a WHERE a > 4;
|
||||
COMMIT;
|
||||
|
||||
|
@ -1 +1 @@
|
||||
--max_binlog_size=4096
|
||||
--max_binlog_size=4096 --default-storage-engine=MyISAM
|
||||
|
@ -1 +1 @@
|
||||
--innodb_lock_wait_timeout=2
|
||||
--innodb_lock_wait_timeout=2 --default-storage-engine=MyISAM
|
||||
|
@ -1 +1 @@
|
||||
--max_binlog_size=4096
|
||||
--max_binlog_size=4096 --default-storage-engine=MyISAM
|
||||
|
@ -1 +1 @@
|
||||
--innodb_lock_wait_timeout=2 --binlog-direct-non-transactional-updates=FALSE
|
||||
--innodb_lock_wait_timeout=2 --binlog-direct-non-transactional-updates=FALSE --default-storage-engine=MyISAM
|
||||
|
@ -1,20 +1,18 @@
|
||||
source include/have_log_bin.inc;
|
||||
source include/have_innodb.inc;
|
||||
|
||||
# It is necessary to reset the master since otherwise the binlog test
|
||||
# might show the wrong binary log. The default for SHOW BINLOG EVENTS
|
||||
# is to show the first binary log, not the current one (which is
|
||||
# actually a better idea).
|
||||
let $engine = InnoDB;
|
||||
|
||||
SET @old_binlog_format=@@binlog_format;
|
||||
|
||||
SET BINLOG_FORMAT=ROW;
|
||||
RESET MASTER;
|
||||
|
||||
let $engine = InnoDB;
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
# Under transaction isolation level READ UNCOMMITTED and READ
|
||||
# COMMITTED, InnoDB does not permit statement-based replication of
|
||||
# row-deleting statement. In these cases, TRUNCATE TABLE should still
|
||||
# be replicated as a statement.
|
||||
--echo # Even though the isolation level might be permissive, truncate
|
||||
--echo # table follows a stricter isolation as its locking is based on
|
||||
--echo # (exclusive) metadata locks.
|
||||
|
||||
let $before_truncate = SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
@ -27,3 +25,20 @@ source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
let $before_truncate = SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
RESET MASTER;
|
||||
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
--echo # Truncate is not supported for SBR if the isolation level is
|
||||
--echo # READ UNCOMMITTED or READ COMMITTED. These specific isolation
|
||||
--echo # levels are tested elsewhere.
|
||||
|
||||
let $before_truncate = SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
let $before_truncate = SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
SET BINLOG_FORMAT=@old_binlog_format;
|
||||
|
@ -1,11 +1,17 @@
|
||||
source include/have_log_bin.inc;
|
||||
|
||||
# It is necessary to reset the master since otherwise the binlog test
|
||||
# might show the wrong binary log. The default for SHOW BINLOG EVENTS
|
||||
# is to show the first binary log, not the current one (which is
|
||||
# actually a better idea).
|
||||
|
||||
RESET MASTER;
|
||||
SET @old_binlog_format=@@binlog_format;
|
||||
|
||||
let $engine = MyISAM;
|
||||
|
||||
SET BINLOG_FORMAT=ROW;
|
||||
RESET MASTER;
|
||||
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
RESET MASTER;
|
||||
|
||||
source extra/binlog_tests/binlog_truncate.test;
|
||||
|
||||
SET BINLOG_FORMAT=@old_binlog_format;
|
||||
|
@ -9,6 +9,7 @@
|
||||
# Do not use any TAB characters for whitespace.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
binlog_truncate_innodb : BUG#42643 2009-02-06 mats Changes to InnoDB requires to complete fix for BUG#36763
|
||||
binlog_unsafe : BUG#50312 2010-01-13 lsoares Warnings for unsafe sub-statement not returned to client
|
||||
binlog_spurious_ddl_errors : BUG#54195 2010-06-03 alik binlog_spurious_ddl_errors.test fails, thus disabled
|
||||
|
Reference in New Issue
Block a user