mirror of
				https://github.com/MariaDB/server.git
				synced 2025-11-03 14:33:32 +03:00 
			
		
		
		
	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).
		
			
				
	
	
		
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
# You must run this test with --manager.
 | 
						|
 | 
						|
require_manager;
 | 
						|
 | 
						|
# Don't know why, but using TCP/IP connections makes this test fail
 | 
						|
# with "Lost connection to MySQL server during query" when we
 | 
						|
# issue a query after the server restart.
 | 
						|
# Maybe this is something awkward in mysqltest or in the manager?
 | 
						|
# So we use sockets.
 | 
						|
connect (master,localhost,root,,test,0,master.sock);
 | 
						|
connect (slave,localhost,root,,test,0,slave.sock);
 | 
						|
 | 
						|
connection master;
 | 
						|
reset master;
 | 
						|
drop table if exists t1;
 | 
						|
create table t1 (a int) type=HEAP;
 | 
						|
insert into t1 values(10);
 | 
						|
save_master_pos;
 | 
						|
show binlog events from 79;
 | 
						|
connection slave;
 | 
						|
reset slave;
 | 
						|
start slave;
 | 
						|
sync_with_master;
 | 
						|
show create table t1;
 | 
						|
select * from t1; # should be one row
 | 
						|
 | 
						|
server_stop master;
 | 
						|
server_start master;
 | 
						|
 | 
						|
connection master;
 | 
						|
select * from t1;
 | 
						|
# to check that DELETE is not written twice
 | 
						|
# (the LIMIT is to not use the query cache)
 | 
						|
select * from t1 limit 10;
 | 
						|
save_master_pos;
 | 
						|
show binlog events in 'master-bin.002' from 79;
 | 
						|
 | 
						|
connection slave;
 | 
						|
sync_with_master;
 | 
						|
select * from t1; # should be empty
 | 
						|
 | 
						|
# clean up
 | 
						|
connection master;
 | 
						|
drop table t1;
 | 
						|
save_master_pos;
 | 
						|
connection slave;
 | 
						|
sync_with_master;
 |