1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-30 16:24:05 +03:00

MDEV-16234 CREATE TABLE .. SELECT LASTVAL breaks replication

Fixed by marking NEXTVAL() and LASTVAL() to be replicated row based
This commit is contained in:
Monty
2018-05-22 16:38:02 +03:00
parent 14e5db6fad
commit d6976a7e52
3 changed files with 64 additions and 0 deletions

View File

@ -0,0 +1,35 @@
include/master-slave.inc
[connection master]
#
# MDEV-16234
# CREATE TABLE .. SELECT LASTVAL is written to binlog as single
# statement, causes discrepancy between master and slave
#
CREATE SEQUENCE s1 ENGINE=InnoDB;
SELECT NEXTVAL(s1);
NEXTVAL(s1)
1
CREATE TABLE t1 ENGINE=InnoDB SELECT LASTVAL(s1) AS a;
INSERT INTO t1 VALUES (NEXTVAL(s1));
INSERT INTO t1 VALUES (LASTVAL(s1));
SELECT * FROM t1;
a
1
2
2
SELECT * from s1;
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
1001 1 9223372036854775806 1 1 1000 0 0
connection slave;
SELECT * FROM t1;
a
1
2
2
SELECT * from s1;
next_not_cached_value minimum_value maximum_value start_value increment cache_size cycle_option cycle_count
1001 1 9223372036854775806 1 1 1000 0 0
connection master;
DROP TABLE t1;
DROP SEQUENCE s1;
include/rpl_end.inc

View File

@ -0,0 +1,27 @@
--source include/have_innodb.inc
--source include/have_binlog_format_mixed.inc
--source include/master-slave.inc
--echo #
--echo # MDEV-16234
--echo # CREATE TABLE .. SELECT LASTVAL is written to binlog as single
--echo # statement, causes discrepancy between master and slave
--echo #
CREATE SEQUENCE s1 ENGINE=InnoDB;
SELECT NEXTVAL(s1);
CREATE TABLE t1 ENGINE=InnoDB SELECT LASTVAL(s1) AS a;
INSERT INTO t1 VALUES (NEXTVAL(s1));
INSERT INTO t1 VALUES (LASTVAL(s1));
SELECT * FROM t1;
SELECT * from s1;
--sync_slave_with_master
SELECT * FROM t1;
SELECT * from s1;
# Cleanup
--connection master
DROP TABLE t1;
DROP SEQUENCE s1;
--source include/rpl_end.inc

View File

@ -6791,6 +6791,7 @@ Item *LEX::create_item_func_nextval(THD *thd, Table_ident *table_ident)
TL_WRITE_ALLOW_WRITE,
MDL_SHARED_WRITE))))
return NULL;
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
return new (thd->mem_root) Item_func_nextval(thd, table);
}
@ -6803,6 +6804,7 @@ Item *LEX::create_item_func_lastval(THD *thd, Table_ident *table_ident)
TL_READ,
MDL_SHARED_READ))))
return NULL;
thd->lex->set_stmt_unsafe(LEX::BINLOG_STMT_UNSAFE_SYSTEM_FUNCTION);
return new (thd->mem_root) Item_func_lastval(thd, table);
}