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