polardbxengine/mysql-test/suite/ndb_binlog/t/ndb_binlog_basic.test

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;
}