mirror of
https://github.com/MariaDB/server.git
synced 2025-01-18 04:53:01 +01:00
85a590a26c
Moved .progress files into the log directory Moved 'cluster' database tables into the MySQL database, to not have 'cluster' beeing a reserved database name Fixed bug where mysqld got a core dump when trying to use a table created by MySQL 3.23 Fixed some compiler warnings Fixed small memory leak in libmysql Note that this doesn't changeset doesn't include the new mysqldump.c code required to run some tests. This will be added when I merge 5.0 to 5.1 client/client_priv.h: Added OPT_DEBUG_INFO and OPT_COLUMN_TYPES client/mysql.cc: Split --debug-info into --debug-info and --column-type-info client/mysql_upgrade.c: Give only error info at end if using --debug-info client/mysqladmin.cc: Added --debug-info to detect memory leaks in mysqltest client/mysqlbinlog.cc: Added --debug-info to detect memory leaks in mysqltest client/mysqlcheck.c: Added --debug-info to detect memory leaks in mysqltest client/mysqlimport.c: Added --debug-info to detect memory leaks in mysqltest client/mysqlshow.c: Added --debug-info to detect memory leaks in mysqltest client/mysqltest.c: Added --debug-info to detect memory leaks in mysqltest Added option --logdir to force .progress files in a specific directory libmysql/libmysql.c: Fixed memory leak mysql-test/include/ndb_setup_slave.inc: Moved cluster tables under 'mysql' mysql-test/include/query_cache.inc: Added more tests for query cache mysql-test/lib/init_db.sql: Move cluster.binlog_index -> mysql.binlog_index mysql-test/lib/mtr_report.pl: Find memory leaks mysql-test/mysql-test-run-shell.sh: Added --debug-info to programs to detect memory leaks mysql-test/mysql-test-run.pl: Added --debug-info to programs to detect memory leaks Force log files to var/log cluster tables moved under 'mysql' mysql-test/r/cache_innodb.result: New query cache test with innodb mysql-test/r/connect.result: binlog_index is now in mysql mysql-test/r/drop.result: Removed 'cluster' database mysql-test/r/information_schema.result: Removed 'cluster' database mysql-test/r/mysqlcheck.result: cluster.binlog_index -> mysql.binlog_index mysql-test/r/ndb_binlog_basic.result: cluster.binlog_index -> mysql.binlog_index mysql-test/r/ndb_binlog_ddl_multi.result: cluster -> mysql mysql-test/r/ndb_binlog_discover.result: cluster -> mysql mysql-test/r/ndb_binlog_multi.result: cluster -> mysql mysql-test/r/ndb_restore_compat.result: cluster -> mysql mysql-test/r/ps_1general.result: Removed cluster database mysql-test/r/rpl_create_database.result: Removed cluster database mysql-test/r/rpl_load_from_master.result: Removed cluster database mysql-test/r/rpl_loaddata_m.result: Removed cluster database mysql-test/r/rpl_ndb_bank.result: cluster -> mysql mysql-test/r/rpl_ndb_dd_advance.result: cluster -> mysql mysql-test/r/rpl_ndb_dd_basic.result: cluster -> mysql mysql-test/r/rpl_ndb_idempotent.result: cluster -> mysql mysql-test/r/rpl_ndb_log.result: cluster -> mysql mysql-test/r/rpl_ndb_multi.result: cluster -> mysql mysql-test/r/rpl_ndb_sync.result: cluster -> mysql mysql-test/r/rpl_row_basic_11bugs.result: Removed cluster database mysql-test/r/rpl_truncate_7ndb.result: Position have changed mysql-test/r/rpl_truncate_7ndb_2.result: cluster -> mysql mysql-test/r/schema.result: Removed cluster database mysql-test/r/show_check.result: Removed cluster database mysql-test/r/system_mysql_db.result: binlog_index moved under mysql mysql-test/r/upgrade.result: More tests mysql-test/t/information_schema.test: cluster -> mysql mysql-test/t/mysqldump.test: More test to detect memory leaks mysql-test/t/ndb_binlog_basic.test: cluster -> mysql mysql-test/t/ndb_binlog_multi.test: cluster -> mysql mysql-test/t/ndb_restore_compat.test: cluster -> mysql mysql-test/t/rpl_ndb_bank.test: cluster -> mysql mysql-test/t/rpl_ndb_dd_advance.test: cluster -> mysql mysql-test/t/rpl_ndb_idempotent.test: cluster -> mysql mysql-test/t/rpl_ndb_multi.test: cluster -> mysql mysql-test/t/rpl_ndb_sync.test: cluster -> mysql mysql-test/t/system_mysql_db_fix.test: Drop also binlog_index mysql-test/t/upgrade.test: Check that tables created with 3.23 works mysys/my_error.c: Remove all registered errors (to avoid memory leaks) mysys/my_init.c: call my_error_unregister_all() to avoid some possible memory leaks mysys/mysys_priv.h: Added prototype scripts/mysql_create_system_tables.sh: cluster -> mysql scripts/mysql_fix_privilege_tables.sql: Changed -- to # Create binlog_index table if it dosesn't exist sql/field.cc: Made offset() inline sql/field.h: Changed prototype of offset() to not make it depending on TABLE structure sql/field_conv.cc: Removed some usage of current_thd sql/ha_ndbcluster_tables.h: cluster -> mysql sql/item_sum.cc: Usage of new 'offset' parameters sql/key.cc: Changed 'find_ref_key' to not be dependent on field->table (This fixed a crash when using a table created in MySQL 3.23) sql/mysql_priv.h: Changed find_ref_key() to not use field->table sql/mysqld.cc: Fix that plugin_init() works properly on bootstrap (Previously we got warnings from plugin_init) sql/sql_class.cc: new 'field->offset()' sql/sql_select.cc: New field->offset() sql/table.cc: We don't need field->table to be set in find_ref_key() or find_field() anymore. storage/archive/ha_archive.cc: New field->offset() storage/federated/ha_federated.cc: New field->offset() storage/innobase/handler/ha_innodb.cc: Fixed compiler warnings storage/myisam/ha_myisam.cc: Fixed compiler warnings (Wrong paramter to sprintf()) New field->offset() storage/myisam/ha_myisam.h: Fixed wrong type of table_flags storage/ndb/tools/restore/Restore.cpp: Fixed compiler warning mysql-test/r/1st.result: New BitKeeper file ``mysql-test/r/1st.result'' mysql-test/std_data/old_table-323.frm: New BitKeeper file ``mysql-test/std_data/old_table-323.frm'' mysql-test/t/1st.test: New BitKeeper file ``mysql-test/t/1st.test''
181 lines
6.5 KiB
Text
181 lines
6.5 KiB
Text
#
|
|
# Currently this test only runs in the source tree with the
|
|
# ndb/test programs compiled.
|
|
# invoke with: ./mysql-test-run --ndb-extra-test --do-test=rpl_ndb_bank
|
|
#
|
|
# 1. start a "bank" application running on the master cluster
|
|
# 2. perform online sync of slave
|
|
# 3. periodically check consistency of slave
|
|
# 4. stop the bank application
|
|
# 5. check that the slave and master BANK databases are the same
|
|
#
|
|
|
|
--source include/have_ndb.inc
|
|
--source include/have_ndb_extra.inc
|
|
--source include/have_binlog_format_row.inc
|
|
--source include/master-slave.inc
|
|
|
|
# kill any trailing processes
|
|
--system killall lt-bankTransactionMaker lt-bankTimer lt-bankMakeGL || true
|
|
|
|
--disable_warnings
|
|
# initialize master
|
|
--connection master
|
|
CREATE DATABASE IF NOT EXISTS BANK;
|
|
DROP DATABASE BANK;
|
|
CREATE DATABASE BANK default charset=latin1 default collate=latin1_bin;
|
|
--enable_warnings
|
|
|
|
#
|
|
# These tables should correspond to the table definitions in
|
|
# storage/ndb/test/src/NDBT_Tables.cpp
|
|
#
|
|
--connection master
|
|
USE BANK;
|
|
CREATE TABLE GL ( TIME BIGINT UNSIGNED NOT NULL,
|
|
ACCOUNT_TYPE INT UNSIGNED NOT NULL,
|
|
BALANCE INT UNSIGNED NOT NULL,
|
|
DEPOSIT_COUNT INT UNSIGNED NOT NULL,
|
|
DEPOSIT_SUM INT UNSIGNED NOT NULL,
|
|
WITHDRAWAL_COUNT INT UNSIGNED NOT NULL,
|
|
WITHDRAWAL_SUM INT UNSIGNED NOT NULL,
|
|
PURGED INT UNSIGNED NOT NULL,
|
|
PRIMARY KEY USING HASH (TIME,ACCOUNT_TYPE))
|
|
ENGINE = NDB;
|
|
|
|
CREATE TABLE ACCOUNT ( ACCOUNT_ID INT UNSIGNED NOT NULL,
|
|
OWNER INT UNSIGNED NOT NULL,
|
|
BALANCE INT UNSIGNED NOT NULL,
|
|
ACCOUNT_TYPE INT UNSIGNED NOT NULL,
|
|
PRIMARY KEY USING HASH (ACCOUNT_ID))
|
|
ENGINE = NDB;
|
|
|
|
CREATE TABLE TRANSACTION ( TRANSACTION_ID BIGINT UNSIGNED NOT NULL,
|
|
ACCOUNT INT UNSIGNED NOT NULL,
|
|
ACCOUNT_TYPE INT UNSIGNED NOT NULL,
|
|
OTHER_ACCOUNT INT UNSIGNED NOT NULL,
|
|
TRANSACTION_TYPE INT UNSIGNED NOT NULL,
|
|
TIME BIGINT UNSIGNED NOT NULL,
|
|
AMOUNT INT UNSIGNED NOT NULL,
|
|
PRIMARY KEY USING HASH (TRANSACTION_ID,ACCOUNT))
|
|
ENGINE = NDB;
|
|
|
|
CREATE TABLE SYSTEM_VALUES ( SYSTEM_VALUES_ID INT UNSIGNED NOT NULL,
|
|
VALUE BIGINT UNSIGNED NOT NULL,
|
|
PRIMARY KEY USING HASH (SYSTEM_VALUES_ID))
|
|
ENGINE = NDB;
|
|
|
|
CREATE TABLE ACCOUNT_TYPE ( ACCOUNT_TYPE_ID INT UNSIGNED NOT NULL,
|
|
DESCRIPTION CHAR(64) NOT NULL,
|
|
PRIMARY KEY USING HASH (ACCOUNT_TYPE_ID))
|
|
ENGINE = NDB;
|
|
|
|
#
|
|
# create "BANK" application
|
|
#
|
|
--exec NDB_CONNECTSTRING=localhost:$NDBCLUSTER_PORT ../storage/ndb/test/ndbapi/bank/bankCreator >> $NDB_TOOLS_OUTPUT
|
|
|
|
#
|
|
# start main loop
|
|
# repeat backup-restore-check
|
|
#
|
|
|
|
# set this high if testing to run many syncs in loop
|
|
--let $2=1
|
|
while ($2)
|
|
{
|
|
|
|
#
|
|
# start "BANK" application
|
|
#
|
|
--exec NDB_CONNECTSTRING=localhost:$NDBCLUSTER_PORT ../storage/ndb/test/ndbapi/bank/bankTimer -w 5 >> $NDB_TOOLS_OUTPUT &
|
|
--exec NDB_CONNECTSTRING=localhost:$NDBCLUSTER_PORT ../storage/ndb/test/ndbapi/bank/bankMakeGL >> $NDB_TOOLS_OUTPUT &
|
|
--exec NDB_CONNECTSTRING=localhost:$NDBCLUSTER_PORT ../storage/ndb/test/ndbapi/bank/bankTransactionMaker >> $NDB_TOOLS_OUTPUT &
|
|
|
|
#
|
|
# let the "BANK" run for a while
|
|
#
|
|
--sleep 5
|
|
|
|
--disable_warnings
|
|
# initialize slave for sync
|
|
--connection slave
|
|
STOP SLAVE;
|
|
RESET SLAVE;
|
|
# to make sure we drop any ndbcluster tables
|
|
CREATE DATABASE IF NOT EXISTS BANK;
|
|
DROP DATABASE BANK;
|
|
# create database
|
|
CREATE DATABASE BANK;
|
|
--enable_warnings
|
|
|
|
#
|
|
# Time to sync the slave:
|
|
# start by taking a backup on master
|
|
--connection master
|
|
RESET MASTER;
|
|
--exec $NDB_MGM --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -e "start backup" >> $NDB_TOOLS_OUTPUT
|
|
|
|
# there is no neat way to find the backupid, this is a hack to find it...
|
|
--exec $NDB_TOOLS_DIR/ndb_select_all --ndb-connectstring="localhost:$NDBCLUSTER_PORT" -d sys --delimiter=',' SYSTAB_0 | grep 520093696 > $MYSQLTEST_VARDIR/tmp.dat
|
|
CREATE TABLE IF NOT EXISTS mysql.backup_info (id INT, backup_id INT) ENGINE = HEAP;
|
|
DELETE FROM mysql.backup_info;
|
|
LOAD DATA INFILE '../tmp.dat' INTO TABLE mysql.backup_info FIELDS TERMINATED BY ',';
|
|
--exec rm $MYSQLTEST_VARDIR/tmp.dat || true
|
|
--replace_column 1 <the_backup_id>
|
|
SELECT @the_backup_id:=backup_id FROM mysql.backup_info;
|
|
let the_backup_id=`select @the_backup_id`;
|
|
|
|
# restore on slave, first check that nothing is there
|
|
--connection slave
|
|
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT_SLAVE" -p 8 -b $the_backup_id -n 1 -m -r --print --print_meta $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id >> $NDB_TOOLS_OUTPUT
|
|
--exec $NDB_TOOLS_DIR/ndb_restore --no-defaults --ndb-connectstring="localhost:$NDBCLUSTER_PORT_SLAVE" -p 8 -b $the_backup_id -n 2 -r -e --print --print_meta $NDB_BACKUP_DIR/BACKUP/BACKUP-$the_backup_id >> $NDB_TOOLS_OUTPUT
|
|
|
|
#
|
|
# now setup replication to continue from last epoch
|
|
--source include/ndb_setup_slave.inc
|
|
--connection slave
|
|
START SLAVE;
|
|
|
|
|
|
#
|
|
# Now loop and check consistency every 2 seconds on slave
|
|
#
|
|
--connection slave
|
|
--let $1=10
|
|
while ($1)
|
|
{
|
|
--sleep 2
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
--replace_column 1 <Slave_IO_State> 7 <Read_Master_Log_Pos> 8 <Relay_Log_File> 9 <Relay_Log_Pos> 16 <Replicate_Ignore_Table> 22 <Exec_Master_Log_Pos> 23 <Relay_Log_Space> 33 <Seconds_Behind_Master>
|
|
SHOW SLAVE STATUS;
|
|
STOP SLAVE;
|
|
--exec NDB_CONNECTSTRING=localhost:$NDBCLUSTER_PORT_SLAVE ../storage/ndb/test/ndbapi/bank/bankValidateAllGLs >> $NDB_TOOLS_OUTPUT
|
|
START SLAVE;
|
|
--dec $1
|
|
}
|
|
|
|
#
|
|
# Stop transactions
|
|
#
|
|
--exec killall lt-bankTransactionMaker lt-bankTimer lt-bankMakeGL
|
|
|
|
#
|
|
# Check that the databases are the same on slave and master
|
|
# 1. dump database BANK on both master and slave
|
|
# 2. compare, there should be no difference
|
|
#
|
|
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info BANK ACCOUNT_TYPE ACCOUNT GL TRANSACTION > $MYSQLTEST_VARDIR/tmp/master_BANK.sql
|
|
--connection master
|
|
use test;
|
|
create table t1 (a int primary key) engine=ndb;
|
|
insert into t1 values (1);
|
|
--sync_slave_with_master
|
|
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info BANK ACCOUNT_TYPE ACCOUNT GL TRANSACTION > $MYSQLTEST_VARDIR/tmp/slave_BANK.sql
|
|
--connection master
|
|
drop table t1;
|
|
|
|
--exec diff $MYSQLTEST_VARDIR/tmp/master_BANK.sql $MYSQLTEST_VARDIR/tmp/slave_BANK.sql
|
|
|
|
--dec $2
|
|
}
|