442 lines
11 KiB
Plaintext
442 lines
11 KiB
Plaintext
# The include statement below is a temp one for tests that are yet to
|
|
#be ported to run with InnoDB,
|
|
#but needs to be kept for tests that would need MyISAM in future.
|
|
--source include/force_myisam_default.inc
|
|
|
|
# test create 2 myisam tables with same name on
|
|
# different servers hence disable test for embedded
|
|
# which only runs on one
|
|
-- source include/not_embedded.inc
|
|
-- source include/have_multi_ndb.inc
|
|
|
|
-- disable_query_log
|
|
call mtr.add_suppression("Skipping locally defined table 'test.t1'");
|
|
-- enable_query_log
|
|
|
|
--disable_warnings
|
|
connection server2;
|
|
drop table if exists t1, t2, t3, t4;
|
|
flush status;
|
|
connection server1;
|
|
drop table if exists t1, t2, t3, t4;
|
|
flush status;
|
|
--enable_warnings
|
|
|
|
# Create test tables on server1
|
|
create table t1 (a int) engine=ndbcluster;
|
|
create table t2 (a int) engine=ndbcluster;
|
|
insert into t1 value (2);
|
|
insert into t2 value (3);
|
|
select * from t1;
|
|
select * from t2;
|
|
show status like 'handler_discover%';
|
|
|
|
# Check dropping and recreating table on same server
|
|
connect (con1,localhost,root,,test);
|
|
connect (con2,localhost,root,,test);
|
|
connection con1;
|
|
select * from t1;
|
|
connection con2;
|
|
drop table t1;
|
|
create table t1 (a int) engine=ndbcluster;
|
|
insert into t1 value (2);
|
|
connection con1;
|
|
select * from t1;
|
|
|
|
# Check dropping and recreating table on different server
|
|
connection server2;
|
|
show status like 'handler_discover%';
|
|
drop table t1;
|
|
create table t1 (a int) engine=ndbcluster;
|
|
insert into t1 value (2);
|
|
connection server1;
|
|
select * from t1;
|
|
select * from t1;
|
|
|
|
# Connect to server2 and use the tables from there
|
|
connection server2;
|
|
flush status;
|
|
select * from t1;
|
|
update t1 set a=3 where a=2;
|
|
show status like 'handler_discover%';
|
|
|
|
# Create a new table on server2
|
|
create table t3 (a int not null primary key, b varchar(22),
|
|
c int, last_col text) engine=ndb;
|
|
insert into t3 values(1, 'Hi!', 89, 'Longtext column');
|
|
create table t4 (pk int primary key, b int) engine=ndb;
|
|
|
|
# Check that the tables are accessible from server1
|
|
connection server1;
|
|
select * from t1;
|
|
select * from t3;
|
|
show tables like 't4';
|
|
show tables;
|
|
|
|
drop table t1, t2, t3, t4;
|
|
# bug#21378
|
|
connection server1;
|
|
create table t1(c1 int key)ENGINE=MyISAM;
|
|
insert into t1 values(1),(3),(5);
|
|
select * from t1 order by c1;
|
|
|
|
connection server2;
|
|
show tables;
|
|
create table t1(c1 int key)ENGINE=MyISAM;
|
|
insert into t1 values(100),(344),(533);
|
|
select * from t1 order by c1;
|
|
|
|
connection server1;
|
|
alter table t1 engine=ndb;
|
|
|
|
connection server2;
|
|
show tables;
|
|
select * from t1 order by c1;
|
|
drop table t1;
|
|
|
|
connection server1;
|
|
select * from t1 order by c1;
|
|
drop table t1;
|
|
# End of 4.1 tests
|
|
|
|
# Check distributed drop of database in 5.1
|
|
create database db;
|
|
use db;
|
|
create table t1(x int) engine=ndb;
|
|
|
|
connection server2;
|
|
use db;
|
|
show tables;
|
|
|
|
connection server1;
|
|
drop database db;
|
|
|
|
connection server2;
|
|
--error 1049
|
|
show tables;
|
|
|
|
connection server1;
|
|
|
|
# bug#21495
|
|
create database db;
|
|
use db;
|
|
create table t1(x int) engine=ndb;
|
|
|
|
connection server2;
|
|
use db;
|
|
create table t2(x int) engine=myisam;
|
|
show tables;
|
|
|
|
connection server1;
|
|
drop database db;
|
|
|
|
connection server2;
|
|
show tables;
|
|
drop database db;
|
|
|
|
# Bug#44529 Cannot drop database with stale temporary tables
|
|
connection server1;
|
|
create database db;
|
|
use db;
|
|
create table t1(x int) engine=ndb;
|
|
connection server2;
|
|
--let $MYSQLD_DATADIR= `SELECT @@datadir`
|
|
use db;
|
|
show tables;
|
|
--write_file $MYSQLD_DATADIR/db/#sql-1c17_25d0.ndb
|
|
EOF
|
|
connection server1;
|
|
drop database db;
|
|
connection server2;
|
|
--error ER_BAD_DB_ERROR
|
|
use db;
|
|
|
|
#
|
|
# bug#31470, ndb table with special characters in name
|
|
# are not discovered correctly
|
|
connection server1;
|
|
use test;
|
|
create table `test`.`t1$EX`
|
|
(server_id int unsigned,
|
|
master_server_id int unsigned,
|
|
master_epoch bigint unsigned,
|
|
count int unsigned,
|
|
primary key(server_id, master_server_id,
|
|
master_epoch, count))
|
|
engine ndb;
|
|
|
|
# check that table shows up ok on both servers
|
|
# before bugfix table would not show up on server2
|
|
--replace_regex /EX/ex/
|
|
show tables like '%$%';
|
|
connection server2;
|
|
use test;
|
|
--replace_regex /EX/ex/
|
|
show tables like '%$%';
|
|
|
|
# check cleanup
|
|
drop table `test`.`t1$EX`;
|
|
show tables like '%$%';
|
|
|
|
connection server1;
|
|
show tables like '%$%';
|
|
|
|
#
|
|
# Bug #42614 Mysql auto locate databases can overwrite frm data.
|
|
#
|
|
connection server1;
|
|
create table t1(s char(1)) engine = myisam;
|
|
insert into t1 values ("a"),("b"),("c");
|
|
connection server2;
|
|
create table t1(s char(1)) engine = ndb;
|
|
insert into t1 values ("d"),("e"),("f");
|
|
connection server1;
|
|
## Restart mysqld nodes
|
|
--echo Restarting mysqld
|
|
let $mysqld_name=mysqld.1.1;
|
|
--source include/restart_mysqld.inc
|
|
use test;
|
|
select * from t1 order by s;
|
|
connection server2;
|
|
select * from t1 order by s;
|
|
drop table t1;
|
|
connection server1;
|
|
select * from t1 order by s;
|
|
connection server2;
|
|
create table t1(s char(1)) engine = ndb;
|
|
insert into t1 values ("g"),("h"),("i");
|
|
connection server1;
|
|
show tables;
|
|
select * from t1 order by s;
|
|
|
|
#
|
|
# Clean-up
|
|
#
|
|
connection server1;
|
|
drop table t1;
|
|
connection server2;
|
|
drop table t1;
|
|
|
|
#
|
|
--echo Bug 11894966 - second mysqld does not have table after non
|
|
--echo distributed table alter to ndb
|
|
#
|
|
# - only queries with "autodiscover" see the new table
|
|
# on second mysqld since schema distribution does not
|
|
# create the table on second mysqld(at least when !ndb_binlog_running)
|
|
#
|
|
connection server1;
|
|
|
|
# Create table t1 in myisam
|
|
create table t1(a int) engine myisam;
|
|
insert into t1 values(37);
|
|
|
|
# Alter t1 into ndb
|
|
alter table t1 engine ndb;
|
|
|
|
# Switch to other mysqld
|
|
connection server2;
|
|
|
|
# Check that .frm and .ndb file has been created
|
|
# on second mysqld
|
|
let $datadir2 = `select @@datadir`;
|
|
#echo datadir2: $datadir2;
|
|
--file_exists $datadir2/test/t1.frm
|
|
--file_exists $datadir2/test/t1.ndb
|
|
|
|
# Check that truncate works on second mysqld
|
|
# (didn't work before fix)
|
|
truncate t1;
|
|
|
|
# Cleanup
|
|
drop table t1;
|
|
connection server1;
|
|
|
|
# bug#7798
|
|
create table t1(a int primary key, b int not null, index(b)) engine = ndb;
|
|
insert into t1 values (1,1), (2,2);
|
|
set autocommit=0;
|
|
begin;
|
|
select count(*) from t1;
|
|
connection server2;
|
|
ALTER TABLE t1 algorithm=copy, ADD COLUMN c int;
|
|
connection server1;
|
|
select a from t1 where b = 2;
|
|
commit;
|
|
show tables;
|
|
drop table t1;
|
|
|
|
#
|
|
# The mysql.ndb_schema table should be not be visible in SHOW TABLES
|
|
# or I_S.TABLES
|
|
#
|
|
SHOW TABLES FROM mysql LIKE 'ndb_schema';
|
|
SELECT count(1) FROM INFORMATION_SCHEMA.TABLES
|
|
WHERE TABLE_SCHEMA = 'mysql' AND TABLE_NAME = 'ndb_schema';
|
|
|
|
connection server1;
|
|
#
|
|
# Bug#14798043 DROP DATABASE PERFORMANCE_SCHEMA DROPS IT ON ALL SQL NODES
|
|
# Check that local tables in system database are not dropped remotely
|
|
|
|
create table mysql.dummy(a int primary key, b int) engine=myisam;
|
|
connection server2;
|
|
create table mysql.dummy(a int primary key, b int) engine=myisam;
|
|
connection server1;
|
|
drop table mysql.dummy;
|
|
connection server2;
|
|
show create table mysql.dummy;
|
|
drop table mysql.dummy;
|
|
|
|
#
|
|
#Bug #19550973: CREATE/DROP DATABASE STATEMENT SEGFAULTS IF IDENTIFIER LENGTH IS >=64
|
|
#
|
|
--connection server1
|
|
--echo #
|
|
--echo # Testing schema identifier with length 63
|
|
--echo # NDB's identifier length limit is 63
|
|
--echo #
|
|
CREATE DATABASE
|
|
abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz12;
|
|
|
|
--echo #create and drop NDB tables to test the database
|
|
CREATE TABLE
|
|
abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz12.t1
|
|
(a int)
|
|
ENGINE=NDB;
|
|
DROP TABLE abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz12.t1;
|
|
DROP DATABASE abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz12;
|
|
|
|
--echo #
|
|
--echo # Testing schema identifier with length 64
|
|
--echo # mysqld allows until 64, but ndb's limit is 63
|
|
--echo #
|
|
CREATE DATABASE
|
|
abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123;
|
|
|
|
--echo #verify database existence
|
|
USE abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123;
|
|
--echo #create normal table
|
|
CREATE TABLE t1
|
|
(a int);
|
|
--echo #create ndb table and fail
|
|
--error ER_TOO_LONG_IDENT
|
|
CREATE TABLE t2
|
|
(a int)
|
|
ENGINE=NDB;
|
|
show warnings;
|
|
|
|
--echo #dbs with identifier length = 64 won't be replicated to other mysqlds
|
|
--echo #verify the above created db is not present in the other mysqld
|
|
--connection server2
|
|
--error ER_BAD_DB_ERROR
|
|
USE abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123;
|
|
--connection server1
|
|
|
|
--echo #testing alter database
|
|
ALTER DATABASE
|
|
abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123
|
|
character set=utf8;
|
|
|
|
# Read current mysqld datadir to use for masking
|
|
let $MYSQLD_DATADIR= `select @@datadir`;
|
|
|
|
--echo #test alter table with this database
|
|
CREATE DATABASE db1;
|
|
CREATE TABLE db1.t1
|
|
(a int)
|
|
ENGINE=NDB;
|
|
--error ER_TOO_LONG_IDENT
|
|
ALTER TABLE db1.t1
|
|
RENAME abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123.t3;
|
|
#replace win slashes since not using default database
|
|
--replace_regex /[\\]/\//
|
|
#remove any absolute path in warning string
|
|
--replace_result $MYSQLD_DATADIR ./ master-data/ ''
|
|
SHOW WARNINGS;
|
|
--error ER_TOO_LONG_IDENT
|
|
ALTER TABLE db1.t1
|
|
RENAME db1.abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123;
|
|
#replace win slashes since not using default database
|
|
--replace_regex /[\\]/\//
|
|
#remove any absolute path in warning string
|
|
--replace_result $MYSQLD_DATADIR ./ master-data/ ''
|
|
SHOW WARNINGS;
|
|
DROP DATABASE db1;
|
|
DROP DATABASE
|
|
abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123;
|
|
|
|
--echo #checking database doesn't exists
|
|
--error ER_BAD_DB_ERROR
|
|
USE abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz123;
|
|
|
|
--echo #
|
|
--echo # Testing schema identifier with length 65
|
|
--echo # mysqld rejects length of 65 and more
|
|
--echo #
|
|
--error ER_TOO_LONG_IDENT
|
|
CREATE DATABASE
|
|
abcdefghijklmnopqrstuvwxyz1234567890bcdefghijklmnopqrstuvwxyz1234;
|
|
|
|
|
|
#
|
|
# Bug#20480035 REMOVE MCP_BUG44529
|
|
# - The mysqld participating in schema distribution
|
|
# of DROP DATABASE failed to remove the database
|
|
# when there was a .ndb file in the directory
|
|
# which didn't have any corresponding table in NDB.
|
|
# - Fix by adding an additional check for leftover .ndb
|
|
# files in ndbcluster's DROP DATABASE implementation.
|
|
#
|
|
|
|
--echo #
|
|
--echo # 1. Check that DROP DATABASE removes leftover .ndb file
|
|
--echo # in the database directory
|
|
--echo #
|
|
--connection server1
|
|
create database db;
|
|
use db;
|
|
create table t1(x int) engine=ndb;
|
|
create table t2(b int primary key) engine=ndb;
|
|
create table t3_default_engine(c int primary key);
|
|
--let $MYSQLD_DATADIR= `SELECT @@datadir`
|
|
# Write emtpy .ndb file with normal file name
|
|
--write_file $MYSQLD_DATADIR/db/t4.ndb
|
|
EOF
|
|
# Write emtpy .ndb file with temporary file name
|
|
--write_file $MYSQLD_DATADIR/db/#sql-1c17_25d0.ndb
|
|
EOF
|
|
|
|
drop database db;
|
|
|
|
--echo #
|
|
--echo # 2. Check that DROP DATABASE removes leftover .ndb file
|
|
--echo # in the database directory on participating mysqld.
|
|
--echo # This is the same testcase as BUG44529 with comments
|
|
--echo #
|
|
--echo # Create DATABASE and one table on first mysqld
|
|
--connection server1
|
|
create database db;
|
|
use db;
|
|
create table t1(x int) engine=ndb;
|
|
|
|
--echo # Show that DATABASE exist on the pariticipant(second mysqld)
|
|
--echo # and create a .ndb file without corresponding table in NDB
|
|
--connection server2
|
|
use db;
|
|
show tables;
|
|
--let $MYSQLD_DATADIR= `SELECT @@datadir`
|
|
--write_file $MYSQLD_DATADIR/db/#sql-1c17_25d0.ndb
|
|
EOF
|
|
|
|
--echo # Drop the DATABASE from first mysqld
|
|
--connection server1
|
|
drop database db;
|
|
|
|
--echo # Check that the pariticipant has dropped the DATABASE
|
|
--connection server2
|
|
--error ER_BAD_DB_ERROR
|
|
use db;
|
|
|
|
--connection server1
|