mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
bbd2adf4ba
when we open the HEAP table for the first time since server restart, in hp_open(), we set a flag to propagate this info to the handler level which then writes a DELETE FROM this_heap_table to the binlog. It is not a perfect solution for the bug, because between the server start and the first open of the table, the slave still had old data in his table so a SELECT on the slave may show wrong content. But if there is a --init-file to populate the HEAP table on master as startup, then this is a safe fix (I'll put a note about init-file in the HEAP section of the manual). heap/hp_info.c: new info variable implicit_emptied heap/hp_open.c: If this is the first open of the HEAP table, it means it is empty, so we mark it. include/heap.h: new variables implicit_emptied (we need one in HEAPINFO for the hp_info() call). sql/ha_heap.cc: report info to upper level sql/handler.h: new info 'implicit_emptied' in the handler level; only HEAP uses it. sql/sql_base.cc: When a HEAP table is opened for the first time, write a DELETE FROM to the binlog, for replication and mysqlbinlog|mysql. Monty: I added the entry->file->implicit_emptied= 0;
29 lines
793 B
Text
29 lines
793 B
Text
reset master;
|
|
drop table if exists t1;
|
|
create table t1 (a int) type=HEAP;
|
|
insert into t1 values(10);
|
|
show binlog events from 79;
|
|
Log_name Pos Event_type Server_id Orig_log_pos Info
|
|
master-bin.001 79 Query 1 79 use `test`; create table t1 (a int) type=HEAP
|
|
master-bin.001 147 Query 1 147 use `test`; DELETE FROM `test`.`t1`
|
|
master-bin.001 205 Query 1 205 use `test`; insert into t1 values(10)
|
|
reset slave;
|
|
start slave;
|
|
show create table t1;
|
|
Table Create Table
|
|
t1 CREATE TABLE `t1` (
|
|
`a` int(11) default NULL
|
|
) TYPE=HEAP
|
|
select * from t1;
|
|
a
|
|
10
|
|
select * from t1;
|
|
a
|
|
select * from t1 limit 10;
|
|
a
|
|
show binlog events in 'master-bin.002' from 79;
|
|
Log_name Pos Event_type Server_id Orig_log_pos Info
|
|
master-bin.002 79 Query 1 79 use `test`; DELETE FROM `test`.`t1`
|
|
select * from t1;
|
|
a
|
|
drop table t1;
|