167 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
			
		
		
	
	
			167 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
-- source include/have_ndb.inc
 | 
						|
-- source include/have_binlog_format_mixed_or_row.inc
 | 
						|
 | 
						|
#
 | 
						|
# basic insert, update, delete test, alter, rename, drop
 | 
						|
# check that ndb_binlog_index gets the right info
 | 
						|
#
 | 
						|
reset master;
 | 
						|
 | 
						|
create table t1 (a int primary key) engine=ndb;
 | 
						|
insert into t1 values (0),(1),(2),(3),(4),(5),(6),(7),(8),(9);
 | 
						|
save_master_pos;
 | 
						|
--replace_column 1 #
 | 
						|
select @max_epoch:=max(epoch)-1 from mysql.ndb_binlog_index;
 | 
						|
 | 
						|
delete from t1;
 | 
						|
alter table t1 add (b_x int);
 | 
						|
 | 
						|
alter table t1 algorithm=inplace, rename column b_x to b;
 | 
						|
--source include/show_binlog_events.inc
 | 
						|
 | 
						|
insert into t1 values (3,3),(4,4);
 | 
						|
alter table t1 rename t2;
 | 
						|
 | 
						|
# get all in one epoch
 | 
						|
begin;
 | 
						|
insert into t2 values (1,1),(2,2);
 | 
						|
update t2 set b=1 where a=3;
 | 
						|
delete from t2 where a=4;
 | 
						|
commit;
 | 
						|
drop table t2;
 | 
						|
 | 
						|
# check that above is ok
 | 
						|
# (save_master_pos waits for last gcp to complete, ensuring that we have
 | 
						|
#  the expected data in the binlog)
 | 
						|
save_master_pos;
 | 
						|
select inserts from mysql.ndb_binlog_index where epoch > @max_epoch and inserts > 5;
 | 
						|
select deletes from mysql.ndb_binlog_index where epoch > @max_epoch and deletes > 5;
 | 
						|
select inserts,updates,deletes from 
 | 
						|
  mysql.ndb_binlog_index where epoch > @max_epoch and updates > 0;
 | 
						|
 | 
						|
#
 | 
						|
# check that purge clears the ndb_binlog_index
 | 
						|
#
 | 
						|
flush logs;
 | 
						|
--sleep 1
 | 
						|
# Fix windows dir separators in file name of the warning
 | 
						|
--replace_regex /\.[\\\/]binlog/.\/binlog/;
 | 
						|
purge master logs before now();
 | 
						|
 | 
						|
select count(*) from mysql.ndb_binlog_index;
 | 
						|
 | 
						|
#
 | 
						|
# several tables in different databases
 | 
						|
# check that same table name in different databases don't mix up
 | 
						|
#
 | 
						|
create table t1 (a int primary key, b int) engine=ndb;
 | 
						|
create database mysqltest;
 | 
						|
use mysqltest;
 | 
						|
create table t1 (c int, d int primary key) engine=ndb;
 | 
						|
use test;
 | 
						|
 | 
						|
insert into mysqltest.t1 values (2,1),(2,2);
 | 
						|
save_master_pos;
 | 
						|
--replace_column 1 #
 | 
						|
select @max_epoch:=max(epoch)-1 from mysql.ndb_binlog_index;
 | 
						|
 | 
						|
drop table t1;
 | 
						|
drop database mysqltest;
 | 
						|
select inserts,updates,deletes from 
 | 
						|
  mysql.ndb_binlog_index where epoch > @max_epoch and inserts > 0;
 | 
						|
 | 
						|
#
 | 
						|
# Check optimize table does not send any event to binlog
 | 
						|
#
 | 
						|
 | 
						|
create table t1 (c1 int not null primary key, c2 blob default null) engine=ndbcluster default charset=latin1;
 | 
						|
insert into t1 values (1, null), (2, null), (3, null), (4, null);
 | 
						|
insert into t1 select c1+4,c2 from t1;
 | 
						|
insert into t1 select c1+8,c2 from t1;
 | 
						|
insert into t1 select c1+16,c2 from t1;
 | 
						|
insert into t1 select c1+32,c2 from t1;
 | 
						|
insert into t1 select c1+64,c2 from t1;
 | 
						|
insert into t1 select c1+128,c2 from t1;
 | 
						|
insert into t1 select c1+256,c2 from t1;
 | 
						|
insert into t1 select c1+512,c2 from t1;
 | 
						|
 | 
						|
# wait for last gcp to complete, ensuring that we have
 | 
						|
# the expected data in the binlog
 | 
						|
save_master_pos;
 | 
						|
 | 
						|
let $before = `select count(*)
 | 
						|
  from mysql.ndb_binlog_index
 | 
						|
  where epoch > @max_epoch and
 | 
						|
    (inserts > 0 or updates > 0 or deletes > 0)`;
 | 
						|
 | 
						|
optimize table t1;
 | 
						|
save_master_pos;
 | 
						|
 | 
						|
# Ensure that optimize have not sent any event to binlog
 | 
						|
let $optimize_diff = `select count(*) <> $before
 | 
						|
  from mysql.ndb_binlog_index
 | 
						|
  where epoch > @max_epoch and
 | 
						|
    (inserts > 0 or updates > 0 or deletes > 0)`;
 | 
						|
 | 
						|
if ($optimize_diff)
 | 
						|
{
 | 
						|
  die Optimize table should not send any events to binlog;
 | 
						|
}
 | 
						|
 | 
						|
drop table t1;
 | 
						|
 | 
						|
#
 | 
						|
# Make binlog to ignore an empty blob column update
 | 
						|
# having before- and after-values 'null'
 | 
						|
# when performed in a separate epoch and
 | 
						|
# empty epochs are not logged.
 | 
						|
# Run the test twice, with ndb_log_empty_epochs ON and OFF.
 | 
						|
#  
 | 
						|
 | 
						|
let $repetitions=2;
 | 
						|
SET GLOBAL ndb_log_empty_epochs=ON;
 | 
						|
while ($repetitions)
 | 
						|
{
 | 
						|
  SHOW VARIABLES LIKE 'ndb_log_empty_epochs';
 | 
						|
  create table t1 (c1 int not null primary key, c2 blob default null) engine=ndbcluster default charset=latin1;
 | 
						|
  insert into t1 values (1, null);
 | 
						|
 | 
						|
  # Avoid the following update being performed within the same epoch by
 | 
						|
  # synchronising with Binlog
 | 
						|
  --disable_result_log
 | 
						|
  show binlog events;
 | 
						|
  --enable_result_log
 | 
						|
 | 
						|
  update t1 set c2=null;
 | 
						|
  select * from t1;
 | 
						|
 | 
						|
  --disable_result_log
 | 
						|
  show binlog events;
 | 
						|
  --enable_result_log
 | 
						|
 | 
						|
  optimize table t1;
 | 
						|
  select * from t1;
 | 
						|
  drop table t1;
 | 
						|
 | 
						|
  create table t1 (c1 int not null primary key, c2 varchar(1024) default null) engine=ndbcluster default charset=latin1;
 | 
						|
  insert into t1 values (3, null);
 | 
						|
  select * from t1;
 | 
						|
 | 
						|
  --disable_result_log
 | 
						|
  show binlog events;
 | 
						|
  --enable_result_log
 | 
						|
 | 
						|
  optimize table t1;
 | 
						|
  select * from t1;
 | 
						|
  drop table t1;
 | 
						|
 | 
						|
  # Repeat the test with
 | 
						|
  SET GLOBAL ndb_log_empty_epochs=OFF;
 | 
						|
 | 
						|
  --disable_result_log
 | 
						|
  show binlog events;
 | 
						|
  --enable_result_log
 | 
						|
 | 
						|
  dec $repetitions;
 | 
						|
}
 |