mirror of
https://github.com/MariaDB/server.git
synced 2025-01-22 14:54:20 +01:00
e3708c231e
TRUNCATE TABLE fails to replicate when stmt-based binlogging is not supported. There were two separate problems with the code, both of which are fixed with this patch: 1. An error was printed by InnoDB for TRUNCATE TABLE in statement mode when the in isolation levels READ COMMITTED and READ UNCOMMITTED since InnoDB does permit statement-based replication for DML statements. However, the TRUNCATE TABLE is not transactional, but is a DDL, and should therefore be allowed to be replicated as a statement. 2. The statement was not logged in mixed mode because of the error above, but the error was not reported to the client. This patch fixes the problem by treating TRUNCATE TABLE a DDL, that is, it is always logged as a statement and not reporting an error from InnoDB for TRUNCATE TABLE.
27 lines
795 B
Text
27 lines
795 B
Text
# BUG #36763: TRUNCATE TABLE fails to replicate when stmt-based
|
|
# binlogging is not supported.
|
|
|
|
# This should always be logged as a statement, even when executed as a
|
|
# row-by-row deletion.
|
|
|
|
# $before_truncate A statement to execute (just) before issuing the
|
|
# TRUNCATE TABLE
|
|
|
|
|
|
eval CREATE TABLE t1 (a INT) ENGINE=$engine;
|
|
eval CREATE TABLE t2 (a INT) ENGINE=$engine;
|
|
INSERT INTO t2 VALUES (1),(2),(3);
|
|
let $binlog_start = query_get_value("SHOW MASTER STATUS", Position, 1);
|
|
if (`select length('$before_truncate') > 0`) {
|
|
eval $before_truncate;
|
|
}
|
|
--echo **** Truncate of empty table shall be logged
|
|
TRUNCATE TABLE t1;
|
|
|
|
if (`select length('$before_truncate') > 0`) {
|
|
eval $before_truncate;
|
|
}
|
|
TRUNCATE TABLE t2;
|
|
source include/show_binlog_events.inc;
|
|
|
|
DROP TABLE t1,t2;
|