mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for BUG#2477 "Slave stop with error after master reboot if use HEAP tables":
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;
This commit is contained in:
29
mysql-test/r/rpl_heap.result
Normal file
29
mysql-test/r/rpl_heap.result
Normal file
@ -0,0 +1,29 @@
|
||||
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;
|
Reference in New Issue
Block a user