mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
WL#1012: All changes as one single changeset.
This includes both code and test cases. BitKeeper/deleted/.del-ctype_ucs_binlog.result~280d136b1a0bcf17: Delete: mysql-test/r/ctype_ucs_binlog.result BitKeeper/deleted/.del-rpl_delete_all.result~7c050d592614b3f: Delete: mysql-test/r/rpl_delete_all.result BitKeeper/deleted/.del-rpl000013-slave.opt~18266ad8a2403e8d: Delete: mysql-test/t/rpl000013-slave.opt BitKeeper/deleted/.del-rpl_delete_all.test~700a1490277780e0: Delete: mysql-test/t/rpl_delete_all.test mysql-test/extra/binlog_tests/binlog.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/blackhole.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/ctype_cp932.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/ctype_cp932_binlog.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/ctype_ucs_binlog.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/drop_temp_table.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/insert_select-binlog.test: Import patch wl1012.patch mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_ddl.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_deadlock.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_err_ignoredtable.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_flsh_tbls.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_loaddata_m.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_log.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_max_relay_size.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_multi_query.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_reset_slave.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_stm_000001.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_stm_EE_err.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_stm_charset.test: Import patch wl1012.patch mysql-test/extra/rpl_tests/rpl_user_variables.test: Import patch wl1012.patch mysql-test/r/binlog_stm_binlog.result: Import patch wl1012.patch mysql-test/r/binlog_stm_blackhole.result: Import patch wl1012.patch mysql-test/r/binlog_stm_ctype_cp932.result: Import patch wl1012.patch mysql-test/r/binlog_stm_ctype_ucs.result: Import patch wl1012.patch mysql-test/r/binlog_stm_drop_tmp_tbl.result: Import patch wl1012.patch mysql-test/r/binlog_stm_insert_select.result: Import patch wl1012.patch mysql-test/r/binlog_stm_mix_innodb_myisam.result: Import patch wl1012.patch mysql-test/r/rpl_000012.result: Import patch wl1012.patch mysql-test/r/rpl_000015.result: Import patch wl1012.patch mysql-test/r/rpl_deadlock_innodb.result: Import patch wl1012.patch mysql-test/r/rpl_flushlog_loop.result: Import patch wl1012.patch mysql-test/r/rpl_loaddata_s.result: Import patch wl1012.patch mysql-test/r/rpl_stm_000001.result: Import patch wl1012.patch mysql-test/r/rpl_stm_EE_err.result: Import patch wl1012.patch mysql-test/r/rpl_stm_charset.result: Import patch wl1012.patch mysql-test/r/rpl_stm_ddl.result: Import patch wl1012.patch mysql-test/r/rpl_stm_err_ignoredtable.result: Import patch wl1012.patch mysql-test/r/rpl_stm_flsh_tbls.result: Import patch wl1012.patch mysql-test/r/rpl_stm_loaddata_m.result: Import patch wl1012.patch mysql-test/r/rpl_stm_log.result: Import patch wl1012.patch mysql-test/r/rpl_stm_max_relay_size.result: Import patch wl1012.patch mysql-test/r/rpl_stm_multi_query.result: Import patch wl1012.patch mysql-test/r/rpl_stm_mystery22.result: Import patch wl1012.patch mysql-test/r/rpl_stm_reset_slave.result: Import patch wl1012.patch mysql-test/r/rpl_stm_rewrt_db.result: Import patch wl1012.patch mysql-test/r/rpl_stm_sp.result: Import patch wl1012.patch mysql-test/r/rpl_stm_timezone.result: Import patch wl1012.patch mysql-test/r/rpl_stm_until.result: Import patch wl1012.patch mysql-test/r/rpl_stm_user_variables.result: Import patch wl1012.patch mysql-test/r/rpl_stm_view.result: Import patch wl1012.patch mysql-test/t/binlog_row_binlog-master.opt: Import patch wl1012.patch mysql-test/t/rpl_000012.test: Import patch wl1012.patch mysql-test/t/rpl_000015-slave.sh: Import patch wl1012.patch mysql-test/t/rpl_000015.slave-mi: Import patch wl1012.patch mysql-test/t/rpl_000015.test: Import patch wl1012.patch mysql-test/t/rpl_deadlock_innodb-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_flushlog_loop-master.opt: Import patch wl1012.patch mysql-test/t/rpl_flushlog_loop-master.sh: Import patch wl1012.patch mysql-test/t/rpl_flushlog_loop-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_flushlog_loop-slave.sh: Import patch wl1012.patch mysql-test/t/rpl_flushlog_loop.test: Import patch wl1012.patch mysql-test/t/rpl_loaddata_s-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_loaddata_s.test: Import patch wl1012.patch mysql-test/t/rpl_stm_000001-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_err_ignoredtable-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_loaddata_m-master.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_log-master.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_log-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_mystery22.test: Import patch wl1012.patch mysql-test/t/rpl_stm_rewrt_db-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_rewrt_db.test: Import patch wl1012.patch mysql-test/t/rpl_stm_sp-master.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_sp-slave.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_sp.test: Import patch wl1012.patch mysql-test/t/rpl_stm_timezone-master.opt: Import patch wl1012.patch mysql-test/t/rpl_stm_timezone-slave.opt: Import patch wl1012.patch BUILD/SETUP.sh: Import patch wl1012.patch Makefile.am: Import patch wl1012.patch mysql-test/t/rpl_stm_timezone.test: Import patch wl1012.patch mysql-test/t/rpl_stm_until.test: Import patch wl1012.patch mysql-test/t/rpl_stm_view.test: Import patch wl1012.patch client/Makefile.am: Import patch wl1012.patch client/client_priv.h: Import patch wl1012.patch client/mysqlbinlog.cc: Import patch wl1012.patch configure.in: Import patch wl1012.patch include/Makefile.am: Import patch wl1012.patch include/base64.h: Import patch wl1012.patch include/config-win.h: Import patch wl1012.patch include/my_base.h: Import patch wl1012.patch include/my_global.h: Import patch wl1012.patch mysql-test/Makefile.am: Import patch wl1012.patch mysql-test/mysql-test-run.pl: Import patch wl1012.patch mysql-test/mysql-test-run.sh: Import patch wl1012.patch mysql-test/r/date_formats.result: Import patch wl1012.patch mysql-test/r/flush_block_commit.result: Import patch wl1012.patch mysql-test/r/innodb.result: Import patch wl1012.patch mysql-test/r/rpl000017.result: Import patch wl1012.patch mysql-test/r/rpl_change_master.result: Import patch wl1012.patch mysql-test/r/rpl_commit_after_flush.result: Import patch wl1012.patch mysql-test/r/rpl_create_database.result: Import patch wl1012.patch mysql-test/r/rpl_do_grant.result: Import patch wl1012.patch mysql-test/r/rpl_loaddata.result: Import patch wl1012.patch mysql-test/r/rpl_log_pos.result: Import patch wl1012.patch mysql-test/r/rpl_multi_delete.result: Import patch wl1012.patch mysql-test/r/rpl_multi_update.result: Import patch wl1012.patch mysql-test/r/rpl_openssl.result: Import patch wl1012.patch mysql-test/r/rpl_replicate_do.result: Import patch wl1012.patch mysql-test/r/rpl_rotate_logs.result: Import patch wl1012.patch mysql-test/r/rpl_server_id1.result: Import patch wl1012.patch mysql-test/r/rpl_server_id2.result: Import patch wl1012.patch mysql-test/r/rpl_temporary.result: Import patch wl1012.patch mysql-test/r/user_var-binlog.result: Import patch wl1012.patch mysql-test/t/create_select_tmp.test: Import patch wl1012.patch mysql-test/t/date_formats.test: Import patch wl1012.patch mysql-test/t/disabled.def: Import patch wl1012.patch mysql-test/t/innodb.test: Import patch wl1012.patch mysql-test/t/mysqlbinlog.test: Import patch wl1012.patch mysql-test/t/mysqlbinlog2.test: Import patch wl1012.patch mysql-test/t/rpl000002.test: Import patch wl1012.patch mysql-test/t/rpl000006.test: Import patch wl1012.patch mysql-test/t/rpl000013.test: Import patch wl1012.patch mysql-test/t/rpl000017.test: Import patch wl1012.patch mysql-test/t/rpl_auto_increment.test: Import patch wl1012.patch mysql-test/t/rpl_change_master.test: Import patch wl1012.patch mysql-test/t/rpl_commit_after_flush.test: Import patch wl1012.patch mysql-test/t/rpl_create_database.test: Import patch wl1012.patch mysql-test/t/rpl_do_grant.test: Import patch wl1012.patch mysql-test/t/rpl_drop.test: Import patch wl1012.patch mysql-test/t/rpl_empty_master_crash.test: Import patch wl1012.patch mysql-test/t/rpl_failed_optimize.test: Import patch wl1012.patch mysql-test/t/rpl_heap.test: Import patch wl1012.patch mysql-test/t/rpl_insert_id.test: Import patch wl1012.patch mysql-test/t/rpl_insert_ignore.test: Import patch wl1012.patch mysql-test/t/rpl_loaddata.test: Import patch wl1012.patch mysql-test/t/rpl_log_pos.test: Import patch wl1012.patch mysql-test/t/rpl_multi_delete.test: Import patch wl1012.patch mysql-test/t/rpl_multi_update.test: Import patch wl1012.patch mysql-test/t/rpl_multi_update2.test: Import patch wl1012.patch mysql-test/t/rpl_multi_update3.test: Import patch wl1012.patch mysql-test/t/rpl_openssl.test: Import patch wl1012.patch mysql-test/t/rpl_redirect.test: Import patch wl1012.patch mysql-test/t/rpl_relayrotate.test: Import patch wl1012.patch mysql-test/t/rpl_replicate_do.test: Import patch wl1012.patch mysql-test/t/rpl_rotate_logs.test: Import patch wl1012.patch mysql-test/t/rpl_server_id1.test: Import patch wl1012.patch mysql-test/t/rpl_sp_effects.test: Import patch wl1012.patch mysql-test/t/rpl_temporary.test: Import patch wl1012.patch mysql-test/t/rpl_trigger.test: Import patch wl1012.patch mysql-test/t/sp.test: Import patch wl1012.patch mysql-test/t/user_var-binlog.test: Import patch wl1012.patch mysys/Makefile.am: Import patch wl1012.patch mysys/base64.c: Import patch wl1012.patch sql/Makefile.am: Import patch wl1012.patch sql/ha_innodb.cc: Import patch wl1012.patch sql/ha_innodb.h: Import patch wl1012.patch sql/ha_partition.cc: Import patch wl1012.patch sql/handler.cc: Import patch wl1012.patch sql/handler.h: Import patch wl1012.patch sql/item_sum.cc: Import patch wl1012.patch sql/log.cc: Import patch wl1012.patch sql/log_event.cc: Import patch wl1012.patch sql/log_event.h: Import patch wl1012.patch sql/mysql_priv.h: Import patch wl1012.patch sql/mysqld.cc: Import patch wl1012.patch sql/rpl_filter.h: Import patch wl1012.patch sql/set_var.cc: Import patch wl1012.patch sql/share/errmsg.txt: Import patch wl1012.patch sql/slave.cc: Import patch wl1012.patch sql/slave.h: Import patch wl1012.patch sql/sp.cc: Import patch wl1012.patch sql/sp_head.cc: Import patch wl1012.patch sql/sql_acl.cc: Import patch wl1012.patch sql/sql_base.cc: Import patch wl1012.patch sql/sql_class.cc: Import patch wl1012.patch sql/sql_class.h: Import patch wl1012.patch sql/sql_delete.cc: Import patch wl1012.patch sql/sql_insert.cc: Import patch wl1012.patch sql/sql_lex.h: Import patch wl1012.patch sql/sql_list.h: Import patch wl1012.patch sql/sql_load.cc: Import patch wl1012.patch sql/sql_parse.cc: Import patch wl1012.patch sql/sql_plugin.cc: Import patch wl1012.patch sql/sql_rename.cc: Import patch wl1012.patch sql/sql_repl.h: Import patch wl1012.patch sql/sql_select.cc: Import patch wl1012.patch sql/sql_show.cc: Import patch wl1012.patch sql/sql_table.cc: Import patch wl1012.patch sql/sql_udf.cc: Import patch wl1012.patch sql/sql_union.cc: Import patch wl1012.patch sql/sql_update.cc: Import patch wl1012.patch sql/sql_yacc.yy: Import patch wl1012.patch sql/table.cc: Import patch wl1012.patch sql/table.h: Import patch wl1012.patch storage/innobase/include/lock0lock.h: Import patch wl1012.patch storage/innobase/include/row0mysql.h: Import patch wl1012.patch storage/innobase/include/row0vers.h: Import patch wl1012.patch storage/innobase/lock/lock0lock.c: Import patch wl1012.patch storage/innobase/row/row0mysql.c: Import patch wl1012.patch storage/innobase/row/row0sel.c: Import patch wl1012.patch storage/innobase/row/row0vers.c: Import patch wl1012.patch
This commit is contained in:
parent
65c560e9b8
commit
09346e6e2d
447 changed files with 34744 additions and 3218 deletions
47
mysql-test/extra/binlog_tests/binlog.test
Normal file
47
mysql-test/extra/binlog_tests/binlog.test
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#
|
||||
# misc binlogging tests that do not require a slave running
|
||||
#
|
||||
|
||||
-- source include/have_bdb.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
reset master;
|
||||
|
||||
create table t1 (a int) engine=bdb;
|
||||
create table t2 (a int) engine=innodb;
|
||||
begin;
|
||||
insert t1 values (5);
|
||||
commit;
|
||||
begin;
|
||||
insert t2 values (5);
|
||||
commit;
|
||||
# first COMMIT must be Query_log_event, second - Xid_log_event
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102;
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# binlog rotation after one big transaction
|
||||
#
|
||||
reset master;
|
||||
let $1=100;
|
||||
|
||||
create table t1 (n int) engine=innodb;
|
||||
begin;
|
||||
--disable_query_log
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t1 values($1 + 4);
|
||||
dec $1;
|
||||
}
|
||||
--enable_query_log
|
||||
commit;
|
||||
drop table t1;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'master-bin.000001' from 102;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'master-bin.000002' from 102;
|
||||
146
mysql-test/extra/binlog_tests/blackhole.test
Normal file
146
mysql-test/extra/binlog_tests/blackhole.test
Normal file
|
|
@ -0,0 +1,146 @@
|
|||
#
|
||||
# Simple test for blackhole example
|
||||
# Taken from the select test
|
||||
#
|
||||
-- source include/have_blackhole.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (
|
||||
Period smallint(4) unsigned zerofill DEFAULT '0000' NOT NULL,
|
||||
Varor_period smallint(4) unsigned DEFAULT '0' NOT NULL
|
||||
) ENGINE=blackhole;
|
||||
|
||||
INSERT INTO t1 VALUES (9410,9412);
|
||||
|
||||
select period from t1;
|
||||
select * from t1;
|
||||
select t1.* from t1;
|
||||
|
||||
#
|
||||
# Create test table
|
||||
#
|
||||
|
||||
CREATE TABLE t2 (
|
||||
auto int NOT NULL auto_increment,
|
||||
fld1 int(6) unsigned zerofill DEFAULT '000000' NOT NULL,
|
||||
companynr tinyint(2) unsigned zerofill DEFAULT '00' NOT NULL,
|
||||
fld3 char(30) DEFAULT '' NOT NULL,
|
||||
fld4 char(35) DEFAULT '' NOT NULL,
|
||||
fld5 char(35) DEFAULT '' NOT NULL,
|
||||
fld6 char(4) DEFAULT '' NOT NULL,
|
||||
primary key (auto)
|
||||
) ENGINE=blackhole;
|
||||
|
||||
INSERT INTO t2 VALUES (1192,068305,00,'Colombo','hardware','colicky','');
|
||||
INSERT INTO t2 VALUES (1193,000000,00,'nondecreasing','implant','thrillingly','');
|
||||
--enable_query_log
|
||||
|
||||
#
|
||||
# Search with a key
|
||||
#
|
||||
|
||||
select t2.fld3 from t2 where companynr = 58 and fld3 like "%imaginable%";
|
||||
select fld3 from t2 where fld3 like "%cultivation" ;
|
||||
|
||||
#
|
||||
# Search with a key using sorting and limit the same time
|
||||
#
|
||||
|
||||
select t2.fld3,companynr from t2 where companynr = 57+1 order by fld3;
|
||||
select fld3,companynr from t2 where companynr = 58 order by fld3;
|
||||
|
||||
select fld3 from t2 order by fld3 desc limit 10;
|
||||
select fld3 from t2 order by fld3 desc limit 5;
|
||||
select fld3 from t2 order by fld3 desc limit 5,5;
|
||||
|
||||
#
|
||||
# Search with a key having a constant with each unique key.
|
||||
# The table is read directly with read-next on fld3
|
||||
#
|
||||
|
||||
select t2.fld3 from t2 where fld3 = 'honeysuckle';
|
||||
select t2.fld3 from t2 where fld3 LIKE 'honeysuckl_';
|
||||
select t2.fld3 from t2 where fld3 LIKE 'hon_ysuckl_';
|
||||
select t2.fld3 from t2 where fld3 LIKE 'honeysuckle%';
|
||||
select t2.fld3 from t2 where fld3 LIKE 'h%le';
|
||||
|
||||
select t2.fld3 from t2 where fld3 LIKE 'honeysuckle_';
|
||||
select t2.fld3 from t2 where fld3 LIKE 'don_t_find_me_please%';
|
||||
|
||||
#
|
||||
# Test sorting with a used key (there is no need for sorting)
|
||||
#
|
||||
|
||||
select t2.fld3 from t2 where fld3 >= 'honeysuckle' and fld3 <= 'honoring' order by fld3;
|
||||
select fld1,fld3 from t2 where fld3="Colombo" or fld3 = "nondecreasing" order by fld3;
|
||||
|
||||
|
||||
# Test for fulltext
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a VARCHAR(200), b TEXT, FULLTEXT (a,b));
|
||||
INSERT INTO t1 VALUES('MySQL has now support', 'for full-text search'),
|
||||
('Full-text indexes', 'are called collections'),
|
||||
('Only MyISAM tables','support collections'),
|
||||
('Function MATCH ... AGAINST()','is used to do a search'),
|
||||
('Full-text search in MySQL', 'implements vector space model');
|
||||
SHOW INDEX FROM t1;
|
||||
|
||||
# nl search
|
||||
|
||||
select * from t1 where MATCH(a,b) AGAINST ("collections");
|
||||
explain extended select * from t1 where MATCH(a,b) AGAINST ("collections");
|
||||
select * from t1 where MATCH(a,b) AGAINST ("indexes");
|
||||
select * from t1 where MATCH(a,b) AGAINST ("indexes collections");
|
||||
select * from t1 where MATCH(a,b) AGAINST ("only");
|
||||
|
||||
# Test that every DML (except SELECT) and DDL gets into binlog
|
||||
# so that blackhole can be used as "binlog propagator"
|
||||
|
||||
reset master;
|
||||
drop table t1,t2;
|
||||
create table t1 (a int) engine=blackhole;
|
||||
delete from t1 where a=10;
|
||||
update t1 set a=11 where a=15;
|
||||
insert into t1 values(1);
|
||||
insert ignore into t1 values(1);
|
||||
replace into t1 values(100);
|
||||
create table t2 (a varchar(200)) engine=blackhole;
|
||||
load data infile '../../std_data/words.dat' into table t2;
|
||||
alter table t1 add b int;
|
||||
alter table t1 drop b;
|
||||
create table t3 like t1;
|
||||
insert into t1 select * from t3;
|
||||
replace into t1 select * from t3;
|
||||
# Just to verify
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
select * from t3;
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events;
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Test that a transaction which is rolled back does not go into binlog
|
||||
# and that a transaction which is committed does
|
||||
|
||||
reset master;
|
||||
create table t1 (a int) engine=blackhole;
|
||||
set autocommit=0;
|
||||
start transaction;
|
||||
insert into t1 values(1);
|
||||
commit;
|
||||
start transaction;
|
||||
insert into t1 values(2);
|
||||
rollback;
|
||||
set autocommit=1;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events;
|
||||
436
mysql-test/extra/binlog_tests/ctype_cp932.test
Normal file
436
mysql-test/extra/binlog_tests/ctype_cp932.test
Normal file
|
|
@ -0,0 +1,436 @@
|
|||
-- source include/have_cp932.inc
|
||||
|
||||
--character_set cp932
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
drop table if exists t2;
|
||||
drop table if exists t3;
|
||||
drop table if exists t4;
|
||||
--enable_warnings
|
||||
|
||||
set names cp932;
|
||||
set character_set_database = cp932;
|
||||
|
||||
CREATE TABLE t1(c1 CHAR(1)) DEFAULT CHARACTER SET = cp932;
|
||||
|
||||
#Characters which are converted to Unicode ambiguously
|
||||
INSERT INTO t1 VALUES
|
||||
(0x05),(0x7E),(0x815C),(0x815F),(0x8160),(0x8161),(0x817C),(0x8191),(0x8192),(0x81CA);
|
||||
|
||||
#NEC ROW 13 characters (0x8740 - 0x879C)
|
||||
INSERT INTO t1 VALUES
|
||||
(0x8740),(0x8741),(0x8742),(0x8743),(0x8744),(0x8745),(0x8746),(0x8747),
|
||||
(0x8748),(0x8749),(0x874A),(0x874B),(0x874C),(0x874D),(0x874E),(0x874F),
|
||||
(0x8750),(0x8751),(0x8752),(0x8753),(0x8754),(0x8755),(0x8756),(0x8757),
|
||||
(0x8758),(0x8759),(0x875A),(0x875B),(0x875C),(0x875D),(0x875F),
|
||||
(0x8760),(0x8761),(0x8762),(0x8763),(0x8764),(0x8765),(0x8766),(0x8767),
|
||||
(0x8768),(0x8769),(0x876A),(0x876B),(0x876C),(0x876D),(0x876E),(0x876F),
|
||||
(0x8770),(0x8771),(0x8772),(0x8773),(0x8774),(0x8775),(0x877E),
|
||||
(0x8780),(0x8781),(0x8782),(0x8783),(0x8784),(0x8785),(0x8786),(0x8787),
|
||||
(0x8788),(0x8789),(0x878A),(0x878B),(0x878C),(0x878D),(0x878E),(0x878F),
|
||||
(0x8790),(0x8791),(0x8792),(0x8793),(0x8794),(0x8795),(0x8796),(0x8797),
|
||||
(0x8798),(0x8799),(0x879A),(0x879B),(0x879C);
|
||||
|
||||
#IBM selected characters kanji & non-kanji, NEC implementation (0xED40 - 0xEEFC)
|
||||
INSERT INTO t1 VALUES
|
||||
(0xED40),(0xED41),(0xED42),(0xED43),(0xED44),(0xED45),(0xED46),(0xED47),
|
||||
(0xED48),(0xED49),(0xED4A),(0xED4B),(0xED4C),(0xED4D),(0xED4E),(0xED4F),
|
||||
(0xED50),(0xED51),(0xED52),(0xED53),(0xED54),(0xED55),(0xED56),(0xED57),
|
||||
(0xED58),(0xED59),(0xED5A),(0xED5B),(0xED5C),(0xED5D),(0xED5E),(0xED5F),
|
||||
(0xED60),(0xED61),(0xED62),(0xED63),(0xED64),(0xED65),(0xED66),(0xED67),
|
||||
(0xED68),(0xED69),(0xED6A),(0xED6B),(0xED6C),(0xED6D),(0xED6E),(0xED6F),
|
||||
(0xED70),(0xED71),(0xED72),(0xED73),(0xED74),(0xED75),(0xED76),(0xED77),
|
||||
(0xED78),(0xED79),(0xED7A),(0xED7B),(0xED7C),(0xED7D),(0xED7E),
|
||||
(0xED80),(0xED81),(0xED82),(0xED83),(0xED84),(0xED85),(0xED86),(0xED87),
|
||||
(0xED88),(0xED89),(0xED8A),(0xED8B),(0xED8C),(0xED8D),(0xED8E),(0xED8F),
|
||||
(0xED90),(0xED91),(0xED92),(0xED93),(0xED94),(0xED95),(0xED96),(0xED97),
|
||||
(0xED98),(0xED99),(0xED9A),(0xED9B),(0xED9C),(0xED9D),(0xED9E),(0xED9F),
|
||||
(0xEDA0),(0xEDA1),(0xEDA2),(0xEDA3),(0xEDA4),(0xEDA5),(0xEDA6),(0xEDA7),
|
||||
(0xEDA8),(0xEDA9),(0xEDAA),(0xEDAB),(0xEDAC),(0xEDAD),(0xEDAE),(0xEDAF),
|
||||
(0xEDB0),(0xEDB1),(0xEDB2),(0xEDB3),(0xEDB4),(0xEDB5),(0xEDB6),(0xEDB7),
|
||||
(0xEDB8),(0xEDB9),(0xEDBA),(0xEDBB),(0xEDBC),(0xEDBD),(0xEDBE),(0xEDBF),
|
||||
(0xEDC0),(0xEDC1),(0xEDC2),(0xEDC3),(0xEDC4),(0xEDC5),(0xEDC6),(0xEDC7),
|
||||
(0xEDC8),(0xEDC9),(0xEDCA),(0xEDCB),(0xEDCC),(0xEDCD),(0xEDCE),(0xEDCF),
|
||||
(0xEDD0),(0xEDD1),(0xEDD2),(0xEDD3),(0xEDD4),(0xEDD5),(0xEDD6),(0xEDD7),
|
||||
(0xEDD8),(0xEDD9),(0xEDDA),(0xEDDB),(0xEDDC),(0xEDDD),(0xEDDE),(0xEDDF),
|
||||
(0xEDE0),(0xEDE1),(0xEDE2),(0xEDE3),(0xEDE4),(0xEDE5),(0xEDE6),(0xEDE7),
|
||||
(0xEDE8),(0xEDE9),(0xEDEA),(0xEDEB),(0xEDEC),(0xEDED),(0xEDEE),(0xEDEF),
|
||||
(0xEDF0),(0xEDF1),(0xEDF2),(0xEDF3),(0xEDF4),(0xEDF5),(0xEDF6),(0xEDF7),
|
||||
(0xEDF8),(0xEDF9),(0xEDFA),(0xEDFB),(0xEDFC),
|
||||
(0xEE40),(0xEE41),(0xEE42),(0xEE43),(0xEE44),(0xEE45),(0xEE46),(0xEE47),
|
||||
(0xEE48),(0xEE49),(0xEE4A),(0xEE4B),(0xEE4C),(0xEE4D),(0xEE4E),(0xEE4F),
|
||||
(0xEE50),(0xEE51),(0xEE52),(0xEE53),(0xEE54),(0xEE55),(0xEE56),(0xEE57),
|
||||
(0xEE58),(0xEE59),(0xEE5A),(0xEE5B),(0xEE5C),(0xEE5D),(0xEE5E),(0xEE5F),
|
||||
(0xEE60),(0xEE61),(0xEE62),(0xEE63),(0xEE64),(0xEE65),(0xEE66),(0xEE67),
|
||||
(0xEE68),(0xEE69),(0xEE6A),(0xEE6B),(0xEE6C),(0xEE6D),(0xEE6E),(0xEE6F),
|
||||
(0xEE70),(0xEE71),(0xEE72),(0xEE73),(0xEE74),(0xEE75),(0xEE76),(0xEE77),
|
||||
(0xEE78),(0xEE79),(0xEE7A),(0xEE7B),(0xEE7C),(0xEE7D),(0xEE7E),
|
||||
(0xEE80),(0xEE81),(0xEE82),(0xEE83),(0xEE84),(0xEE85),(0xEE86),(0xEE87),
|
||||
(0xEE88),(0xEE89),(0xEE8A),(0xEE8B),(0xEE8C),(0xEE8D),(0xEE8E),(0xEE8F),
|
||||
(0xEE90),(0xEE91),(0xEE92),(0xEE93),(0xEE94),(0xEE95),(0xEE96),(0xEE97),
|
||||
(0xEE98),(0xEE99),(0xEE9A),(0xEE9B),(0xEE9C),(0xEE9D),(0xEE9E),(0xEE9F),
|
||||
(0xEEA0),(0xEEA1),(0xEEA2),(0xEEA3),(0xEEA4),(0xEEA5),(0xEEA6),(0xEEA7),
|
||||
(0xEEA8),(0xEEA9),(0xEEAA),(0xEEAB),(0xEEAC),(0xEEAD),(0xEEAE),(0xEEAF),
|
||||
(0xEEB0),(0xEEB1),(0xEEB2),(0xEEB3),(0xEEB4),(0xEEB5),(0xEEB6),(0xEEB7),
|
||||
(0xEEB8),(0xEEB9),(0xEEBA),(0xEEBB),(0xEEBC),(0xEEBD),(0xEEBE),(0xEEBF),
|
||||
(0xEEC0),(0xEEC1),(0xEEC2),(0xEEC3),(0xEEC4),(0xEEC5),(0xEEC6),(0xEEC7),
|
||||
(0xEEC8),(0xEEC9),(0xEECA),(0xEECB),(0xEECC),(0xEECD),(0xEECE),(0xEECF),
|
||||
(0xEED0),(0xEED1),(0xEED2),(0xEED3),(0xEED4),(0xEED5),(0xEED6),(0xEED7),
|
||||
(0xEED8),(0xEED9),(0xEEDA),(0xEEDB),(0xEEDC),(0xEEDD),(0xEEDE),(0xEEDF),
|
||||
(0xEEE0),(0xEEE1),(0xEEE2),(0xEEE3),(0xEEE4),(0xEEE5),(0xEEE6),(0xEEE7),
|
||||
(0xEEE8),(0xEEE9),(0xEEEA),(0xEEEB),(0xEEEC),(0xEEEF),
|
||||
(0xEEF0),(0xEEF1),(0xEEF2),(0xEEF3),(0xEEF4),(0xEEF5),(0xEEF6),(0xEEF7),
|
||||
(0xEEF8),(0xEEF9),(0xEEFA),(0xEEFB),(0xEEFC);
|
||||
|
||||
#IBM selected kanji & non-kanji (0xFA40 - 0xFC4B)
|
||||
INSERT INTO t1 VALUES
|
||||
(0xFA40),(0xFA41),(0xFA42),(0xFA43),(0xFA44),(0xFA45),(0xFA46),(0xFA47),
|
||||
(0xFA48),(0xFA49),(0xFA4A),(0xFA4B),(0xFA4C),(0xFA4D),(0xFA4E),(0xFA4F),
|
||||
(0xFA50),(0xFA51),(0xFA52),(0xFA53),(0xFA54),(0xFA55),(0xFA56),(0xFA57),
|
||||
(0xFA58),(0xFA59),(0xFA5A),(0xFA5B),(0xFA5C),(0xFA5D),(0xFA5E),(0xFA5F),
|
||||
(0xFA60),(0xFA61),(0xFA62),(0xFA63),(0xFA64),(0xFA65),(0xFA66),(0xFA67),
|
||||
(0xFA68),(0xFA69),(0xFA6A),(0xFA6B),(0xFA6C),(0xFA6D),(0xFA6E),(0xFA6F),
|
||||
(0xFA70),(0xFA71),(0xFA72),(0xFA73),(0xFA74),(0xFA75),(0xFA76),(0xFA77),
|
||||
(0xFA78),(0xFA79),(0xFA7A),(0xFA7B),(0xFA7C),(0xFA7D),(0xFA7E),
|
||||
(0xFA80),(0xFA81),(0xFA82),(0xFA83),(0xFA84),(0xFA85),(0xFA86),(0xFA87),
|
||||
(0xFA88),(0xFA89),(0xFA8A),(0xFA8B),(0xFA8C),(0xFA8D),(0xFA8E),(0xFA8F),
|
||||
(0xFA90),(0xFA91),(0xFA92),(0xFA93),(0xFA94),(0xFA95),(0xFA96),(0xFA97),
|
||||
(0xFA98),(0xFA99),(0xFA9A),(0xFA9B),(0xFA9C),(0xFA9D),(0xFA9E),(0xFA9F),
|
||||
(0xFAA0),(0xFAA1),(0xFAA2),(0xFAA3),(0xFAA4),(0xFAA5),(0xFAA6),(0xFAA7),
|
||||
(0xFAA8),(0xFAA9),(0xFAAA),(0xFAAB),(0xFAAC),(0xFAAD),(0xFAAE),(0xFAAF),
|
||||
(0xFAB0),(0xFAB1),(0xFAB2),(0xFAB3),(0xFAB4),(0xFAB5),(0xFAB6),(0xFAB7),
|
||||
(0xFAB8),(0xFAB9),(0xFABA),(0xFABB),(0xFABC),(0xFABD),(0xFABE),(0xFABF),
|
||||
(0xFAC0),(0xFAC1),(0xFAC2),(0xFAC3),(0xFAC4),(0xFAC5),(0xFAC6),(0xFAC7),
|
||||
(0xFAC8),(0xFAC9),(0xFACA),(0xFACB),(0xFACC),(0xFACD),(0xFACE),(0xFACF),
|
||||
(0xFAD0),(0xFAD1),(0xFAD2),(0xFAD3),(0xFAD4),(0xFAD5),(0xFAD6),(0xFAD7),
|
||||
(0xFAD8),(0xFAD9),(0xFADA),(0xFADB),(0xFADC),(0xFADD),(0xFADE),(0xFADF),
|
||||
(0xFAE0),(0xFAE1),(0xFAE2),(0xFAE3),(0xFAE4),(0xFAE5),(0xFAE6),(0xFAE7),
|
||||
(0xFAE8),(0xFAE9),(0xFAEA),(0xFAEB),(0xFAEC),(0xFAED),(0xFAEE),(0xFAEF),
|
||||
(0xFAF0),(0xFAF1),(0xFAF2),(0xFAF3),(0xFAF4),(0xFAF5),(0xFAF6),(0xFAF7),
|
||||
(0xFAF8),(0xFAF9),(0xFAFA),(0xFAFB),(0xFAFC),
|
||||
(0xFB40),(0xFB41),(0xFB42),(0xFB43),(0xFB44),(0xFB45),(0xFB46),(0xFB47),
|
||||
(0xFB48),(0xFB49),(0xFB4A),(0xFB4B),(0xFB4C),(0xFB4D),(0xFB4E),(0xFB4F),
|
||||
(0xFB50),(0xFB51),(0xFB52),(0xFB53),(0xFB54),(0xFB55),(0xFB56),(0xFB57),
|
||||
(0xFB58),(0xFB59),(0xFB5A),(0xFB5B),(0xFB5C),(0xFB5D),(0xFB5E),(0xFB5F),
|
||||
(0xFB60),(0xFB61),(0xFB62),(0xFB63),(0xFB64),(0xFB65),(0xFB66),(0xFB67),
|
||||
(0xFB68),(0xFB69),(0xFB6A),(0xFB6B),(0xFB6C),(0xFB6D),(0xFB6E),(0xFB6F),
|
||||
(0xFB70),(0xFB71),(0xFB72),(0xFB73),(0xFB74),(0xFB75),(0xFB76),(0xFB77),
|
||||
(0xFB78),(0xFB79),(0xFB7A),(0xFB7B),(0xFB7C),(0xFB7D),(0xFB7E),
|
||||
(0xFB80),(0xFB81),(0xFB82),(0xFB83),(0xFB84),(0xFB85),(0xFB86),(0xFB87),
|
||||
(0xFB88),(0xFB89),(0xFB8A),(0xFB8B),(0xFB8C),(0xFB8D),(0xFB8E),(0xFB8F),
|
||||
(0xFB90),(0xFB91),(0xFB92),(0xFB93),(0xFB94),(0xFB95),(0xFB96),(0xFB97),
|
||||
(0xFB98),(0xFB99),(0xFB9A),(0xFB9B),(0xFB9C),(0xFB9D),(0xFB9E),(0xFB9F),
|
||||
(0xFBA0),(0xFBA1),(0xFBA2),(0xFBA3),(0xFBA4),(0xFBA5),(0xFBA6),(0xFBA7),
|
||||
(0xFBA8),(0xFBA9),(0xFBAA),(0xFBAB),(0xFBAC),(0xFBAD),(0xFBAE),(0xFBAF),
|
||||
(0xFBB0),(0xFBB1),(0xFBB2),(0xFBB3),(0xFBB4),(0xFBB5),(0xFBB6),(0xFBB7),
|
||||
(0xFBB8),(0xFBB9),(0xFBBA),(0xFBBB),(0xFBBC),(0xFBBD),(0xFBBE),(0xFBBF),
|
||||
(0xFBC0),(0xFBC1),(0xFBC2),(0xFBC3),(0xFBC4),(0xFBC5),(0xFBC6),(0xFBC7),
|
||||
(0xFBC8),(0xFBC9),(0xFBCA),(0xFBCB),(0xFBCC),(0xFBCD),(0xFBCE),(0xFBCF),
|
||||
(0xFBD0),(0xFBD1),(0xFBD2),(0xFBD3),(0xFBD4),(0xFBD5),(0xFBD6),(0xFBD7),
|
||||
(0xFBD8),(0xFBD9),(0xFBDA),(0xFBDB),(0xFBDC),(0xFBDD),(0xFBDE),(0xFBDF),
|
||||
(0xFBE0),(0xFBE1),(0xFBE2),(0xFBE3),(0xFBE4),(0xFBE5),(0xFBE6),(0xFBE7),
|
||||
(0xFBE8),(0xFBE9),(0xFBEA),(0xFBEB),(0xFBEC),(0xFBED),(0xFBEE),(0xFBEF),
|
||||
(0xFBF0),(0xFBF1),(0xFBF2),(0xFBF3),(0xFBF4),(0xFBF5),(0xFBF6),(0xFBF7),
|
||||
(0xFBF8),(0xFBF9),(0xFBFA),(0xFBFB),(0xFBFC),
|
||||
(0xFC40),(0xFC41),(0xFC42),(0xFC43),(0xFC44),(0xFC45),(0xFC46),(0xFC47),
|
||||
(0xFC48),(0xFC49),(0xFC4A),(0xFC4B);
|
||||
|
||||
#User defined characters (0xF040-0xF9FC)
|
||||
INSERT INTO t1 VALUES
|
||||
(0xF040),(0xF041),(0xF042),(0xF043),(0xF044),(0xF045),(0xF046),(0xF047),
|
||||
(0xF048),(0xF049),(0xF04A),(0xF04B),(0xF04C),(0xF04D),(0xF04E),(0xF04F),
|
||||
(0xF050),(0xF051),(0xF052),(0xF053),(0xF054),(0xF055),(0xF056),(0xF057),
|
||||
(0xF058),(0xF059),(0xF05A),(0xF05B),(0xF05C),(0xF05D),(0xF05E),(0xF05F),
|
||||
(0xF060),(0xF061),(0xF062),(0xF063),(0xF064),(0xF065),(0xF066),(0xF067),
|
||||
(0xF068),(0xF069),(0xF06A),(0xF06B),(0xF06C),(0xF06D),(0xF06E),(0xF06F),
|
||||
(0xF070),(0xF071),(0xF072),(0xF073),(0xF074),(0xF075),(0xF076),(0xF077),
|
||||
(0xF078),(0xF079),(0xF07A),(0xF07B),(0xF07C),(0xF07D),(0xF07E),
|
||||
(0xF080),(0xF081),(0xF082),(0xF083),(0xF084),(0xF085),(0xF086),(0xF087),
|
||||
(0xF088),(0xF089),(0xF08A),(0xF08B),(0xF08C),(0xF08D),(0xF08E),(0xF08F),
|
||||
(0xF090),(0xF091),(0xF092),(0xF093),(0xF094),(0xF095),(0xF096),(0xF097),
|
||||
(0xF098),(0xF099),(0xF09A),(0xF09B),(0xF09C),(0xF09D),(0xF09E),(0xF09F),
|
||||
(0xF0A0),(0xF0A1),(0xF0A2),(0xF0A3),(0xF0A4),(0xF0A5),(0xF0A6),(0xF0A7),
|
||||
(0xF0A8),(0xF0A9),(0xF0AA),(0xF0AB),(0xF0AC),(0xF0AD),(0xF0AE),(0xF0AF),
|
||||
(0xF0B0),(0xF0B1),(0xF0B2),(0xF0B3),(0xF0B4),(0xF0B5),(0xF0B6),(0xF0B7),
|
||||
(0xF0B8),(0xF0B9),(0xF0BA),(0xF0BB),(0xF0BC),(0xF0BD),(0xF0BE),(0xF0BF),
|
||||
(0xF0C0),(0xF0C1),(0xF0C2),(0xF0C3),(0xF0C4),(0xF0C5),(0xF0C6),(0xF0C7),
|
||||
(0xF0C8),(0xF0C9),(0xF0CA),(0xF0CB),(0xF0CC),(0xF0CD),(0xF0CE),(0xF0CF),
|
||||
(0xF0D0),(0xF0D1),(0xF0D2),(0xF0D3),(0xF0D4),(0xF0D5),(0xF0D6),(0xF0D7),
|
||||
(0xF0D8),(0xF0D9),(0xF0DA),(0xF0DB),(0xF0DC),(0xF0DD),(0xF0DE),(0xF0DF),
|
||||
(0xF0E0),(0xF0E1),(0xF0E2),(0xF0E3),(0xF0E4),(0xF0E5),(0xF0E6),(0xF0E7),
|
||||
(0xF0E8),(0xF0E9),(0xF0EA),(0xF0EB),(0xF0EC),(0xF0ED),(0xF0EE),(0xF0EF),
|
||||
(0xF0F0),(0xF0F1),(0xF0F2),(0xF0F3),(0xF0F4),(0xF0F5),(0xF0F6),(0xF0F7),
|
||||
(0xF0F8),(0xF0F9),(0xF0FA),(0xF0FB),(0xF0FC),
|
||||
(0xF140),(0xF141),(0xF142),(0xF143),(0xF144),(0xF145),(0xF146),(0xF147),
|
||||
(0xF148),(0xF149),(0xF14A),(0xF14B),(0xF14C),(0xF14D),(0xF14E),(0xF14F),
|
||||
(0xF150),(0xF151),(0xF152),(0xF153),(0xF154),(0xF155),(0xF156),(0xF157),
|
||||
(0xF158),(0xF159),(0xF15A),(0xF15B),(0xF15C),(0xF15D),(0xF15E),(0xF15F),
|
||||
(0xF160),(0xF161),(0xF162),(0xF163),(0xF164),(0xF165),(0xF166),(0xF167),
|
||||
(0xF168),(0xF169),(0xF16A),(0xF16B),(0xF16C),(0xF16D),(0xF16E),(0xF16F),
|
||||
(0xF170),(0xF171),(0xF172),(0xF173),(0xF174),(0xF175),(0xF176),(0xF177),
|
||||
(0xF178),(0xF179),(0xF17A),(0xF17B),(0xF17C),(0xF17D),(0xF17E),
|
||||
(0xF180),(0xF181),(0xF182),(0xF183),(0xF184),(0xF185),(0xF186),(0xF187),
|
||||
(0xF188),(0xF189),(0xF18A),(0xF18B),(0xF18C),(0xF18D),(0xF18E),(0xF18F),
|
||||
(0xF190),(0xF191),(0xF192),(0xF193),(0xF194),(0xF195),(0xF196),(0xF197),
|
||||
(0xF198),(0xF199),(0xF19A),(0xF19B),(0xF19C),(0xF19D),(0xF19E),(0xF19F),
|
||||
(0xF1A0),(0xF1A1),(0xF1A2),(0xF1A3),(0xF1A4),(0xF1A5),(0xF1A6),(0xF1A7),
|
||||
(0xF1A8),(0xF1A9),(0xF1AA),(0xF1AB),(0xF1AC),(0xF1AD),(0xF1AE),(0xF1AF),
|
||||
(0xF1B0),(0xF1B1),(0xF1B2),(0xF1B3),(0xF1B4),(0xF1B5),(0xF1B6),(0xF1B7),
|
||||
(0xF1B8),(0xF1B9),(0xF1BA),(0xF1BB),(0xF1BC),(0xF1BD),(0xF1BE),(0xF1BF),
|
||||
(0xF1C0),(0xF1C1),(0xF1C2),(0xF1C3),(0xF1C4),(0xF1C5),(0xF1C6),(0xF1C7),
|
||||
(0xF1C8),(0xF1C9),(0xF1CA),(0xF1CB),(0xF1CC),(0xF1CD),(0xF1CE),(0xF1CF),
|
||||
(0xF1D0),(0xF1D1),(0xF1D2),(0xF1D3),(0xF1D4),(0xF1D5),(0xF1D6),(0xF1D7),
|
||||
(0xF1D8),(0xF1D9),(0xF1DA),(0xF1DB),(0xF1DC),(0xF1DD),(0xF1DE),(0xF1DF),
|
||||
(0xF1E0),(0xF1E1),(0xF1E2),(0xF1E3),(0xF1E4),(0xF1E5),(0xF1E6),(0xF1E7),
|
||||
(0xF1E8),(0xF1E9),(0xF1EA),(0xF1EB),(0xF1EC),(0xF1ED),(0xF1EE),(0xF1EF),
|
||||
(0xF1F0),(0xF1F1),(0xF1F2),(0xF1F3),(0xF1F4),(0xF1F5),(0xF1F6),(0xF1F7),
|
||||
(0xF1F8),(0xF1F9),(0xF1FA),(0xF1FB),(0xF1FC),
|
||||
(0xF240),(0xF241),(0xF242),(0xF243),(0xF244),(0xF245),(0xF246),(0xF247),
|
||||
(0xF248),(0xF249),(0xF24A),(0xF24B),(0xF24C),(0xF24D),(0xF24E),(0xF24F),
|
||||
(0xF250),(0xF251),(0xF252),(0xF253),(0xF254),(0xF255),(0xF256),(0xF257),
|
||||
(0xF258),(0xF259),(0xF25A),(0xF25B),(0xF25C),(0xF25D),(0xF25E),(0xF25F),
|
||||
(0xF260),(0xF261),(0xF262),(0xF263),(0xF264),(0xF265),(0xF266),(0xF267),
|
||||
(0xF268),(0xF269),(0xF26A),(0xF26B),(0xF26C),(0xF26D),(0xF26E),(0xF26F),
|
||||
(0xF270),(0xF271),(0xF272),(0xF273),(0xF274),(0xF275),(0xF276),(0xF277),
|
||||
(0xF278),(0xF279),(0xF27A),(0xF27B),(0xF27C),(0xF27D),(0xF27E),
|
||||
(0xF280),(0xF281),(0xF282),(0xF283),(0xF284),(0xF285),(0xF286),(0xF287),
|
||||
(0xF288),(0xF289),(0xF28A),(0xF28B),(0xF28C),(0xF28D),(0xF28E),(0xF28F),
|
||||
(0xF290),(0xF291),(0xF292),(0xF293),(0xF294),(0xF295),(0xF296),(0xF297),
|
||||
(0xF298),(0xF299),(0xF29A),(0xF29B),(0xF29C),(0xF29D),(0xF29E),(0xF29F),
|
||||
(0xF2A0),(0xF2A1),(0xF2A2),(0xF2A3),(0xF2A4),(0xF2A5),(0xF2A6),(0xF2A7),
|
||||
(0xF2A8),(0xF2A9),(0xF2AA),(0xF2AB),(0xF2AC),(0xF2AD),(0xF2AE),(0xF2AF),
|
||||
(0xF2B0),(0xF2B1),(0xF2B2),(0xF2B3),(0xF2B4),(0xF2B5),(0xF2B6),(0xF2B7),
|
||||
(0xF2B8),(0xF2B9),(0xF2BA),(0xF2BB),(0xF2BC),(0xF2BD),(0xF2BE),(0xF2BF),
|
||||
(0xF2C0),(0xF2C1),(0xF2C2),(0xF2C3),(0xF2C4),(0xF2C5),(0xF2C6),(0xF2C7),
|
||||
(0xF2C8),(0xF2C9),(0xF2CA),(0xF2CB),(0xF2CC),(0xF2CD),(0xF2CE),(0xF2CF),
|
||||
(0xF2D0),(0xF2D1),(0xF2D2),(0xF2D3),(0xF2D4),(0xF2D5),(0xF2D6),(0xF2D7),
|
||||
(0xF2D8),(0xF2D9),(0xF2DA),(0xF2DB),(0xF2DC),(0xF2DD),(0xF2DE),(0xF2DF),
|
||||
(0xF2E0),(0xF2E1),(0xF2E2),(0xF2E3),(0xF2E4),(0xF2E5),(0xF2E6),(0xF2E7),
|
||||
(0xF2E8),(0xF2E9),(0xF2EA),(0xF2EB),(0xF2EC),(0xF2ED),(0xF2EE),(0xF2EF),
|
||||
(0xF2F0),(0xF2F1),(0xF2F2),(0xF2F3),(0xF2F4),(0xF2F5),(0xF2F6),(0xF2F7),
|
||||
(0xF2F8),(0xF2F9),(0xF2FA),(0xF2FB),(0xF2FC),
|
||||
(0xF340),(0xF341),(0xF342),(0xF343),(0xF344),(0xF345),(0xF346),(0xF347),
|
||||
(0xF348),(0xF349),(0xF34A),(0xF34B),(0xF34C),(0xF34D),(0xF34E),(0xF34F),
|
||||
(0xF350),(0xF351),(0xF352),(0xF353),(0xF354),(0xF355),(0xF356),(0xF357),
|
||||
(0xF358),(0xF359),(0xF35A),(0xF35B),(0xF35C),(0xF35D),(0xF35E),(0xF35F),
|
||||
(0xF360),(0xF361),(0xF362),(0xF363),(0xF364),(0xF365),(0xF366),(0xF367),
|
||||
(0xF368),(0xF369),(0xF36A),(0xF36B),(0xF36C),(0xF36D),(0xF36E),(0xF36F),
|
||||
(0xF370),(0xF371),(0xF372),(0xF373),(0xF374),(0xF375),(0xF376),(0xF377),
|
||||
(0xF378),(0xF379),(0xF37A),(0xF37B),(0xF37C),(0xF37D),(0xF37E),
|
||||
(0xF380),(0xF381),(0xF382),(0xF383),(0xF384),(0xF385),(0xF386),(0xF387),
|
||||
(0xF388),(0xF389),(0xF38A),(0xF38B),(0xF38C),(0xF38D),(0xF38E),(0xF38F),
|
||||
(0xF390),(0xF391),(0xF392),(0xF393),(0xF394),(0xF395),(0xF396),(0xF397),
|
||||
(0xF398),(0xF399),(0xF39A),(0xF39B),(0xF39C),(0xF39D),(0xF39E),(0xF39F),
|
||||
(0xF3A0),(0xF3A1),(0xF3A2),(0xF3A3),(0xF3A4),(0xF3A5),(0xF3A6),(0xF3A7),
|
||||
(0xF3A8),(0xF3A9),(0xF3AA),(0xF3AB),(0xF3AC),(0xF3AD),(0xF3AE),(0xF3AF),
|
||||
(0xF3B0),(0xF3B1),(0xF3B2),(0xF3B3),(0xF3B4),(0xF3B5),(0xF3B6),(0xF3B7),
|
||||
(0xF3B8),(0xF3B9),(0xF3BA),(0xF3BB),(0xF3BC),(0xF3BD),(0xF3BE),(0xF3BF),
|
||||
(0xF3C0),(0xF3C1),(0xF3C2),(0xF3C3),(0xF3C4),(0xF3C5),(0xF3C6),(0xF3C7),
|
||||
(0xF3C8),(0xF3C9),(0xF3CA),(0xF3CB),(0xF3CC),(0xF3CD),(0xF3CE),(0xF3CF),
|
||||
(0xF3D0),(0xF3D1),(0xF3D2),(0xF3D3),(0xF3D4),(0xF3D5),(0xF3D6),(0xF3D7),
|
||||
(0xF3D8),(0xF3D9),(0xF3DA),(0xF3DB),(0xF3DC),(0xF3DD),(0xF3DE),(0xF3DF),
|
||||
(0xF3E0),(0xF3E1),(0xF3E2),(0xF3E3),(0xF3E4),(0xF3E5),(0xF3E6),(0xF3E7),
|
||||
(0xF3E8),(0xF3E9),(0xF3EA),(0xF3EB),(0xF3EC),(0xF3ED),(0xF3EE),(0xF3EF),
|
||||
(0xF3F0),(0xF3F1),(0xF3F2),(0xF3F3),(0xF3F4),(0xF3F5),(0xF3F6),(0xF3F7),
|
||||
(0xF3F8),(0xF3F9),(0xF3FA),(0xF3FB),(0xF3FC),
|
||||
(0xF440),(0xF441),(0xF442),(0xF443),(0xF444),(0xF445),(0xF446),(0xF447),
|
||||
(0xF448),(0xF449),(0xF44A),(0xF44B),(0xF44C),(0xF44D),(0xF44E),(0xF44F),
|
||||
(0xF450),(0xF451),(0xF452),(0xF453),(0xF454),(0xF455),(0xF456),(0xF457),
|
||||
(0xF458),(0xF459),(0xF45A),(0xF45B),(0xF45C),(0xF45D),(0xF45E),(0xF45F),
|
||||
(0xF460),(0xF461),(0xF462),(0xF463),(0xF464),(0xF465),(0xF466),(0xF467),
|
||||
(0xF468),(0xF469),(0xF46A),(0xF46B),(0xF46C),(0xF46D),(0xF46E),(0xF46F),
|
||||
(0xF470),(0xF471),(0xF472),(0xF473),(0xF474),(0xF475),(0xF476),(0xF477),
|
||||
(0xF478),(0xF479),(0xF47A),(0xF47B),(0xF47C),(0xF47D),(0xF47E),
|
||||
(0xF480),(0xF481),(0xF482),(0xF483),(0xF484),(0xF485),(0xF486),(0xF487),
|
||||
(0xF488),(0xF489),(0xF48A),(0xF48B),(0xF48C),(0xF48D),(0xF48E),(0xF48F),
|
||||
(0xF490),(0xF491),(0xF492),(0xF493),(0xF494),(0xF495),(0xF496),(0xF497),
|
||||
(0xF498),(0xF499),(0xF49A),(0xF49B),(0xF49C),(0xF49D),(0xF49E),(0xF49F),
|
||||
(0xF4A0),(0xF4A1),(0xF4A2),(0xF4A3),(0xF4A4),(0xF4A5),(0xF4A6),(0xF4A7),
|
||||
(0xF4A8),(0xF4A9),(0xF4AA),(0xF4AB),(0xF4AC),(0xF4AD),(0xF4AE),(0xF4AF),
|
||||
(0xF4B0),(0xF4B1),(0xF4B2),(0xF4B3),(0xF4B4),(0xF4B5),(0xF4B6),(0xF4B7),
|
||||
(0xF4B8),(0xF4B9),(0xF4BA),(0xF4BB),(0xF4BC),(0xF4BD),(0xF4BE),(0xF4BF),
|
||||
(0xF4C0),(0xF4C1),(0xF4C2),(0xF4C3),(0xF4C4),(0xF4C5),(0xF4C6),(0xF4C7),
|
||||
(0xF4C8),(0xF4C9),(0xF4CA),(0xF4CB),(0xF4CC),(0xF4CD),(0xF4CE),(0xF4CF),
|
||||
(0xF4D0),(0xF4D1),(0xF4D2),(0xF4D3),(0xF4D4),(0xF4D5),(0xF4D6),(0xF4D7),
|
||||
(0xF4D8),(0xF4D9),(0xF4DA),(0xF4DB),(0xF4DC),(0xF4DD),(0xF4DE),(0xF4DF),
|
||||
(0xF4E0),(0xF4E1),(0xF4E2),(0xF4E3),(0xF4E4),(0xF4E5),(0xF4E6),(0xF4E7),
|
||||
(0xF4E8),(0xF4E9),(0xF4EA),(0xF4EB),(0xF4EC),(0xF4ED),(0xF4EE),(0xF4EF),
|
||||
(0xF4F0),(0xF4F1),(0xF4F2),(0xF4F3),(0xF4F4),(0xF4F5),(0xF4F6),(0xF4F7),
|
||||
(0xF4F8),(0xF4F9),(0xF4FA),(0xF4FB),(0xF4FC),
|
||||
(0xF540),(0xF541),(0xF542),(0xF543),(0xF544),(0xF545),(0xF546),(0xF547),
|
||||
(0xF548),(0xF549),(0xF54A),(0xF54B),(0xF54C),(0xF54D),(0xF54E),(0xF54F),
|
||||
(0xF550),(0xF551),(0xF552),(0xF553),(0xF554),(0xF555),(0xF556),(0xF557),
|
||||
(0xF558),(0xF559),(0xF55A),(0xF55B),(0xF55C),(0xF55D),(0xF55E),(0xF55F),
|
||||
(0xF560),(0xF561),(0xF562),(0xF563),(0xF564),(0xF565),(0xF566),(0xF567),
|
||||
(0xF568),(0xF569),(0xF56A),(0xF56B),(0xF56C),(0xF56D),(0xF56E),(0xF56F),
|
||||
(0xF570),(0xF571),(0xF572),(0xF573),(0xF574),(0xF575),(0xF576),(0xF577),
|
||||
(0xF578),(0xF579),(0xF57A),(0xF57B),(0xF57C),(0xF57D),(0xF57E),
|
||||
(0xF580),(0xF581),(0xF582),(0xF583),(0xF584),(0xF585),(0xF586),(0xF587),
|
||||
(0xF588),(0xF589),(0xF58A),(0xF58B),(0xF58C),(0xF58D),(0xF58E),(0xF58F),
|
||||
(0xF590),(0xF591),(0xF592),(0xF593),(0xF594),(0xF595),(0xF596),(0xF597),
|
||||
(0xF598),(0xF599),(0xF59A),(0xF59B),(0xF59C),(0xF59D),(0xF59E),(0xF59F),
|
||||
(0xF5A0),(0xF5A1),(0xF5A2),(0xF5A3),(0xF5A4),(0xF5A5),(0xF5A6),(0xF5A7),
|
||||
(0xF5A8),(0xF5A9),(0xF5AA),(0xF5AB),(0xF5AC),(0xF5AD),(0xF5AE),(0xF5AF),
|
||||
(0xF5B0),(0xF5B1),(0xF5B2),(0xF5B3),(0xF5B4),(0xF5B5),(0xF5B6),(0xF5B7),
|
||||
(0xF5B8),(0xF5B9),(0xF5BA),(0xF5BB),(0xF5BC),(0xF5BD),(0xF5BE),(0xF5BF),
|
||||
(0xF5C0),(0xF5C1),(0xF5C2),(0xF5C3),(0xF5C4),(0xF5C5),(0xF5C6),(0xF5C7),
|
||||
(0xF5C8),(0xF5C9),(0xF5CA),(0xF5CB),(0xF5CC),(0xF5CD),(0xF5CE),(0xF5CF),
|
||||
(0xF5D0),(0xF5D1),(0xF5D2),(0xF5D3),(0xF5D4),(0xF5D5),(0xF5D6),(0xF5D7),
|
||||
(0xF5D8),(0xF5D9),(0xF5DA),(0xF5DB),(0xF5DC),(0xF5DD),(0xF5DE),(0xF5DF),
|
||||
(0xF5E0),(0xF5E1),(0xF5E2),(0xF5E3),(0xF5E4),(0xF5E5),(0xF5E6),(0xF5E7),
|
||||
(0xF5E8),(0xF5E9),(0xF5EA),(0xF5EB),(0xF5EC),(0xF5ED),(0xF5EE),(0xF5EF),
|
||||
(0xF5F0),(0xF5F1),(0xF5F2),(0xF5F3),(0xF5F4),(0xF5F5),(0xF5F6),(0xF5F7),
|
||||
(0xF5F8),(0xF5F9),(0xF5FA),(0xF5FB),(0xF5FC),
|
||||
(0xF640),(0xF641),(0xF642),(0xF643),(0xF644),(0xF645),(0xF646),(0xF647),
|
||||
(0xF648),(0xF649),(0xF64A),(0xF64B),(0xF64C),(0xF64D),(0xF64E),(0xF64F),
|
||||
(0xF650),(0xF651),(0xF652),(0xF653),(0xF654),(0xF655),(0xF656),(0xF657),
|
||||
(0xF658),(0xF659),(0xF65A),(0xF65B),(0xF65C),(0xF65D),(0xF65E),(0xF65F),
|
||||
(0xF660),(0xF661),(0xF662),(0xF663),(0xF664),(0xF665),(0xF666),(0xF667),
|
||||
(0xF668),(0xF669),(0xF66A),(0xF66B),(0xF66C),(0xF66D),(0xF66E),(0xF66F),
|
||||
(0xF670),(0xF671),(0xF672),(0xF673),(0xF674),(0xF675),(0xF676),(0xF677),
|
||||
(0xF678),(0xF679),(0xF67A),(0xF67B),(0xF67C),(0xF67D),(0xF67E),
|
||||
(0xF680),(0xF681),(0xF682),(0xF683),(0xF684),(0xF685),(0xF686),(0xF687),
|
||||
(0xF688),(0xF689),(0xF68A),(0xF68B),(0xF68C),(0xF68D),(0xF68E),(0xF68F),
|
||||
(0xF690),(0xF691),(0xF692),(0xF693),(0xF694),(0xF695),(0xF696),(0xF697),
|
||||
(0xF698),(0xF699),(0xF69A),(0xF69B),(0xF69C),(0xF69D),(0xF69E),(0xF69F),
|
||||
(0xF6A0),(0xF6A1),(0xF6A2),(0xF6A3),(0xF6A4),(0xF6A5),(0xF6A6),(0xF6A7),
|
||||
(0xF6A8),(0xF6A9),(0xF6AA),(0xF6AB),(0xF6AC),(0xF6AD),(0xF6AE),(0xF6AF),
|
||||
(0xF6B0),(0xF6B1),(0xF6B2),(0xF6B3),(0xF6B4),(0xF6B5),(0xF6B6),(0xF6B7),
|
||||
(0xF6B8),(0xF6B9),(0xF6BA),(0xF6BB),(0xF6BC),(0xF6BD),(0xF6BE),(0xF6BF),
|
||||
(0xF6C0),(0xF6C1),(0xF6C2),(0xF6C3),(0xF6C4),(0xF6C5),(0xF6C6),(0xF6C7),
|
||||
(0xF6C8),(0xF6C9),(0xF6CA),(0xF6CB),(0xF6CC),(0xF6CD),(0xF6CE),(0xF6CF),
|
||||
(0xF6D0),(0xF6D1),(0xF6D2),(0xF6D3),(0xF6D4),(0xF6D5),(0xF6D6),(0xF6D7),
|
||||
(0xF6D8),(0xF6D9),(0xF6DA),(0xF6DB),(0xF6DC),(0xF6DD),(0xF6DE),(0xF6DF),
|
||||
(0xF6E0),(0xF6E1),(0xF6E2),(0xF6E3),(0xF6E4),(0xF6E5),(0xF6E6),(0xF6E7),
|
||||
(0xF6E8),(0xF6E9),(0xF6EA),(0xF6EB),(0xF6EC),(0xF6ED),(0xF6EE),(0xF6EF),
|
||||
(0xF6F0),(0xF6F1),(0xF6F2),(0xF6F3),(0xF6F4),(0xF6F5),(0xF6F6),(0xF6F7),
|
||||
(0xF6F8),(0xF6F9),(0xF6FA),(0xF6FB),(0xF6FC),
|
||||
(0xF740),(0xF741),(0xF742),(0xF743),(0xF744),(0xF745),(0xF746),(0xF747),
|
||||
(0xF748),(0xF749),(0xF74A),(0xF74B),(0xF74C),(0xF74D),(0xF74E),(0xF74F),
|
||||
(0xF750),(0xF751),(0xF752),(0xF753),(0xF754),(0xF755),(0xF756),(0xF757),
|
||||
(0xF758),(0xF759),(0xF75A),(0xF75B),(0xF75C),(0xF75D),(0xF75E),(0xF75F),
|
||||
(0xF760),(0xF761),(0xF762),(0xF763),(0xF764),(0xF765),(0xF766),(0xF767),
|
||||
(0xF768),(0xF769),(0xF76A),(0xF76B),(0xF76C),(0xF76D),(0xF76E),(0xF76F),
|
||||
(0xF770),(0xF771),(0xF772),(0xF773),(0xF774),(0xF775),(0xF776),(0xF777),
|
||||
(0xF778),(0xF779),(0xF77A),(0xF77B),(0xF77C),(0xF77D),(0xF77E),
|
||||
(0xF780),(0xF781),(0xF782),(0xF783),(0xF784),(0xF785),(0xF786),(0xF787),
|
||||
(0xF788),(0xF789),(0xF78A),(0xF78B),(0xF78C),(0xF78D),(0xF78E),(0xF78F),
|
||||
(0xF790),(0xF791),(0xF792),(0xF793),(0xF794),(0xF795),(0xF796),(0xF797),
|
||||
(0xF798),(0xF799),(0xF79A),(0xF79B),(0xF79C),(0xF79D),(0xF79E),(0xF79F),
|
||||
(0xF7A0),(0xF7A1),(0xF7A2),(0xF7A3),(0xF7A4),(0xF7A5),(0xF7A6),(0xF7A7),
|
||||
(0xF7A8),(0xF7A9),(0xF7AA),(0xF7AB),(0xF7AC),(0xF7AD),(0xF7AE),(0xF7AF),
|
||||
(0xF7B0),(0xF7B1),(0xF7B2),(0xF7B3),(0xF7B4),(0xF7B5),(0xF7B6),(0xF7B7),
|
||||
(0xF7B8),(0xF7B9),(0xF7BA),(0xF7BB),(0xF7BC),(0xF7BD),(0xF7BE),(0xF7BF),
|
||||
(0xF7C0),(0xF7C1),(0xF7C2),(0xF7C3),(0xF7C4),(0xF7C5),(0xF7C6),(0xF7C7),
|
||||
(0xF7C8),(0xF7C9),(0xF7CA),(0xF7CB),(0xF7CC),(0xF7CD),(0xF7CE),(0xF7CF),
|
||||
(0xF7D0),(0xF7D1),(0xF7D2),(0xF7D3),(0xF7D4),(0xF7D5),(0xF7D6),(0xF7D7),
|
||||
(0xF7D8),(0xF7D9),(0xF7DA),(0xF7DB),(0xF7DC),(0xF7DD),(0xF7DE),(0xF7DF),
|
||||
(0xF7E0),(0xF7E1),(0xF7E2),(0xF7E3),(0xF7E4),(0xF7E5),(0xF7E6),(0xF7E7),
|
||||
(0xF7E8),(0xF7E9),(0xF7EA),(0xF7EB),(0xF7EC),(0xF7ED),(0xF7EE),(0xF7EF),
|
||||
(0xF7F0),(0xF7F1),(0xF7F2),(0xF7F3),(0xF7F4),(0xF7F5),(0xF7F6),(0xF7F7),
|
||||
(0xF7F8),(0xF7F9),(0xF7FA),(0xF7FB),(0xF7FC),
|
||||
(0xF840),(0xF841),(0xF842),(0xF843),(0xF844),(0xF845),(0xF846),(0xF847),
|
||||
(0xF848),(0xF849),(0xF84A),(0xF84B),(0xF84C),(0xF84D),(0xF84E),(0xF84F),
|
||||
(0xF850),(0xF851),(0xF852),(0xF853),(0xF854),(0xF855),(0xF856),(0xF857),
|
||||
(0xF858),(0xF859),(0xF85A),(0xF85B),(0xF85C),(0xF85D),(0xF85E),(0xF85F),
|
||||
(0xF860),(0xF861),(0xF862),(0xF863),(0xF864),(0xF865),(0xF866),(0xF867),
|
||||
(0xF868),(0xF869),(0xF86A),(0xF86B),(0xF86C),(0xF86D),(0xF86E),(0xF86F),
|
||||
(0xF870),(0xF871),(0xF872),(0xF873),(0xF874),(0xF875),(0xF876),(0xF877),
|
||||
(0xF878),(0xF879),(0xF87A),(0xF87B),(0xF87C),(0xF87D),(0xF87E),
|
||||
(0xF880),(0xF881),(0xF882),(0xF883),(0xF884),(0xF885),(0xF886),(0xF887),
|
||||
(0xF888),(0xF889),(0xF88A),(0xF88B),(0xF88C),(0xF88D),(0xF88E),(0xF88F),
|
||||
(0xF890),(0xF891),(0xF892),(0xF893),(0xF894),(0xF895),(0xF896),(0xF897),
|
||||
(0xF898),(0xF899),(0xF89A),(0xF89B),(0xF89C),(0xF89D),(0xF89E),(0xF89F),
|
||||
(0xF8A0),(0xF8A1),(0xF8A2),(0xF8A3),(0xF8A4),(0xF8A5),(0xF8A6),(0xF8A7),
|
||||
(0xF8A8),(0xF8A9),(0xF8AA),(0xF8AB),(0xF8AC),(0xF8AD),(0xF8AE),(0xF8AF),
|
||||
(0xF8B0),(0xF8B1),(0xF8B2),(0xF8B3),(0xF8B4),(0xF8B5),(0xF8B6),(0xF8B7),
|
||||
(0xF8B8),(0xF8B9),(0xF8BA),(0xF8BB),(0xF8BC),(0xF8BD),(0xF8BE),(0xF8BF),
|
||||
(0xF8C0),(0xF8C1),(0xF8C2),(0xF8C3),(0xF8C4),(0xF8C5),(0xF8C6),(0xF8C7),
|
||||
(0xF8C8),(0xF8C9),(0xF8CA),(0xF8CB),(0xF8CC),(0xF8CD),(0xF8CE),(0xF8CF),
|
||||
(0xF8D0),(0xF8D1),(0xF8D2),(0xF8D3),(0xF8D4),(0xF8D5),(0xF8D6),(0xF8D7),
|
||||
(0xF8D8),(0xF8D9),(0xF8DA),(0xF8DB),(0xF8DC),(0xF8DD),(0xF8DE),(0xF8DF),
|
||||
(0xF8E0),(0xF8E1),(0xF8E2),(0xF8E3),(0xF8E4),(0xF8E5),(0xF8E6),(0xF8E7),
|
||||
(0xF8E8),(0xF8E9),(0xF8EA),(0xF8EB),(0xF8EC),(0xF8ED),(0xF8EE),(0xF8EF),
|
||||
(0xF8F0),(0xF8F1),(0xF8F2),(0xF8F3),(0xF8F4),(0xF8F5),(0xF8F6),(0xF8F7),
|
||||
(0xF8F8),(0xF8F9),(0xF8FA),(0xF8FB),(0xF8FC),
|
||||
(0xF940),(0xF941),(0xF942),(0xF943),(0xF944),(0xF945),(0xF946),(0xF947),
|
||||
(0xF948),(0xF949),(0xF94A),(0xF94B),(0xF94C),(0xF94D),(0xF94E),(0xF94F),
|
||||
(0xF950),(0xF951),(0xF952),(0xF953),(0xF954),(0xF955),(0xF956),(0xF957),
|
||||
(0xF958),(0xF959),(0xF95A),(0xF95B),(0xF95C),(0xF95D),(0xF95E),(0xF95F),
|
||||
(0xF960),(0xF961),(0xF962),(0xF963),(0xF964),(0xF965),(0xF966),(0xF967),
|
||||
(0xF968),(0xF969),(0xF96A),(0xF96B),(0xF96C),(0xF96D),(0xF96E),(0xF96F),
|
||||
(0xF970),(0xF971),(0xF972),(0xF973),(0xF974),(0xF975),(0xF976),(0xF977),
|
||||
(0xF978),(0xF979),(0xF97A),(0xF97B),(0xF97C),(0xF97D),(0xF97E),
|
||||
(0xF980),(0xF981),(0xF982),(0xF983),(0xF984),(0xF985),(0xF986),(0xF987),
|
||||
(0xF988),(0xF989),(0xF98A),(0xF98B),(0xF98C),(0xF98D),(0xF98E),(0xF98F),
|
||||
(0xF990),(0xF991),(0xF992),(0xF993),(0xF994),(0xF995),(0xF996),(0xF997),
|
||||
(0xF998),(0xF999),(0xF99A),(0xF99B),(0xF99C),(0xF99D),(0xF99E),(0xF99F),
|
||||
(0xF9A0),(0xF9A1),(0xF9A2),(0xF9A3),(0xF9A4),(0xF9A5),(0xF9A6),(0xF9A7),
|
||||
(0xF9A8),(0xF9A9),(0xF9AA),(0xF9AB),(0xF9AC),(0xF9AD),(0xF9AE),(0xF9AF),
|
||||
(0xF9B0),(0xF9B1),(0xF9B2),(0xF9B3),(0xF9B4),(0xF9B5),(0xF9B6),(0xF9B7),
|
||||
(0xF9B8),(0xF9B9),(0xF9BA),(0xF9BB),(0xF9BC),(0xF9BD),(0xF9BE),(0xF9BF),
|
||||
(0xF9C0),(0xF9C1),(0xF9C2),(0xF9C3),(0xF9C4),(0xF9C5),(0xF9C6),(0xF9C7),
|
||||
(0xF9C8),(0xF9C9),(0xF9CA),(0xF9CB),(0xF9CC),(0xF9CD),(0xF9CE),(0xF9CF),
|
||||
(0xF9D0),(0xF9D1),(0xF9D2),(0xF9D3),(0xF9D4),(0xF9D5),(0xF9D6),(0xF9D7),
|
||||
(0xF9D8),(0xF9D9),(0xF9DA),(0xF9DB),(0xF9DC),(0xF9DD),(0xF9DE),(0xF9DF),
|
||||
(0xF9E0),(0xF9E1),(0xF9E2),(0xF9E3),(0xF9E4),(0xF9E5),(0xF9E6),(0xF9E7),
|
||||
(0xF9E8),(0xF9E9),(0xF9EA),(0xF9EB),(0xF9EC),(0xF9ED),(0xF9EE),(0xF9EF),
|
||||
(0xF9F0),(0xF9F1),(0xF9F2),(0xF9F3),(0xF9F4),(0xF9F5),(0xF9F6),(0xF9F7),
|
||||
(0xF9F8),(0xF9F9),(0xF9FA),(0xF9FB),(0xF9FC);
|
||||
|
||||
#Test that all the characters are stored correctly
|
||||
SELECT HEX(c1) FROM t1;
|
||||
|
||||
#Test conversion to ucs2
|
||||
CREATE TABLE t2 SELECT CONVERT(c1 USING ucs2) AS c1 FROM t1;
|
||||
SELECT HEX(c1) FROM t2;
|
||||
|
||||
#Test round trip conversion
|
||||
CREATE TABLE t3 SELECT CONVERT(c1 USING cp932) AS c1 FROM t2;
|
||||
SELECT HEX(c1) FROM t3;
|
||||
|
||||
#Test conversion to eucjpms
|
||||
CREATE TABLE t4 SELECT CONVERT(c1 USING eucjpms) AS c1 FROM t1;
|
||||
SELECT HEX(c1) FROM t4;
|
||||
|
||||
DROP TABLE t1;
|
||||
DROP TABLE t2;
|
||||
DROP TABLE t3;
|
||||
DROP TABLE t4;
|
||||
|
||||
# Test prepared statement with 0x8300 sequence in parameter while
|
||||
# running with cp932 client character set.
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1(f1 blob);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
|
||||
SET @var1= x'8300';
|
||||
# TODO: Note that this doesn't actually test the code which was added for
|
||||
# bug#11338 because this syntax for prepared statements causes the PS to
|
||||
# be replicated differently than if we executed the PS from C or Java.
|
||||
# Using this syntax, variable names are inserted into the binlog instead
|
||||
# of values. The real goal of this test is to check the code that was
|
||||
# added to Item_param::query_val_str() in order to do hex encoding of
|
||||
# PS parameters when the client character set is cp932;
|
||||
# Bug#11338 has an example java program which can be used to verify this
|
||||
# code (and I have used it to test the fix) until there is some way to
|
||||
# exercise this code from mysql-test-run.
|
||||
EXECUTE stmt1 USING @var1;
|
||||
SHOW BINLOG EVENTS FROM 102;
|
||||
SELECT HEX(f1) FROM t1;
|
||||
DROP table t1;
|
||||
# end test for bug#11338
|
||||
|
||||
SET collation_connection='cp932_japanese_ci';
|
||||
-- source include/ctype_filesort.inc
|
||||
SET collation_connection='cp932_bin';
|
||||
-- source include/ctype_filesort.inc
|
||||
|
||||
#
|
||||
# Bug#12547: Inserting long string into varchar causes table crash in cp932
|
||||
#
|
||||
create table t1 (col1 varchar(1)) character set cp932;
|
||||
insert into t1 values ('a');
|
||||
insert into t1 values ('ab');
|
||||
select * from t1;
|
||||
insert into t1 values ('abc');
|
||||
select * from t1;
|
||||
35
mysql-test/extra/binlog_tests/ctype_cp932_binlog.test
Normal file
35
mysql-test/extra/binlog_tests/ctype_cp932_binlog.test
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
-- source include/not_embedded.inc
|
||||
-- source include/have_cp932.inc
|
||||
|
||||
--character_set cp932
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
set names cp932;
|
||||
set character_set_database = cp932;
|
||||
|
||||
# Test prepared statement with 0x8300 sequence in parameter while
|
||||
# running with cp932 client character set.
|
||||
RESET MASTER;
|
||||
CREATE TABLE t1(f1 blob);
|
||||
PREPARE stmt1 FROM 'INSERT INTO t1 VALUES(?)';
|
||||
SET @var1= x'8300';
|
||||
# TODO: Note that this doesn't actually test the code which was added for
|
||||
# bug#11338 because this syntax for prepared statements causes the PS to
|
||||
# be replicated differently than if we executed the PS from C or Java.
|
||||
# Using this syntax, variable names are inserted into the binlog instead
|
||||
# of values. The real goal of this test is to check the code that was
|
||||
# added to Item_param::query_val_str() in order to do hex encoding of
|
||||
# PS parameters when the client character set is cp932;
|
||||
# Bug#11338 has an example java program which can be used to verify this
|
||||
# code (and I have used it to test the fix) until there is some way to
|
||||
# exercise this code from mysql-test-run.
|
||||
EXECUTE stmt1 USING @var1;
|
||||
--replace_column 2 # 5 #
|
||||
SHOW BINLOG EVENTS FROM 102;
|
||||
SELECT HEX(f1) FROM t1;
|
||||
DROP table t1;
|
||||
# end test for bug#11338
|
||||
|
||||
# End of 4.1 tests
|
||||
20
mysql-test/extra/binlog_tests/ctype_ucs_binlog.test
Normal file
20
mysql-test/extra/binlog_tests/ctype_ucs_binlog.test
Normal file
|
|
@ -0,0 +1,20 @@
|
|||
--source include/not_embedded.inc
|
||||
--source include/have_ucs2.inc
|
||||
|
||||
#
|
||||
# Check correct binlogging of UCS2 user variables (BUG#3875)
|
||||
#
|
||||
SET TIMESTAMP=10000;
|
||||
create table t2 (c char(30)) charset=ucs2;
|
||||
set @v=convert('abc' using ucs2);
|
||||
reset master;
|
||||
insert into t2 values (@v);
|
||||
show binlog events from 102;
|
||||
# more important than SHOW BINLOG EVENTS, mysqlbinlog (where we
|
||||
# absolutely need variables names to be quoted and strings to be
|
||||
# escaped).
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000001
|
||||
drop table t2;
|
||||
|
||||
# End of 4.1 tests
|
||||
31
mysql-test/extra/binlog_tests/drop_temp_table.test
Normal file
31
mysql-test/extra/binlog_tests/drop_temp_table.test
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Embedded server doesn't support binlog
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
--disable_warnings
|
||||
drop database if exists `drop-temp+table-test`;
|
||||
--enable_warnings
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
connection con1;
|
||||
reset master;
|
||||
create database `drop-temp+table-test`;
|
||||
use `drop-temp+table-test`;
|
||||
create temporary table shortn1 (a int);
|
||||
create temporary table `table:name` (a int);
|
||||
create temporary table shortn2 (a int);
|
||||
select get_lock("a",10);
|
||||
disconnect con1;
|
||||
|
||||
connection con2;
|
||||
# We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
||||
# guarantee that logging of the terminated con1 has been done yet.
|
||||
# To be sure that logging has been done, we use a user lock.
|
||||
select get_lock("a",10);
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events;
|
||||
drop database `drop-temp+table-test`;
|
||||
|
||||
# End of 4.1 tests
|
||||
47
mysql-test/extra/binlog_tests/innodb_stat.test
Normal file
47
mysql-test/extra/binlog_tests/innodb_stat.test
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
-- source include/have_innodb.inc
|
||||
|
||||
#
|
||||
# Let us test binlog_cache_use and binlog_cache_disk_use status vars.
|
||||
# Actually this test has nothing to do with innodb per se, it just requires
|
||||
# transactional table.
|
||||
#
|
||||
show status like "binlog_cache_use";
|
||||
show status like "binlog_cache_disk_use";
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
create table t1 (a int) engine=innodb;
|
||||
|
||||
# Now we are going to create transaction which is long enough so its
|
||||
# transaction binlog will be flushed to disk...
|
||||
let $1=2000;
|
||||
disable_query_log;
|
||||
begin;
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t1 values( $1 );
|
||||
dec $1;
|
||||
}
|
||||
commit;
|
||||
enable_query_log;
|
||||
show status like "binlog_cache_use";
|
||||
show status like "binlog_cache_disk_use";
|
||||
|
||||
# Transaction which should not be flushed to disk and so should not
|
||||
# increase binlog_cache_disk_use.
|
||||
begin;
|
||||
delete from t1;
|
||||
commit;
|
||||
show status like "binlog_cache_use";
|
||||
show status like "binlog_cache_disk_use";
|
||||
drop table t1;
|
||||
|
||||
# Test for testable InnoDB status variables. This test
|
||||
# uses previous ones(pages_created, rows_deleted, ...).
|
||||
show status like "Innodb_buffer_pool_pages_total";
|
||||
show status like "Innodb_page_size";
|
||||
show status like "Innodb_rows_deleted";
|
||||
show status like "Innodb_rows_inserted";
|
||||
show status like "Innodb_rows_updated";
|
||||
|
||||
35
mysql-test/extra/binlog_tests/insert_select-binlog.test
Normal file
35
mysql-test/extra/binlog_tests/insert_select-binlog.test
Normal file
|
|
@ -0,0 +1,35 @@
|
|||
# Embedded server doesn't support binlog
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
# Check if a partly-completed INSERT SELECT in a MyISAM table goes into the
|
||||
# binlog
|
||||
|
||||
create table t1(a int, unique(a));
|
||||
insert into t1 values(2);
|
||||
create table t2(a int);
|
||||
insert into t2 values(1),(2);
|
||||
reset master;
|
||||
--error 1062
|
||||
insert into t1 select * from t2;
|
||||
# The above should produce an error, but still be in the binlog;
|
||||
# verify the binlog :
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
show binlog events;
|
||||
select * from t1;
|
||||
drop table t1, t2;
|
||||
|
||||
# Verify that a partly-completed CREATE TABLE .. SELECT does not
|
||||
# get into the binlog (Bug #6682)
|
||||
create table t1(a int);
|
||||
insert into t1 values(1),(1);
|
||||
reset master;
|
||||
--error 1062
|
||||
create table t2(unique(a)) select a from t1;
|
||||
# The above should produce an error, *and* not appear in the binlog
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
show binlog events;
|
||||
drop table t1;
|
||||
|
||||
# End of 4.1 tests
|
||||
254
mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test
Normal file
254
mysql-test/extra/binlog_tests/mix_innodb_myisam_binlog.test
Normal file
|
|
@ -0,0 +1,254 @@
|
|||
# Check that binlog is ok when a transaction mixes updates to InnoDB and
|
||||
# MyISAM.
|
||||
# It would be nice to make this a replication test, but in 4.0 the
|
||||
# slave is always with --skip-innodb in the testsuite. I (Guilhem) however
|
||||
# did some tests manually on a slave; tables are replicated fine and
|
||||
# Exec_Master_Log_Pos advances as expected.
|
||||
|
||||
# Embedded server doesn't support binlogging
|
||||
-- source include/not_embedded.inc
|
||||
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/have_debug.inc
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1, t2;
|
||||
--enable_warnings
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
connect (con2,localhost,root,,);
|
||||
|
||||
connection con1;
|
||||
create table t1 (a int) engine=innodb;
|
||||
create table t2 (a int) engine=myisam;
|
||||
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(1);
|
||||
insert into t2 select * from t1;
|
||||
commit;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(2);
|
||||
insert into t2 select * from t1;
|
||||
# should say some changes to non-transact1onal tables couldn't be rolled back
|
||||
rollback;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(3);
|
||||
savepoint my_savepoint;
|
||||
insert into t1 values(4);
|
||||
insert into t2 select * from t1;
|
||||
rollback to savepoint my_savepoint;
|
||||
commit;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(5);
|
||||
savepoint my_savepoint;
|
||||
insert into t1 values(6);
|
||||
insert into t2 select * from t1;
|
||||
rollback to savepoint my_savepoint;
|
||||
insert into t1 values(7);
|
||||
commit;
|
||||
select a from t1 order by a; # check that savepoints work :)
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
# and when ROLLBACK is not explicit?
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
select get_lock("a",10);
|
||||
begin;
|
||||
insert into t1 values(8);
|
||||
insert into t2 select * from t1;
|
||||
disconnect con1;
|
||||
|
||||
connection con2;
|
||||
# We want to SHOW BINLOG EVENTS, to know what was logged. But there is no
|
||||
# guarantee that logging of the terminated con1 has been done yet (it may not
|
||||
# even be started, so con1 may have not even attempted to lock the binlog yet;
|
||||
# so SHOW BINLOG EVENTS may come before con1 does the loggin. To be sure that
|
||||
# logging has been done, we use a user lock.
|
||||
select get_lock("a",10);
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
# and when not in a transact1on?
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
insert into t1 values(9);
|
||||
insert into t2 select * from t1;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
# Check that when the query updat1ng the MyISAM table is the first in the
|
||||
# transaction, we log it immediately.
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
insert into t1 values(10); # first make t1 non-empty
|
||||
begin;
|
||||
insert into t2 select * from t1;
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
insert into t1 values(11);
|
||||
commit;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
|
||||
# Check that things work like before this BEGIN/ROLLBACK code was added,
|
||||
# when t2 is INNODB
|
||||
|
||||
alter table t2 engine=INNODB;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(12);
|
||||
insert into t2 select * from t1;
|
||||
commit;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(13);
|
||||
insert into t2 select * from t1;
|
||||
rollback;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(14);
|
||||
savepoint my_savepoint;
|
||||
insert into t1 values(15);
|
||||
insert into t2 select * from t1;
|
||||
rollback to savepoint my_savepoint;
|
||||
commit;
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
|
||||
begin;
|
||||
insert into t1 values(16);
|
||||
savepoint my_savepoint;
|
||||
insert into t1 values(17);
|
||||
insert into t2 select * from t1;
|
||||
rollback to savepoint my_savepoint;
|
||||
insert into t1 values(18);
|
||||
commit;
|
||||
select a from t1 order by a; # check that savepoints work :)
|
||||
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
|
||||
# Test for BUG#5714, where a MyISAM update in the transaction used to
|
||||
# release row-level locks in InnoDB
|
||||
|
||||
connect (con3,localhost,root,,);
|
||||
|
||||
connection con3;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
--disable_warnings
|
||||
alter table t2 type=MyISAM;
|
||||
--enable_warnings
|
||||
insert into t1 values (1);
|
||||
begin;
|
||||
select * from t1 for update;
|
||||
|
||||
connection con2;
|
||||
select (@before:=unix_timestamp())*0; # always give repeatable output
|
||||
begin;
|
||||
send select * from t1 for update;
|
||||
|
||||
connection con3;
|
||||
insert into t2 values (20);
|
||||
|
||||
connection con2;
|
||||
--error 1205
|
||||
reap;
|
||||
select (@after:=unix_timestamp())*0; # always give repeatable output
|
||||
# verify that innodb_lock_wait_timeout was exceeded. When there was
|
||||
# the bug, the reap would return immediately after the insert into t2.
|
||||
select (@after-@before) >= 2;
|
||||
|
||||
drop table t1,t2;
|
||||
commit;
|
||||
|
||||
# test for BUG#7947 - DO RELEASE_LOCK() not written to binlog on rollback in the middle
|
||||
# of a transaction
|
||||
|
||||
connection con2;
|
||||
begin;
|
||||
create temporary table ti (a int) engine=innodb;
|
||||
rollback;
|
||||
insert into ti values(1);
|
||||
set autocommit=0;
|
||||
create temporary table t1 (a int) engine=myisam;
|
||||
commit;
|
||||
insert t1 values (1);
|
||||
rollback;
|
||||
create table t0 (n int);
|
||||
insert t0 select * from t1;
|
||||
set autocommit=1;
|
||||
insert into t0 select GET_LOCK("lock1",null);
|
||||
set autocommit=0;
|
||||
create table t2 (n int) engine=innodb;
|
||||
insert into t2 values (3);
|
||||
disconnect con2;
|
||||
connection con3;
|
||||
select get_lock("lock1",60);
|
||||
--replace_column 5 #
|
||||
show binlog events from 102;
|
||||
do release_lock("lock1");
|
||||
drop table t0,t2;
|
||||
|
||||
|
||||
# End of 4.1 tests
|
||||
47
mysql-test/extra/rpl_tests/rpl000006.test
Normal file
47
mysql-test/extra/rpl_tests/rpl000006.test
Normal file
|
|
@ -0,0 +1,47 @@
|
|||
#
|
||||
# Test forced timestamp
|
||||
#
|
||||
-- source include/master-slave.inc
|
||||
|
||||
# Don't log table creating to the slave as we want to test LOAD TABLE
|
||||
set SQL_LOG_BIN=0,timestamp=200006;
|
||||
create table t1(t timestamp not null,a char(1));
|
||||
insert into t1 ( a) values ('F');
|
||||
select unix_timestamp(t) from t1;
|
||||
connection slave;
|
||||
load table t1 from master;
|
||||
select unix_timestamp(t) from t1;
|
||||
|
||||
# Delete the created table on master and slave
|
||||
connection master;
|
||||
set SQL_LOG_BIN=1,timestamp=default;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
connection master;
|
||||
|
||||
#
|
||||
# Test copying table with checksum
|
||||
#
|
||||
|
||||
# Don't log table creating to the slave as we want to test LOAD TABLE
|
||||
set SQL_LOG_BIN=0;
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a int not null
|
||||
) ENGINE=$engine_type MAX_ROWS=4000 CHECKSUM=1;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
load table t1 from master;
|
||||
check table t1;
|
||||
drop table t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
103
mysql-test/extra/rpl_tests/rpl_auto_increment.test
Normal file
103
mysql-test/extra/rpl_tests/rpl_auto_increment.test
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
#
|
||||
# Test of auto_increment with offset
|
||||
#
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval create table t1 (a int not null auto_increment,b int, primary key (a)) engine=$engine_type2 auto_increment=3;
|
||||
insert into t1 values (NULL,1),(NULL,2),(NULL,3);
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
eval create table t1 (a int not null auto_increment,b int, primary key (a)) engine=$engine_type2;
|
||||
insert into t1 values (1,1),(NULL,2),(3,3),(NULL,4);
|
||||
delete from t1 where b=4;
|
||||
insert into t1 values (NULL,5),(NULL,6);
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
|
||||
drop table t1;
|
||||
|
||||
set @@session.auto_increment_increment=100, @@session.auto_increment_offset=10;
|
||||
show variables like "%auto_inc%";
|
||||
|
||||
eval create table t1 (a int not null auto_increment, primary key (a)) engine=$engine_type2;
|
||||
# Insert with 2 insert statements to get better testing of logging
|
||||
insert into t1 values (NULL),(5),(NULL);
|
||||
insert into t1 values (250),(NULL);
|
||||
select * from t1;
|
||||
insert into t1 values (1000);
|
||||
set @@insert_id=400;
|
||||
insert into t1 values(NULL),(NULL);
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Same test with innodb (as the innodb code is a bit different)
|
||||
#
|
||||
eval create table t1 (a int not null auto_increment, primary key (a)) engine=$engine_type;
|
||||
# Insert with 2 insert statements to get better testing of logging
|
||||
insert into t1 values (NULL),(5),(NULL);
|
||||
insert into t1 values (250),(NULL);
|
||||
select * from t1;
|
||||
insert into t1 values (1000);
|
||||
set @@insert_id=400;
|
||||
insert into t1 values(NULL),(NULL);
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
set @@session.auto_increment_increment=1, @@session.auto_increment_offset=1;
|
||||
eval create table t1 (a int not null auto_increment, primary key (a)) engine=$engine_type2;
|
||||
# Insert with 2 insert statements to get better testing of logging
|
||||
insert into t1 values (NULL),(5),(NULL),(NULL);
|
||||
insert into t1 values (500),(NULL),(502),(NULL),(NULL);
|
||||
select * from t1;
|
||||
set @@insert_id=600;
|
||||
--error 1062
|
||||
insert into t1 values(600),(NULL),(NULL);
|
||||
set @@insert_id=600;
|
||||
insert ignore into t1 values(600),(NULL),(NULL),(610),(NULL);
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
#
|
||||
# Test that auto-increment works when slave has rows in the table
|
||||
#
|
||||
set @@session.auto_increment_increment=10, @@session.auto_increment_offset=1;
|
||||
|
||||
eval create table t1 (a int not null auto_increment, primary key (a)) engine=$engine_type2;
|
||||
|
||||
sync_slave_with_master;
|
||||
insert into t1 values(2),(12),(22),(32),(42);
|
||||
connection master;
|
||||
|
||||
insert into t1 values (NULL),(NULL);
|
||||
insert into t1 values (3),(NULL),(NULL);
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
|
||||
drop table t1;
|
||||
|
||||
# End cleanup
|
||||
sync_slave_with_master;
|
||||
22
mysql-test/extra/rpl_tests/rpl_commit_after_flush.test
Normal file
22
mysql-test/extra/rpl_tests/rpl_commit_after_flush.test
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
#################################
|
||||
# Test updated to use a wrapper #
|
||||
#################################
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval CREATE TABLE t1 (a INT) ENGINE=$engine_type;
|
||||
|
||||
begin;
|
||||
insert into t1 values(1);
|
||||
flush tables with read lock;
|
||||
commit;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
# cleanup
|
||||
connection master;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
510
mysql-test/extra/rpl_tests/rpl_ddl.test
Normal file
510
mysql-test/extra/rpl_tests/rpl_ddl.test
Normal file
|
|
@ -0,0 +1,510 @@
|
|||
######################## rpl_ddl.test ########################
|
||||
# #
|
||||
# DDL statements (sometimes with implicit COMMIT) executed #
|
||||
# by the master and it's propagation into the slave #
|
||||
# #
|
||||
##############################################################
|
||||
|
||||
#
|
||||
# NOTE, PLEASE BE CAREFUL, WHEN MODIFYING THE TESTS !!
|
||||
#
|
||||
# 1. !All! objects to be dropped, renamed, altered ... must be created
|
||||
# in AUTOCOMMIT= 1 mode before AUTOCOMMIT is set to 0 and the test
|
||||
# sequences start.
|
||||
#
|
||||
# 2. Never use a test object, which was direct or indirect affected by a
|
||||
# preceeding test sequence again.
|
||||
# Except table d1.t1 where ONLY DML is allowed.
|
||||
#
|
||||
# If one preceeding test sequence hits a (sometimes not good visible,
|
||||
# because the sql error code of the statement might be 0) bug
|
||||
# and these rules are ignored, a following test sequence might earn ugly
|
||||
# effects like failing 'sync_slave_with_master', crashes of the slave or
|
||||
# abort of the test case etc..
|
||||
#
|
||||
# 3. The assignment of the DDL command to be tested to $my_stmt can
|
||||
# be a bit difficult. "'" must be avoided, because the test
|
||||
# routine "include/rpl_stmt_seq.inc" performs a
|
||||
# eval SELECT CONCAT('######## ','$my_stmt',' ########') as "";
|
||||
#
|
||||
|
||||
###############################################################
|
||||
# Some preparations
|
||||
###############################################################
|
||||
# The sync_slave_with_master is needed to make the xids deterministic.
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
|
||||
SET AUTOCOMMIT = 1;
|
||||
#
|
||||
# 1. DROP all objects, which probably already exist, but must be created here
|
||||
#
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS mysqltest1;
|
||||
DROP DATABASE IF EXISTS mysqltest2;
|
||||
DROP DATABASE IF EXISTS mysqltest3;
|
||||
--enable_warnings
|
||||
#
|
||||
# 2. CREATE all objects needed
|
||||
# working database is mysqltest1
|
||||
# working (transactional!) is mysqltest1.t1
|
||||
#
|
||||
CREATE DATABASE mysqltest1;
|
||||
CREATE DATABASE mysqltest2;
|
||||
eval CREATE TABLE mysqltest1.t1 (f1 BIGINT) ENGINE=$engine_type;
|
||||
INSERT INTO mysqltest1.t1 SET f1= 0;
|
||||
eval CREATE TABLE mysqltest1.t2 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t3 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t4 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t5 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t6 (f1 BIGINT) ENGINE=$engine_type;
|
||||
CREATE INDEX my_idx6 ON mysqltest1.t6(f1);
|
||||
eval CREATE TABLE mysqltest1.t7 (f1 BIGINT) ENGINE=$engine_type;
|
||||
INSERT INTO mysqltest1.t7 SET f1= 0;
|
||||
eval CREATE TABLE mysqltest1.t8 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t9 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t10 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t11 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t12 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t13 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t14 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t15 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t16 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t17 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t18 (f1 BIGINT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE mysqltest1.t19 (f1 BIGINT) ENGINE=$engine_type;
|
||||
CREATE TEMPORARY TABLE mysqltest1.t23 (f1 BIGINT);
|
||||
|
||||
#
|
||||
# 3. master sessions: never do AUTOCOMMIT
|
||||
# slave sessions: never do AUTOCOMMIT
|
||||
#
|
||||
SET AUTOCOMMIT = 0;
|
||||
use mysqltest1;
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SET AUTOCOMMIT = 0;
|
||||
use mysqltest1;
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
|
||||
# We don't want to abort the whole test if one statement sent
|
||||
# to the server gets an error, because the following test
|
||||
# sequences are nearly independend of the previous statements.
|
||||
--disable_abort_on_error
|
||||
|
||||
###############################################################
|
||||
# Banal case: (explicit) COMMIT and ROLLBACK
|
||||
# Just for checking if the test sequence is usable
|
||||
###############################################################
|
||||
|
||||
let $my_stmt= COMMIT;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
let $my_stmt= ROLLBACK;
|
||||
let $my_master_commit= false;
|
||||
let $my_slave_commit= false;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
###############################################################
|
||||
# Cases with commands very similar to COMMIT
|
||||
###############################################################
|
||||
|
||||
let $my_stmt= SET AUTOCOMMIT=1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SET AUTOCOMMIT=0;
|
||||
|
||||
let $my_stmt= START TRANSACTION;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
let $my_stmt= BEGIN;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
###############################################################
|
||||
# Cases with (BASE) TABLES and (UPDATABLE) VIEWs
|
||||
###############################################################
|
||||
|
||||
let $my_stmt= DROP TABLE mysqltest1.t2;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW TABLES LIKE 't2';
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW TABLES LIKE 't2';
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
# Note: Since this test is executed with a skip-innodb slave, the
|
||||
# slave incorrectly commits the insert. One can *not* have InnoDB on
|
||||
# master and MyISAM on slave and expect that a transactional rollback
|
||||
# after a CREATE TEMPORARY TABLE should work correctly on the slave.
|
||||
# For this to work properly the handler on the slave must be able to
|
||||
# handle transactions (e.g. InnoDB or NDB).
|
||||
let $my_stmt= DROP TEMPORARY TABLE mysqltest1.t23;
|
||||
let $my_master_commit= false;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW TABLES LIKE 't23';
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW TABLES LIKE 't23';
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
let $my_stmt= RENAME TABLE mysqltest1.t3 to mysqltest1.t20;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW TABLES LIKE 't20';
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW TABLES LIKE 't20';
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
let $my_stmt= ALTER TABLE mysqltest1.t4 ADD column f2 BIGINT;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
describe mysqltest1.t4;
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
describe mysqltest1.t4;
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
let $my_stmt= CREATE TABLE mysqltest1.t21 (f1 BIGINT) ENGINE=;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq2.inc
|
||||
|
||||
# Note: Since this test is executed with a skip-innodb slave, the
|
||||
# slave incorrectly commits the insert. One can *not* have InnoDB on
|
||||
# master and MyISAM on slave and expect that a transactional rollback
|
||||
# after a CREATE TEMPORARY TABLE should work correctly on the slave.
|
||||
# For this to work properly the handler on the slave must be able to
|
||||
# handle transactions (e.g. InnoDB or NDB).
|
||||
let $engine='';
|
||||
let $eng_type='';
|
||||
|
||||
let $my_stmt= CREATE TEMPORARY TABLE mysqltest1.t22 (f1 BIGINT);
|
||||
let $my_master_commit= false;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
let $my_stmt= TRUNCATE TABLE mysqltest1.t7;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SELECT * FROM mysqltest1.t7;
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SELECT * FROM mysqltest1.t7;
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
###############################################################
|
||||
# Cases with LOCK/UNLOCK
|
||||
###############################################################
|
||||
|
||||
# MySQL insists in locking mysqltest1.t1, because rpl_stmt_seq performs an
|
||||
# INSERT into this table.
|
||||
let $my_stmt= LOCK TABLES mysqltest1.t1 WRITE, mysqltest1.t8 READ;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
UNLOCK TABLES;
|
||||
|
||||
# No prior locking
|
||||
let $my_stmt= UNLOCK TABLES;
|
||||
let $my_master_commit= false;
|
||||
let $my_slave_commit= false;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
# With prior read locking
|
||||
# Note that this test generate an error since the rpl_stmt_seq.inc
|
||||
# tries to insert into t1.
|
||||
LOCK TABLES mysqltest1.t1 READ;
|
||||
let $my_stmt= UNLOCK TABLES;
|
||||
let $my_master_commit= false;
|
||||
let $my_slave_commit= false;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
# With prior write locking
|
||||
LOCK TABLES mysqltest1.t1 WRITE, mysqltest1.t8 READ;
|
||||
let $my_stmt= UNLOCK TABLES;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
|
||||
###############################################################
|
||||
# Cases with INDEXES
|
||||
###############################################################
|
||||
|
||||
let $my_stmt= DROP INDEX my_idx6 ON mysqltest1.t6;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW INDEX FROM mysqltest1.t6;
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW INDEX FROM mysqltest1.t6;
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
let $my_stmt= CREATE INDEX my_idx5 ON mysqltest1.t5(f1);
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW INDEX FROM mysqltest1.t5;
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW INDEX FROM mysqltest1.t5;
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
###############################################################
|
||||
# Cases with DATABASE
|
||||
###############################################################
|
||||
|
||||
let $my_stmt= DROP DATABASE mysqltest2;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW DATABASES LIKE "mysqltest2";
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW DATABASES LIKE "mysqltest2";
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
let $my_stmt= CREATE DATABASE mysqltest3;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW DATABASES LIKE "mysqltest3";
|
||||
connection slave;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave --------' as "";
|
||||
--enable_query_log
|
||||
SHOW DATABASES LIKE "mysqltest3";
|
||||
connection master;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to master -------' as "";
|
||||
--enable_query_log
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
###############################################################
|
||||
# Cases with stored procedures
|
||||
###############################################################
|
||||
let $my_stmt= CREATE PROCEDURE p1() READS SQL DATA SELECT "this is p1";
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
--vertical_results
|
||||
--replace_column 5 # 6 #
|
||||
SHOW PROCEDURE STATUS LIKE 'p1';
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
--replace_column 5 # 6 #
|
||||
SHOW PROCEDURE STATUS LIKE 'p1';
|
||||
connection master;
|
||||
--horizontal_results
|
||||
|
||||
let $my_stmt= ALTER PROCEDURE p1 COMMENT "I have been altered";
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
--vertical_results
|
||||
--replace_column 5 # 6 #
|
||||
SHOW PROCEDURE STATUS LIKE 'p1';
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
--replace_column 5 # 6 #
|
||||
SHOW PROCEDURE STATUS LIKE 'p1';
|
||||
connection master;
|
||||
--horizontal_results
|
||||
|
||||
let $my_stmt= DROP PROCEDURE p1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
--vertical_results
|
||||
SHOW PROCEDURE STATUS LIKE 'p1';
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SHOW PROCEDURE STATUS LIKE 'p1';
|
||||
connection master;
|
||||
--horizontal_results
|
||||
|
||||
###############################################################
|
||||
# Cases with VIEWs
|
||||
###############################################################
|
||||
let $my_stmt= CREATE OR REPLACE VIEW v1 as select * from t1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW CREATE VIEW v1;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SHOW CREATE VIEW v1;
|
||||
connection master;
|
||||
|
||||
let $my_stmt= ALTER VIEW v1 AS select f1 from t1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW CREATE VIEW v1;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SHOW CREATE VIEW v1;
|
||||
connection master;
|
||||
|
||||
let $my_stmt= DROP VIEW IF EXISTS v1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
--error 1146
|
||||
SHOW CREATE VIEW v1;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
--error 1146
|
||||
SHOW CREATE VIEW v1;
|
||||
connection master;
|
||||
|
||||
###############################################################
|
||||
# Cases with TRIGGERs
|
||||
###############################################################
|
||||
let $my_stmt= CREATE TRIGGER trg1 BEFORE INSERT ON t1 FOR EACH ROW SET @a:=1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW TRIGGERS;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SHOW TRIGGERS;
|
||||
connection master;
|
||||
|
||||
let $my_stmt= DROP TRIGGER trg1;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SHOW TRIGGERS;
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SHOW TRIGGERS;
|
||||
connection master;
|
||||
|
||||
###############################################################
|
||||
# Cases with USERs
|
||||
###############################################################
|
||||
let $my_stmt= CREATE USER user1@localhost;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SELECT user FROM mysql.user WHERE user = 'user1';
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SELECT user FROM mysql.user WHERE user = 'user1';
|
||||
connection master;
|
||||
|
||||
let $my_stmt= RENAME USER user1@localhost TO rename1@localhost;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SELECT user FROM mysql.user WHERE user = 'rename1';
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SELECT user FROM mysql.user WHERE user = 'rename1';
|
||||
connection master;
|
||||
|
||||
let $my_stmt= DROP USER rename1@localhost;
|
||||
let $my_master_commit= true;
|
||||
let $my_slave_commit= true;
|
||||
--source include/rpl_stmt_seq.inc
|
||||
SELECT user FROM mysql.user WHERE user = 'rename1';
|
||||
--disable_query_log
|
||||
SELECT '-------- switch to slave -------' as "";
|
||||
--enable_query_log
|
||||
connection slave;
|
||||
SELECT user FROM mysql.user WHERE user = 'rename1';
|
||||
connection master;
|
||||
|
||||
###############################################################
|
||||
# Cleanup
|
||||
###############################################################
|
||||
--disable_warnings
|
||||
DROP DATABASE IF EXISTS mysqltest1;
|
||||
DROP DATABASE IF EXISTS mysqltest2;
|
||||
DROP DATABASE IF EXISTS mysqltest3;
|
||||
--enable_warnings
|
||||
|
||||
|
||||
112
mysql-test/extra/rpl_tests/rpl_deadlock.test
Normal file
112
mysql-test/extra/rpl_tests/rpl_deadlock.test
Normal file
|
|
@ -0,0 +1,112 @@
|
|||
# See if slave restarts the transaction after failing on an InnoDB deadlock error.
|
||||
|
||||
# Note: testing what happens when too many retries is possible, but
|
||||
# needs large waits when running with --debug, so we don't do it.
|
||||
# The same way, this test may not test what is expected when run
|
||||
# under Valgrind, timings are too short then (with --valgrind I
|
||||
# (Guilhem) have seen the test manage to provoke lock wait timeout
|
||||
# error but not deadlock error; that is ok as code deals with the two
|
||||
# errors in exactly the same way.
|
||||
# We don't 'show status like 'slave_retried_transactions'' because this
|
||||
# is not repeatable (depends on sleeps).
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection master;
|
||||
eval CREATE TABLE t1 (a INT NOT NULL, KEY(a)) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t2 (a INT NOT NULL, KEY(a)) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t3 (a INT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t4 (a INT) ENGINE=$engine_type;
|
||||
show variables like 'slave_transaction_retries';
|
||||
sync_slave_with_master;
|
||||
|
||||
show create table t1;
|
||||
show create table t2;
|
||||
show variables like 'slave_transaction_retries';
|
||||
stop slave;
|
||||
|
||||
# 1) Test deadlock
|
||||
|
||||
connection master;
|
||||
begin;
|
||||
# Let's keep BEGIN and the locked statement in two different relay logs.
|
||||
let $1=200;
|
||||
disable_query_log;
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t3 values( $1 );
|
||||
dec $1;
|
||||
}
|
||||
enable_query_log;
|
||||
insert into t3 select * from t2 for update;
|
||||
insert into t1 values(1);
|
||||
commit;
|
||||
save_master_pos;
|
||||
|
||||
connection slave;
|
||||
begin;
|
||||
# Let's make our transaction large so that it's slave who is chosen as
|
||||
# victim
|
||||
let $1=1000;
|
||||
disable_query_log;
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t4 values( $1 );
|
||||
dec $1;
|
||||
}
|
||||
enable_query_log;
|
||||
select * from t1 for update;
|
||||
start slave;
|
||||
--real_sleep 3 # hope that slave is blocked now
|
||||
insert into t2 values(22); # provoke deadlock, slave should be victim
|
||||
commit;
|
||||
sync_with_master;
|
||||
select * from t1; # check that slave succeeded finally
|
||||
select * from t2;
|
||||
# check that no error is reported
|
||||
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 #
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
show slave status;
|
||||
|
||||
# 2) Test lock wait timeout
|
||||
|
||||
stop slave;
|
||||
change master to master_log_pos=536; # the BEGIN log event
|
||||
begin;
|
||||
select * from t2 for update; # hold lock
|
||||
start slave;
|
||||
--real_sleep 10 # slave should have blocked, and be retrying
|
||||
commit;
|
||||
sync_with_master;
|
||||
select * from t1; # check that slave succeeded finally
|
||||
select * from t2;
|
||||
# check that no error is reported
|
||||
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 #
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
show slave status;
|
||||
|
||||
# Now we repeat 2), but with BEGIN in the same relay log as
|
||||
# COMMIT (to see if seeking into hot log is ok).
|
||||
|
||||
set global max_relay_log_size=0;
|
||||
|
||||
# This is really copy-paste of 2) of above
|
||||
stop slave;
|
||||
change master to master_log_pos=536;
|
||||
begin;
|
||||
select * from t2 for update;
|
||||
start slave;
|
||||
--real_sleep 10
|
||||
commit;
|
||||
sync_with_master;
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
--replace_column 1 # 7 # 8 # 9 # 11 # 16 # 22 # 23 # 33 #
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
show slave status;
|
||||
|
||||
connection master;
|
||||
drop table t1,t2,t3,t4;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
19
mysql-test/extra/rpl_tests/rpl_delete_no_where.test
Normal file
19
mysql-test/extra/rpl_tests/rpl_delete_no_where.test
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
# Test to see if a DELETE which triggers a fast deletion of all rows
|
||||
# (not internally row-per-row but more like a TRUNCATE, MyISAM
|
||||
# supports that), is replicated (BUG#13576).
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval create table t1 (a int, b int) engine=$engine_type;
|
||||
insert into t1 values(1,1);
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
delete from t1;
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
|
||||
# cleanup
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
62
mysql-test/extra/rpl_tests/rpl_err_ignoredtable.test
Normal file
62
mysql-test/extra/rpl_tests/rpl_err_ignoredtable.test
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
# Test for
|
||||
# Bug #797: If a query is ignored on slave (replicate-ignore-table) the slave
|
||||
# still checks that it has the same error as on the master.
|
||||
|
||||
# Requires statement logging
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection master;
|
||||
create table t1 (a int primary key);
|
||||
# generate an error that goes to the binlog
|
||||
--error 1062
|
||||
insert into t1 values (1),(1);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# as the t1 table is ignored on the slave, the slave should be able to sync
|
||||
sync_with_master;
|
||||
# The port number is different when doing the release build with
|
||||
# Do-compile, hence we have to replace the port number here accordingly
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
# check that the table has been ignored, because otherwise the test is nonsense
|
||||
show tables like 't1';
|
||||
connection master;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# Now test that even critical errors (connection killed)
|
||||
# are ignored if rules allow it.
|
||||
# The "kill" idea was copied from rpl000001.test.
|
||||
|
||||
connection master1;
|
||||
select get_lock('crash_lock%20C', 10);
|
||||
|
||||
connection master;
|
||||
create table t2 (a int primary key);
|
||||
insert into t2 values(1);
|
||||
create table t3 (id int);
|
||||
insert into t3 values(connection_id());
|
||||
send update t2 set a = a + 1 + get_lock('crash_lock%20C', 10);
|
||||
|
||||
connection master1;
|
||||
real_sleep 2;
|
||||
select (@id := id) - id from t3;
|
||||
kill @id;
|
||||
drop table t2,t3;
|
||||
connection master;
|
||||
--error 0,1053,2013
|
||||
reap;
|
||||
connection master1;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# SQL slave thread should not have stopped (because table of the killed
|
||||
# query is in the ignore list).
|
||||
sync_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
# Adding comment for force manual merge 5.0 -> wl1012. delete me if needed
|
||||
19
mysql-test/extra/rpl_tests/rpl_failed_optimize.test
Normal file
19
mysql-test/extra/rpl_tests/rpl_failed_optimize.test
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
-- source include/master-slave.inc
|
||||
|
||||
#
|
||||
# BUG#5551 "Failed OPTIMIZE TABLE is logged to binary log"
|
||||
# Replication should work when OPTIMIZE TABLE timeouts, and
|
||||
# when OPTIMIZE TABLE is executed on a non-existing table
|
||||
#
|
||||
|
||||
eval CREATE TABLE t1 ( a int ) ENGINE=$engine_type;
|
||||
BEGIN;
|
||||
INSERT INTO t1 VALUES (1);
|
||||
|
||||
connection master1;
|
||||
OPTIMIZE TABLE t1;
|
||||
|
||||
OPTIMIZE TABLE non_existing;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
50
mysql-test/extra/rpl_tests/rpl_flsh_tbls.test
Normal file
50
mysql-test/extra/rpl_tests/rpl_flsh_tbls.test
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
# depends on the binlog output
|
||||
# Test of replicating FLUSH TABLES to make
|
||||
# RENAME TABLE work with MERGE tables on the slave.
|
||||
# Test of FLUSH NO_WRITE_TO_BINLOG by the way.
|
||||
#
|
||||
-- source include/master-slave.inc
|
||||
|
||||
create table t1 (a int);
|
||||
insert into t1 values (10);
|
||||
create table t2 (a int);
|
||||
create table t3 (a int) engine=merge union(t1);
|
||||
create table t4 (a int);
|
||||
# We force the slave to open t3 (because we want to try confusing him) with this :
|
||||
insert into t4 select * from t3;
|
||||
rename table t1 to t5, t2 to t1;
|
||||
# RENAME may have confused the master (this is a known bug): so FLUSH tables,
|
||||
# first don't write it to the binlog, to test the NO_WRITE_TO_BINLOG keyword.
|
||||
flush no_write_to_binlog tables;
|
||||
# Check that it's not in the binlog.
|
||||
--replace_result $SERVER_VERSION SERVER_VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS FROM $rename_event_pos ;
|
||||
# Check that the master is not confused.
|
||||
select * from t3;
|
||||
# This FLUSH should go into the binlog to not confuse the slave.
|
||||
flush tables;
|
||||
# Check that it's in the binlog.
|
||||
--replace_result $SERVER_VERSION SERVER_VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS FROM $rename_event_pos ;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
# Check that the slave is not confused.
|
||||
select * from t3;
|
||||
# Note that all this confusion may cause warnings 'table xx is open on rename'
|
||||
# in the .err files; these are not fatal and are not reported by mysql-test-run.
|
||||
|
||||
stop slave;
|
||||
connection master;
|
||||
drop table t1;
|
||||
connection slave;
|
||||
flush tables with read lock;
|
||||
start slave;
|
||||
sleep 1;
|
||||
--error 1192
|
||||
stop slave;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
32
mysql-test/extra/rpl_tests/rpl_foreign_key.test
Normal file
32
mysql-test/extra/rpl_tests/rpl_foreign_key.test
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
# Check the replication of the FOREIGN_KEY_CHECKS variable.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval CREATE TABLE t1 (a INT AUTO_INCREMENT KEY) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t2 (b INT AUTO_INCREMENT KEY, c INT, FOREIGN KEY(b) REFERENCES t1(a)) ENGINE=$engine_type;
|
||||
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
INSERT INTO t1 VALUES (10);
|
||||
INSERT INTO t1 VALUES (NULL),(NULL),(NULL);
|
||||
INSERT INTO t2 VALUES (5,0);
|
||||
INSERT INTO t2 VALUES (NULL,LAST_INSERT_ID());
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
connection master;
|
||||
SET TIMESTAMP=1000000000;
|
||||
CREATE TABLE t3 ( a INT UNIQUE );
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
--error 1062
|
||||
INSERT INTO t3 VALUES (1),(1);
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP TABLE IF EXISTS t1,t2,t3;
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
|
||||
78
mysql-test/extra/rpl_tests/rpl_insert_id.test
Normal file
78
mysql-test/extra/rpl_tests/rpl_insert_id.test
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
# See if queries that use both auto_increment and LAST_INSERT_ID()
|
||||
# are replicated well
|
||||
|
||||
# We also check how the foreign_key_check variable is replicated
|
||||
|
||||
-- source include/master-slave.inc
|
||||
#should work for both SBR and RBR
|
||||
|
||||
connection master;
|
||||
create table t1(a int auto_increment, key(a));
|
||||
create table t2(b int auto_increment, c int, key(b));
|
||||
insert into t1 values (1),(2),(3);
|
||||
insert into t1 values (null);
|
||||
insert into t2 values (null,last_insert_id());
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
connection master;
|
||||
#check if multi-line inserts,
|
||||
#which set last_insert_id to the first id inserted,
|
||||
#are replicated the same way
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
--disable_warnings
|
||||
eval create table t1(a int auto_increment, key(a)) engine=$engine_type;
|
||||
eval create table t2(b int auto_increment, c int, key(b), foreign key(b) references t1(a)) engine=$engine_type;
|
||||
--enable_warnings
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
insert into t1 values (10);
|
||||
insert into t1 values (null),(null),(null);
|
||||
insert into t2 values (5,0);
|
||||
insert into t2 values (null,last_insert_id());
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
connection master;
|
||||
|
||||
# check if INSERT SELECT in auto_increment is well replicated (bug #490)
|
||||
|
||||
drop table t2;
|
||||
drop table t1;
|
||||
create table t1(a int auto_increment, key(a));
|
||||
create table t2(b int auto_increment, c int, key(b));
|
||||
insert into t1 values (10);
|
||||
insert into t1 values (null),(null),(null);
|
||||
insert into t2 values (5,0);
|
||||
insert into t2 (c) select * from t1;
|
||||
select * from t2;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
connection master;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
#
|
||||
# Bug#8412: Error codes reported in binary log for CHARACTER SET,
|
||||
# FOREIGN_KEY_CHECKS
|
||||
#
|
||||
connection master;
|
||||
SET TIMESTAMP=1000000000;
|
||||
CREATE TABLE t1 ( a INT UNIQUE );
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
--error 1062
|
||||
INSERT INTO t1 VALUES (1),(1);
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
71
mysql-test/extra/rpl_tests/rpl_insert_ignore.test
Normal file
71
mysql-test/extra/rpl_tests/rpl_insert_ignore.test
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# Testcase for BUG#6287 "Slave skips auto_increment values in Replication with InnoDB"
|
||||
# The bug was that if on master, INSERT IGNORE ignored some
|
||||
# rows, and the table was InnoDB with auto_inc column, then on slave
|
||||
# some rows received an auto_inc bigger than on master.
|
||||
# Slave needs to be started with --innodb to store table in InnoDB.
|
||||
# Same test for MyISAM (which had no bug).
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned,
|
||||
unique (b)
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
a int unsigned, # to force INSERT SELECT to have a certain order
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, 1);
|
||||
INSERT INTO t1 VALUES (NULL, 2);
|
||||
INSERT INTO t1 VALUES (NULL, 3);
|
||||
INSERT INTO t1 VALUES (NULL, 4);
|
||||
|
||||
# An alternation of values which will conflict in t1 and will not.
|
||||
|
||||
INSERT INTO t2 VALUES (1, 1);
|
||||
INSERT INTO t2 VALUES (2, 2);
|
||||
INSERT INTO t2 VALUES (3, 5);
|
||||
INSERT INTO t2 VALUES (4, 3);
|
||||
INSERT INTO t2 VALUES (5, 4);
|
||||
INSERT INTO t2 VALUES (6, 6);
|
||||
|
||||
INSERT IGNORE INTO t1 SELECT NULL, t2.b FROM t2 ORDER BY t2.a;
|
||||
|
||||
# Compare results
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
# Now do the same for MyISAM
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned,
|
||||
unique (b)
|
||||
) ENGINE=$engine_type2;
|
||||
|
||||
INSERT INTO t1 VALUES (1, 1);
|
||||
INSERT INTO t1 VALUES (2, 2);
|
||||
INSERT INTO t1 VALUES (3, 3);
|
||||
INSERT INTO t1 VALUES (4, 4);
|
||||
|
||||
INSERT IGNORE INTO t1 SELECT NULL, t2.b FROM t2 ORDER BY t2.a;
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
drop table t1, t2;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
156
mysql-test/extra/rpl_tests/rpl_loaddata.test
Normal file
156
mysql-test/extra/rpl_tests/rpl_loaddata.test
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
# Requires statement logging
|
||||
-- source include/have_binlog_format_statement.inc
|
||||
|
||||
# See if replication of a "LOAD DATA in an autoincrement column"
|
||||
# Honours autoincrement values
|
||||
# i.e. if the master and slave have the same sequence
|
||||
#
|
||||
# check replication of load data for temporary tables with additional
|
||||
# parameters
|
||||
#
|
||||
# check if duplicate entries trigger an error (they should unless IGNORE or
|
||||
# REPLACE was used on the master) (bug 571).
|
||||
#
|
||||
# check if START SLAVE, RESET SLAVE, CHANGE MASTER reset Last_slave_error and
|
||||
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986)
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection slave;
|
||||
reset master;
|
||||
connection master;
|
||||
|
||||
create table t1(a int not null auto_increment, b int, primary key(a) );
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
|
||||
create temporary table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60));
|
||||
load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by '\n##\n' starting by '>' ignore 1 lines;
|
||||
|
||||
create table t3 (day date,id int(9),category enum('a','b','c'),name varchar(60));
|
||||
insert into t3 select * from t2;
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
select * from t1;
|
||||
select * from t3;
|
||||
# We want to be sure that LOAD DATA is in the slave's binlog.
|
||||
# But we can't simply read this binlog, because as the slave has not been
|
||||
# restarted for this test, the file_id is uncertain (would cause test
|
||||
# failures). So instead, we test if the binlog looks long enough to
|
||||
# contain LOAD DATA. Since 5.0.3 we assume that binlog of 1292 is ok.
|
||||
# If LOAD DATA was not logged, the binlog would be shorter.
|
||||
show master status;
|
||||
|
||||
connection master;
|
||||
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
drop table t3;
|
||||
create table t1(a int, b int, unique(b));
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# See if slave stops when there's a duplicate entry for key error in LOAD DATA
|
||||
|
||||
insert into t1 values(1,10);
|
||||
|
||||
connection master;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# The SQL slave thread should be stopped now.
|
||||
wait_for_slave_to_stop;
|
||||
|
||||
# Skip the bad event and see if error is cleared in SHOW SLAVE STATUS by START
|
||||
# SLAVE, even though we are not executing any event (as sql_slave_skip_counter
|
||||
# takes us directly to the end of the relay log).
|
||||
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
# Trigger error again to test CHANGE MASTER
|
||||
|
||||
connection master;
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# The SQL slave thread should be stopped now.
|
||||
# Exec_Master_Log_Pos should point to the start of Execute event
|
||||
# for last load data.
|
||||
wait_for_slave_to_stop;
|
||||
|
||||
# CHANGE MASTER and see if error is cleared in SHOW SLAVE STATUS.
|
||||
stop slave;
|
||||
change master to master_user='test';
|
||||
change master to master_user='root';
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
# Trigger error again to test RESET SLAVE
|
||||
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
connection master;
|
||||
set sql_log_bin=0;
|
||||
delete from t1;
|
||||
set sql_log_bin=1;
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# The SQL slave thread should be stopped now.
|
||||
wait_for_slave_to_stop;
|
||||
|
||||
# RESET SLAVE and see if error is cleared in SHOW SLAVE STATUS.
|
||||
stop slave;
|
||||
reset slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
# Finally, see if logging is done ok on master for a failing LOAD DATA INFILE
|
||||
|
||||
connection master;
|
||||
reset master;
|
||||
eval create table t2 (day date,id int(9),category enum('a','b','c'),name varchar(60),
|
||||
unique(day)) engine=$engine_type; # no transactions
|
||||
--error 1062
|
||||
load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||
'\n##\n' starting by '>' ignore 1 lines;
|
||||
select * from t2;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
select * from t2;
|
||||
|
||||
# verify that if no error on slave, this is an error
|
||||
|
||||
alter table t2 drop key day;
|
||||
connection master;
|
||||
delete from t2;
|
||||
--error 1062
|
||||
load data infile '../../std_data/rpl_loaddata2.dat' into table t2 fields
|
||||
terminated by ',' optionally enclosed by '%' escaped by '@' lines terminated by
|
||||
'\n##\n' starting by '>' ignore 1 lines;
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
drop table t2;
|
||||
connection master;
|
||||
drop table t2;
|
||||
|
||||
# End of 4.1 tests
|
||||
28
mysql-test/extra/rpl_tests/rpl_loaddata_m.test
Normal file
28
mysql-test/extra/rpl_tests/rpl_loaddata_m.test
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# See if the master logs LOAD DATA INFILE correctly when binlog_*_db rules
|
||||
# exist.
|
||||
# This is for BUG#1100 (LOAD DATA INFILE was half-logged).
|
||||
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
--disable_warnings
|
||||
drop database if exists mysqltest;
|
||||
--enable_warnings
|
||||
|
||||
connection slave;
|
||||
stop slave; # don't need slave for this test
|
||||
|
||||
# Test logging on master
|
||||
|
||||
connection master;
|
||||
# 'test' is the current database
|
||||
create database mysqltest;
|
||||
use mysqltest;
|
||||
create table t1(a int, b int, unique(b));
|
||||
load data infile '../../std_data/rpl_loaddata.dat' into table t1;
|
||||
# Starting from 5.0.3 LOAD DATA is replicated much in the same way as ordinary
|
||||
# query so "show binlog ..." should show two events (before 5.0.3 no events
|
||||
# were returned).
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102;
|
||||
drop database mysqltest;
|
||||
119
mysql-test/extra/rpl_tests/rpl_log.test
Normal file
119
mysql-test/extra/rpl_tests/rpl_log.test
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
# Requires statement logging
|
||||
-- source include/master-slave.inc
|
||||
|
||||
# Clean up old slave's binlogs.
|
||||
# The slave is started with --log-slave-updates
|
||||
# and this test does SHOW BINLOG EVENTS on the slave's
|
||||
# binlog. But previous tests can influence the current test's
|
||||
# binlog (e.g. a temporary table in the previous test has not
|
||||
# been explicitly deleted, and at the beginning of the current
|
||||
# test the slave immediately writes DROP TEMPORARY TABLE this_old_table).
|
||||
# We wait for the slave to have written all he wants to the binlog
|
||||
# (otherwise RESET MASTER may come too early).
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
stop slave;
|
||||
reset master;
|
||||
reset slave;
|
||||
# We are going to read the slave's binlog which contains file_id (for some LOAD
|
||||
# DATA INFILE); to make it repeatable (not influenced by other tests), we need
|
||||
# to stop and start the slave, to be sure file_id will start from 1.
|
||||
# This can be done with 'server_stop slave', but
|
||||
# this would require the manager, so most of the time the test will be skipped
|
||||
# :(
|
||||
# To workaround this, I (Guilhem) add a (empty) rpl_log-slave.opt (because when
|
||||
# mysql-test-run finds such a file it restarts the slave before doing the
|
||||
# test). That's not very elegant but I could find no better way, sorry.
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
|
||||
connection master;
|
||||
reset master;
|
||||
create table t1(n int not null auto_increment primary key);
|
||||
insert into t1 values (NULL);
|
||||
drop table t1;
|
||||
create table t1 (word char(20) not null);
|
||||
load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
|
||||
select count(*) from t1;
|
||||
drop table t1;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102 limit 1;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102 limit 2;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102 limit 2,1;
|
||||
flush logs;
|
||||
|
||||
# We need an extra update before doing save_master_pos.
|
||||
# Otherwise, an unlikely scenario may occur:
|
||||
# * When the master's binlog_dump thread reads the end of master-bin.001,
|
||||
# it send the rotate event which is at this end, plus a fake rotate event
|
||||
# because it's starting to read a new binlog.
|
||||
# save_master_pos will record the position of the first of the two rotate
|
||||
# (because the fake one is not in the master's binlog anyway).
|
||||
# * Later the slave waits for the position of the first rotate event,
|
||||
# and it may quickly stop (in 'slave stop') without having received the fake
|
||||
# one.
|
||||
# So, depending on a few milliseconds, we end up with 2 rotate events in the
|
||||
# relay log or one, which influences the output of SHOW SLAVE STATUS, making
|
||||
# it not predictable and causing random test failures.
|
||||
# To make it predictable, we do a useless update now, but which has the
|
||||
# interest of making the slave catch both rotate events.
|
||||
|
||||
create table t5 (a int);
|
||||
drop table t5;
|
||||
|
||||
# Sync slave and force it to start on another binary log
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
# Note that the above 'slave start' will cause a 3rd rotate event (a fake one)
|
||||
# to go into the relay log (the master always sends a fake one when replication
|
||||
# starts).
|
||||
start slave;
|
||||
sync_with_master;
|
||||
flush logs;
|
||||
stop slave;
|
||||
connection master;
|
||||
|
||||
# Create some entries for second log
|
||||
|
||||
create table t1 (n int);
|
||||
insert into t1 values (1);
|
||||
drop table t1;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'master-bin.000002';
|
||||
show binary logs;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
show binary logs;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'slave-bin.000001' from 4;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events in 'slave-bin.000002' from 4;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
# Need to recode the following
|
||||
|
||||
#show new master for slave with master_log_file='master-bin.000001' and master_log_pos=4 and master_server_id=1;
|
||||
#show new master for slave with master_log_file='master-bin.000001' and master_log_pos=79 and master_server_id=1;
|
||||
#show new master for slave with master_log_file='master-bin.000001' and master_log_pos=311 and master_server_id=1;
|
||||
#show new master for slave with master_log_file='master-bin.000002' and master_log_pos=4 and master_server_id=1;
|
||||
#show new master for slave with master_log_file='master-bin.000002' and master_log_pos=122 and master_server_id=1;
|
||||
|
||||
--error 1220
|
||||
show binlog events in 'slave-bin.000005' from 4;
|
||||
97
mysql-test/extra/rpl_tests/rpl_max_relay_size.test
Normal file
97
mysql-test/extra/rpl_tests/rpl_max_relay_size.test
Normal file
|
|
@ -0,0 +1,97 @@
|
|||
# Test of options max_binlog_size and max_relay_log_size and
|
||||
# how they act (if max_relay_log_size == 0, use max_binlog_size
|
||||
# for relay logs too).
|
||||
# Test of manual relay log rotation with FLUSH LOGS.
|
||||
|
||||
# Requires statement logging
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection slave;
|
||||
stop slave;
|
||||
connection master;
|
||||
# Generate a big enough master's binlog to cause relay log rotations
|
||||
|
||||
create table t1 (a int);
|
||||
let $1=800;
|
||||
disable_query_log;
|
||||
begin;
|
||||
while ($1)
|
||||
{
|
||||
# eval means expand $ expressions
|
||||
eval insert into t1 values( $1 );
|
||||
dec $1;
|
||||
}
|
||||
enable_query_log;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
reset slave;
|
||||
set global max_binlog_size=8192;
|
||||
set global max_relay_log_size=8192-1; # mapped to 4096
|
||||
select @@global.max_relay_log_size;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
stop slave;
|
||||
reset slave;
|
||||
set global max_relay_log_size=(5*4096);
|
||||
select @@global.max_relay_log_size;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
stop slave;
|
||||
reset slave;
|
||||
set global max_relay_log_size=0;
|
||||
select @@global.max_relay_log_size;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
# Tests below are mainly to ensure that we have not coded with wrong assumptions
|
||||
|
||||
stop slave;
|
||||
reset slave;
|
||||
# test of relay log rotation when the slave is stopped
|
||||
# (to make sure it does not crash).
|
||||
flush logs;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
reset slave;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
# test of relay log rotation when the slave is started
|
||||
flush logs;
|
||||
# We have now easy way to be sure that the SQL thread has now deleted the
|
||||
# log we just closed. But a trick to achieve this is do an update on the master.
|
||||
connection master;
|
||||
create table t1 (a int);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
# one more rotation, to be sure Relay_Log_Space is correctly updated
|
||||
flush logs;
|
||||
connection master;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
connection master;
|
||||
# test that the absence of relay logs does not make a master crash
|
||||
flush logs;
|
||||
-- replace_column 3 <Binlog_Ignore_DB>
|
||||
show master status;
|
||||
29
mysql-test/extra/rpl_tests/rpl_multi_query.test
Normal file
29
mysql-test/extra/rpl_tests/rpl_multi_query.test
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
# Test for BUG#8436: verify that a multi-query (i.e. one query
|
||||
# containing several queries (assuming client has
|
||||
# CLIENT_MULTI_STATEMENTS) will be binlogged ONE-query-per-event (not
|
||||
# one binlog event containing all queries)
|
||||
|
||||
|
||||
# PS doesn't support multi-statements
|
||||
--disable_ps_protocol
|
||||
-- source include/master-slave.inc
|
||||
--disable_warnings
|
||||
drop database if exists mysqltest;
|
||||
--enable_warnings
|
||||
create database mysqltest;
|
||||
|
||||
delimiter /;
|
||||
create table mysqltest.t1 ( n int);
|
||||
insert into mysqltest.t1 values(1)/
|
||||
insert into mysqltest.t1 values(2);
|
||||
insert into mysqltest.t1 values(3);
|
||||
insert into mysqltest.t1 values(4);
|
||||
insert into mysqltest.t1 values(5)/
|
||||
delimiter ;/
|
||||
sync_slave_with_master;
|
||||
select * from mysqltest.t1;
|
||||
connection master;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102;
|
||||
drop database mysqltest;
|
||||
sync_slave_with_master;
|
||||
30
mysql-test/extra/rpl_tests/rpl_multi_update.test
Normal file
30
mysql-test/extra/rpl_tests/rpl_multi_update.test
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
source include/master-slave.inc;
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, 0);
|
||||
INSERT INTO t1 SELECT NULL, 0 FROM t1;
|
||||
|
||||
INSERT INTO t2 VALUES (NULL, 0), (NULL,1);
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
UPDATE t1, t2 SET t1.b = t2.b WHERE t1.a = t2.a;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
connection master;
|
||||
drop table t1, t2;
|
||||
sync_slave_with_master;
|
||||
62
mysql-test/extra/rpl_tests/rpl_multi_update2.test
Normal file
62
mysql-test/extra/rpl_tests/rpl_multi_update2.test
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
# Let's verify that multi-update is not always skipped by slave if
|
||||
# some replicate-* rules exist.
|
||||
# (BUG#7011)
|
||||
|
||||
source include/master-slave.inc;
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, 0);
|
||||
INSERT INTO t1 SELECT NULL, 0 FROM t1;
|
||||
|
||||
INSERT INTO t2 VALUES (NULL, 0), (NULL,1);
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
UPDATE t1, t2 SET t1.b = (t2.b+4) WHERE t1.a = t2.a;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
drop table t1,t2;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# BUG#13236 multi-update with subquery & --replicate-ignore-table
|
||||
#
|
||||
reset master;
|
||||
|
||||
connection master;
|
||||
CREATE TABLE t1 ( a INT );
|
||||
INSERT INTO t1 VALUES (0);
|
||||
UPDATE t1, (SELECT 3 as b) AS x SET t1.a = x.b;
|
||||
select * from t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
connection slave;
|
||||
select * from t1;
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
220
mysql-test/extra/rpl_tests/rpl_multi_update3.test
Normal file
220
mysql-test/extra/rpl_tests/rpl_multi_update3.test
Normal file
|
|
@ -0,0 +1,220 @@
|
|||
-- source include/master-slave.inc
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Let's verify that multi-update with a subselect does not cause the slave to crash
|
||||
# (BUG#10442)
|
||||
#
|
||||
--disable_query_log
|
||||
SELECT '-------- Test for BUG#9361 --------' as "";
|
||||
--enable_query_log
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, 0);
|
||||
INSERT INTO t1 SELECT NULL, 0 FROM t1;
|
||||
|
||||
INSERT INTO t2 VALUES (NULL, 0), (NULL,1);
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
UPDATE t2, (SELECT a FROM t1) AS t SET t2.b = t.a+5 ;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
drop table t1,t2;
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Test for BUG#9361:
|
||||
# Subselects should work inside multi-updates
|
||||
#
|
||||
--disable_query_log
|
||||
SELECT '-------- Test 1 for BUG#9361 --------' as "";
|
||||
--enable_query_log
|
||||
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a1 char(30),
|
||||
a2 int,
|
||||
a3 int,
|
||||
a4 char(30),
|
||||
a5 char(30)
|
||||
);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
b1 int,
|
||||
b2 char(30)
|
||||
);
|
||||
|
||||
# Insert one row per table
|
||||
INSERT INTO t1 VALUES ('Yes', 1, NULL, 'foo', 'bar');
|
||||
INSERT INTO t2 VALUES (1, 'baz');
|
||||
|
||||
# This should update the row in t1
|
||||
UPDATE t1 a, t2
|
||||
SET a.a1 = 'No'
|
||||
WHERE a.a2 =
|
||||
(SELECT b1
|
||||
FROM t2
|
||||
WHERE b2 = 'baz')
|
||||
AND a.a3 IS NULL
|
||||
AND a.a4 = 'foo'
|
||||
AND a.a5 = 'bar';
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Second test for BUG#9361
|
||||
#
|
||||
|
||||
--disable_query_log
|
||||
SELECT '-------- Test 2 for BUG#9361 --------' as "";
|
||||
--enable_query_log
|
||||
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t3;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i INT,
|
||||
j INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
i INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
);
|
||||
|
||||
CREATE TABLE t3 (
|
||||
j INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES ( 1, 2,13,14,15);
|
||||
INSERT INTO t2 VALUES ( 1, 3,23,24,25);
|
||||
INSERT INTO t3 VALUES ( 2, 3, 1,34,35), ( 2, 3, 1,34,36);
|
||||
|
||||
UPDATE t1 AS a
|
||||
INNER JOIN t2 AS b
|
||||
ON a.i = b.i
|
||||
INNER JOIN t3 AS c
|
||||
ON a.j = c.j AND b.k = c.k
|
||||
SET a.x = b.x,
|
||||
a.y = b.y,
|
||||
a.z = (
|
||||
SELECT sum(z)
|
||||
FROM t3
|
||||
WHERE y = 34
|
||||
)
|
||||
WHERE b.x = 23;
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, t2, t3;
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# BUG#12618
|
||||
#
|
||||
# TEST: Replication of a statement containing a join in a multi-update.
|
||||
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
|
||||
CREATE TABLE t1 (
|
||||
idp int(11) NOT NULL default '0',
|
||||
idpro int(11) default NULL,
|
||||
price decimal(19,4) default NULL,
|
||||
PRIMARY KEY (idp)
|
||||
);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
idpro int(11) NOT NULL default '0',
|
||||
price decimal(19,4) default NULL,
|
||||
nbprice int(11) default NULL,
|
||||
PRIMARY KEY (idpro)
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES
|
||||
(1,1,'3.0000'),
|
||||
(2,2,'1.0000'),
|
||||
(3,1,'1.0000'),
|
||||
(4,1,'4.0000'),
|
||||
(5,3,'2.0000'),
|
||||
(6,2,'4.0000');
|
||||
|
||||
INSERT INTO t2 VALUES
|
||||
(1,'0.0000',0),
|
||||
(2,'0.0000',0),
|
||||
(3,'0.0000',0);
|
||||
|
||||
# This update sets t2 to the minimal prices for each product
|
||||
update
|
||||
t2
|
||||
join
|
||||
( select idpro, min(price) as min_price, count(*) as nbr_price
|
||||
from t1
|
||||
where idpro>0 and price>0
|
||||
group by idpro
|
||||
) as table_price
|
||||
on t2.idpro = table_price.idpro
|
||||
set t2.price = table_price.min_price,
|
||||
t2.nbprice = table_price.nbr_price;
|
||||
|
||||
select "-- MASTER AFTER JOIN --" as "";
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
select "-- SLAVE AFTER JOIN --" as "";
|
||||
select * from t1;
|
||||
select * from t2;
|
||||
|
||||
# End of 4.1 tests
|
||||
75
mysql-test/extra/rpl_tests/rpl_relayrotate.test
Normal file
75
mysql-test/extra/rpl_tests/rpl_relayrotate.test
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
# When the relay log gets rotated while the I/O thread
|
||||
# is reading a transaction, the transaction spans on two or more
|
||||
# relay logs. If STOP SLAVE occurs while the SQL thread is
|
||||
# executing a part of the transaction in the non-first relay logs,
|
||||
# we test if START SLAVE will resume in the beginning of the
|
||||
# transaction (i.e., step back to the first relay log)
|
||||
|
||||
# The slave is started with max_binlog_size=16384 bytes,
|
||||
# to force many rotations (approximately 30 rotations)
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection slave;
|
||||
stop slave;
|
||||
connection master;
|
||||
--disable_warnings
|
||||
eval create table t1 (a int) engine=$engine_type;
|
||||
--enable_warnings
|
||||
let $1=8000;
|
||||
disable_query_log;
|
||||
begin;
|
||||
while ($1)
|
||||
{
|
||||
# eval means expand $ expressions
|
||||
eval insert into t1 values( $1 );
|
||||
dec $1;
|
||||
}
|
||||
commit;
|
||||
# This will generate a 500kB master's binlog,
|
||||
# which corresponds to 30 slave's relay logs.
|
||||
enable_query_log;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
reset slave;
|
||||
start slave;
|
||||
# We wait 1 sec for the SQL thread to be somewhere in
|
||||
# the middle of the transaction, hopefully not in
|
||||
# the first relay log, and hopefully before the COMMIT.
|
||||
# Usually it stops when the SQL thread is around the 15th relay log.
|
||||
# We cannot use MASTER_POS_WAIT() as master's position
|
||||
# increases only when the slave executes the COMMIT.
|
||||
# Note that except when using Valgrind, 1 second is enough for the I/O slave
|
||||
# thread to fetch the whole master's binlog.
|
||||
sleep 1;
|
||||
stop slave;
|
||||
# We suppose the SQL thread stopped before COMMIT.
|
||||
# If so the transaction was rolled back
|
||||
# and the table is now empty.
|
||||
# Now restart
|
||||
start slave;
|
||||
# And see if the table contains '8000'
|
||||
# which proves that the transaction restarted at
|
||||
# the right place.
|
||||
# We must wait for the transaction to commit before
|
||||
# reading, with a sync_with_master.
|
||||
sync_with_master;
|
||||
select max(a) from t1;
|
||||
connection master;
|
||||
|
||||
# The following DROP is a very important cleaning task:
|
||||
# imagine the next test is run with --skip-innodb: it will do
|
||||
# DROP TABLE IF EXISTS t1; but this will delete the frm and leave
|
||||
# some data in the InnoDB datafile (because at that time mysqld
|
||||
# does not know about InnoDB : --skip-innodb). So if later in the
|
||||
# test suite a test wants to create an InnoDB table called t1, it
|
||||
# will fail with
|
||||
# InnoDB: Error: table t1 already exists in InnoDB internal
|
||||
# InnoDB: data dictionary. Have you deleted the .frm file etc
|
||||
drop table t1;
|
||||
# wait until this drop is executed on slave
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
51
mysql-test/extra/rpl_tests/rpl_reset_slave.test
Normal file
51
mysql-test/extra/rpl_tests/rpl_reset_slave.test
Normal file
|
|
@ -0,0 +1,51 @@
|
|||
# TBF - difference in row level logging
|
||||
# Temp tables are not replicated in rbr, but it is still good to hit rbr with everthing
|
||||
|
||||
# See SHOW SLAVE STATUS displays well after RESET SLAVE (it should display the
|
||||
# --master-* options from mysqld, as this is what is going to be used next time
|
||||
# slave threads will be started). In bug 985, it displayed old values (of before
|
||||
# RESET SLAVE).
|
||||
# See if slave crashes when doing a CREATE TEMPORARY TABLE twice, separated by
|
||||
# RESET SLAVE.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
connection master;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
stop slave;
|
||||
change master to master_user='test';
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
reset slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
start slave;
|
||||
sync_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
# test of crash with temp tables & RESET SLAVE
|
||||
# (test to see if RESET SLAVE clears temp tables in memory and disk)
|
||||
stop slave;
|
||||
reset slave;
|
||||
start slave;
|
||||
connection master;
|
||||
create temporary table t1 (a int);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
stop slave;
|
||||
reset slave;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
show status like 'slave_open_temp_tables';
|
||||
84
mysql-test/extra/rpl_tests/rpl_row_001.test
Normal file
84
mysql-test/extra/rpl_tests/rpl_row_001.test
Normal file
|
|
@ -0,0 +1,84 @@
|
|||
-- source include/master-slave.inc
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
CREATE TABLE t1 (word CHAR(20) NOT NULL);
|
||||
LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE t1;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
eval LOAD DATA LOCAL INFILE '$MYSQL_TEST_DIR/std_data/words.dat' INTO TABLE t1;
|
||||
SELECT * FROM t1 LIMIT 10;
|
||||
|
||||
#
|
||||
# Test slave with wrong password
|
||||
#
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
STOP SLAVE;
|
||||
connection master;
|
||||
SET PASSWORD FOR root@"localhost" = PASSWORD('foo');
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
connection master;
|
||||
#
|
||||
# Give slave time to do at last one failed connect retry
|
||||
# This one must be short so that the slave will not stop retrying
|
||||
real_sleep 2;
|
||||
SET PASSWORD FOR root@"localhost" = PASSWORD('');
|
||||
# Give slave time to connect (will retry every second)
|
||||
sleep 2;
|
||||
|
||||
CREATE TABLE t3(n INT);
|
||||
INSERT INTO t3 VALUES(1),(2);
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t3;
|
||||
SELECT SUM(LENGTH(word)) FROM t1;
|
||||
connection master;
|
||||
DROP TABLE t1,t3;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# Test if the slave SQL thread can be more than 16K behind the slave
|
||||
# I/O thread (> IO_SIZE)
|
||||
|
||||
connection master;
|
||||
# we'll use table-level locking to delay slave SQL thread
|
||||
eval CREATE TABLE t1 (n INT) ENGINE=$engine_type;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
connection slave;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
connection master;
|
||||
let $1=5000;
|
||||
# Generate 16K of relay log
|
||||
disable_query_log;
|
||||
while ($1)
|
||||
{
|
||||
eval INSERT INTO t1 VALUES($1);
|
||||
dec $1;
|
||||
}
|
||||
enable_query_log;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
save_master_pos;
|
||||
|
||||
# Try to cause a large relay log lag on the slave by locking t1
|
||||
connection slave;
|
||||
LOCK TABLES t1 READ;
|
||||
START SLAVE;
|
||||
UNLOCK TABLES;
|
||||
sync_with_master;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (n INT);
|
||||
INSERT INTO t1 VALUES(3456);
|
||||
sync_slave_with_master;
|
||||
SELECT n FROM t1;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
sync_slave_with_master;
|
||||
40
mysql-test/extra/rpl_tests/rpl_row_EE_err.test
Normal file
40
mysql-test/extra/rpl_tests/rpl_row_EE_err.test
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
# The test is not relevant when testing replication of error codes for
|
||||
# statements that are not replicated. The test below could be changed
|
||||
# to rely on the replication of error codes for statements that are not
|
||||
# replicated row-based.
|
||||
|
||||
# This test does not work the same for row based as the insert in the second part is not replicated as a call but rather as a table map and row right. Have added a slave stop so the test will complete, other wise it just continues to loop waiting for a slave stop that never comes. 8/22/2005 JBM
|
||||
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
# See if an EE_ error in one event of the master's binlog stops replication
|
||||
# (it should not: in this configuration the EE_ error is probably not
|
||||
# critical). Example: you do a DROP TABLE on a table which has no MYI file
|
||||
# check if START SLAVE, RESET SLAVE, CHANGE MASTER reset Last_slave_error and
|
||||
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986).
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval create table t1 (a int) engine=$engine_type;
|
||||
flush tables;
|
||||
system rm ./var/master-data/test/t1.MYI ;
|
||||
drop table if exists t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# Now a real error.
|
||||
|
||||
connection master;
|
||||
eval create table t1 (a int, unique(a)) engine=$engine_type;
|
||||
set sql_log_bin=0;
|
||||
insert into t1 values(2);
|
||||
set sql_log_bin=1;
|
||||
save_master_pos;
|
||||
--error 1062
|
||||
insert into t1 values(1),(2);
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
stop slave;
|
||||
wait_for_slave_to_stop;
|
||||
80
mysql-test/extra/rpl_tests/rpl_row_UUID.test
Normal file
80
mysql-test/extra/rpl_tests/rpl_row_UUID.test
Normal file
|
|
@ -0,0 +1,80 @@
|
|||
#############################################################################
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/18/2005 #
|
||||
#############################################################################
|
||||
# TEST: To test the UUID() in rbr #
|
||||
#############################################################################
|
||||
|
||||
# Includes
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
--enable_warnings
|
||||
|
||||
# Section 1 test
|
||||
|
||||
eval CREATE TABLE test.t1 (a INT, blob_column LONGBLOB, vchar_column VARCHAR(100), PRIMARY KEY(a)) engine=$engine_type;
|
||||
INSERT INTO test.t1 VALUES(1,UUID(),UUID());
|
||||
delimiter |;
|
||||
create procedure test.p1()
|
||||
begin
|
||||
INSERT INTO test.t1 VALUES(2,UUID(),UUID());
|
||||
INSERT INTO test.t1 VALUES(3,UUID(),UUID());
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
CALL test.p1();
|
||||
|
||||
# Now the same thing with a function
|
||||
|
||||
delimiter |;
|
||||
create function test.fn1(x int)
|
||||
returns int
|
||||
begin
|
||||
insert into t1 values (4+x,UUID(),UUID());
|
||||
insert into t1 values (5+x,UUID(),UUID());
|
||||
return 0;
|
||||
end|
|
||||
|
||||
delimiter ;|
|
||||
# test both in SELECT and in INSERT
|
||||
select fn1(0);
|
||||
create table t2 (a int);
|
||||
insert into t2 values(fn1(2));
|
||||
|
||||
sync_slave_with_master;
|
||||
SHOW CREATE TABLE test.t1;
|
||||
|
||||
# Dump the databases and so we can see if they match
|
||||
# Another method would be to use SELECT INTO OUTFILE on master,
|
||||
# then LOAD DATA INFILE in slave, and use a query to compare.
|
||||
# This would have the advantage that it would not assume
|
||||
# the system has a 'diff'
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > ./var/tmp/rpl_row_UUID_master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > ./var/tmp/rpl_row_UUID_slave.sql
|
||||
|
||||
connection master;
|
||||
# Let's cleanup
|
||||
|
||||
DROP PROCEDURE test.p1;
|
||||
DROP TABLE test.t1;
|
||||
|
||||
# Let's compare. Note: If they match test will pass, if they do not match
|
||||
# the test will show that the diff statement failed and not reject file
|
||||
# will be created. You will need to go to the mysql-test dir and diff
|
||||
# the files your self to see what is not matching :-)
|
||||
|
||||
--exec diff ./var/tmp/rpl_row_UUID_master.sql ./var/tmp/rpl_row_UUID_slave.sql;
|
||||
|
||||
# Cleanup dump files.
|
||||
# Long-term "system rm" is not portable; we could live without
|
||||
# this cleanup as no other test will use these files and they'll
|
||||
# be removed at next testsuite run.
|
||||
|
||||
# End of 5.0 test case
|
||||
182
mysql-test/extra/rpl_tests/rpl_row_charset.test
Normal file
182
mysql-test/extra/rpl_tests/rpl_row_charset.test
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
# Replication of character sets.
|
||||
# This test will fail if the server/client does not support enough charsets.
|
||||
|
||||
# Requires statement logging
|
||||
-- source include/have_binlog_format_row.inc
|
||||
|
||||
-- source include/master-slave.inc
|
||||
--disable_warnings
|
||||
set timestamp=1000000000;
|
||||
drop database if exists mysqltest2;
|
||||
drop database if exists mysqltest3;
|
||||
--enable_warnings
|
||||
|
||||
create database mysqltest2 character set latin2;
|
||||
set @@character_set_server=latin5;
|
||||
create database mysqltest3;
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest2;
|
||||
show create database mysqltest3;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest2;
|
||||
show create database mysqltest3;
|
||||
|
||||
connection master;
|
||||
set @@collation_server=armscii8_bin;
|
||||
drop database mysqltest3;
|
||||
create database mysqltest3;
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest3;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest3;
|
||||
|
||||
connection master;
|
||||
use mysqltest2;
|
||||
create table t1 (a int auto_increment primary key, b varchar(100));
|
||||
set character_set_client=cp850, collation_connection=latin2_croatian_ci;
|
||||
insert into t1 (b) values(@@character_set_server);
|
||||
insert into t1 (b) values(@@collation_server);
|
||||
# character_set_database and collation_database are not tested as they
|
||||
# needn't be replicated (Bar said in Jan 2005).
|
||||
insert into t1 (b) values(@@character_set_client);
|
||||
# collation_client does not exist
|
||||
insert into t1 (b) values(@@character_set_connection);
|
||||
insert into t1 (b) values(@@collation_connection);
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
select * from t1 order by a;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
select * from mysqltest2.t1 order by a;
|
||||
|
||||
select "--- --muller--" as "";
|
||||
connection master;
|
||||
set character_set_client=latin1, collation_connection=latin1_german1_ci;
|
||||
truncate table t1;
|
||||
insert into t1 (b) values(@@collation_connection);
|
||||
insert into t1 (b) values(LEAST("Müller","Muffler"));
|
||||
set collation_connection=latin1_german2_ci;
|
||||
insert into t1 (b) values(@@collation_connection);
|
||||
insert into t1 (b) values(LEAST("Müller","Muffler"));
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
select * from t1 order by a;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
select * from mysqltest2.t1 order by a;
|
||||
|
||||
# Presently charset info is not logged with LOAD DATA but it will
|
||||
# change in Jan 2005 when Dmitri pushes his new LOAD DATA,
|
||||
# before 5.0.3 goes out. When done, LOAD DATA INFILE should be tested
|
||||
# here.
|
||||
|
||||
# See if user var is prefixed with collation in binlog and replicated well.
|
||||
# Note: replication of user variables is broken as far as derivation is
|
||||
# concerned. That's because when we store a user variable in the binlog,
|
||||
# we lose its derivation. So later on the slave, it's impossible to
|
||||
# know if the collation was explicit or not, so we use DERIVATION_NONE,
|
||||
# which provokes error messages (like 'Illegal mix of collation') when
|
||||
# we replay the master's INSERT/etc statements.
|
||||
|
||||
|
||||
select "--- --INSERT--" as "";
|
||||
connection master;
|
||||
set @a= _cp850 'Müller' collate cp850_general_ci;
|
||||
truncate table t1;
|
||||
insert into t1 (b) values(collation(@a));
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
select * from t1 order by a;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
select * from mysqltest2.t1 order by a;
|
||||
|
||||
connection master;
|
||||
drop database mysqltest2;
|
||||
drop database mysqltest3;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102;
|
||||
sync_slave_with_master;
|
||||
|
||||
# Check that we can change global.collation_server (since 5.0.3)
|
||||
|
||||
select "--- --global--" as "";
|
||||
set global character_set_server=latin2;
|
||||
set global character_set_server=latin1; # back
|
||||
connection master;
|
||||
set global character_set_server=latin2;
|
||||
set global character_set_server=latin1; # back
|
||||
|
||||
# Check that SET ONE_SHOT is really one shot
|
||||
|
||||
select "--- --oneshot--" as "";
|
||||
set one_shot @@character_set_server=latin5;
|
||||
set @@max_join_size=1000;
|
||||
select @@character_set_server;
|
||||
select @@character_set_server;
|
||||
set @@character_set_server=latin5;
|
||||
select @@character_set_server;
|
||||
select @@character_set_server;
|
||||
|
||||
# ONE_SHOT on not charset/collation stuff is not allowed
|
||||
-- error 1382
|
||||
set one_shot max_join_size=10;
|
||||
|
||||
# Test of wrong character set numbers;
|
||||
error 1115;
|
||||
set character_set_client=9999999;
|
||||
error 1273;
|
||||
set collation_server=9999998;
|
||||
|
||||
# This one was contributed by Sergey Petrunia (BUG#3943)
|
||||
|
||||
select "--- --3943--" as "";
|
||||
use test;
|
||||
CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
|
||||
SET CHARACTER_SET_CLIENT=koi8r,
|
||||
CHARACTER_SET_CONNECTION=cp1251,
|
||||
CHARACTER_SET_RESULTS=koi8r;
|
||||
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
|
||||
select hex(c1), hex(c2) from t1;
|
||||
sync_slave_with_master;
|
||||
select hex(c1), hex(c2) from t1;
|
||||
|
||||
connection master;
|
||||
# Let's have a look at generated SETs.
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
#--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000001
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# BUG#6676: Derivation of variables must be correct on slave
|
||||
#
|
||||
select "--- --6676--" as "";
|
||||
connection master;
|
||||
eval create table `t1` (
|
||||
`pk` varchar(10) not null default '',
|
||||
primary key (`pk`)
|
||||
) engine=$engine_type default charset=latin1;
|
||||
set @p=_latin1 'test';
|
||||
update t1 set pk='test' where pk=@p;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
22
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test
Normal file
22
mysql-test/extra/rpl_tests/rpl_row_delayed_ins.test
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
# See if INSERT DELAYED gets replicated
|
||||
# Only in row-based, as we do SHOW BINLOG EVENTS
|
||||
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection master;
|
||||
let $VERSION=`select version()`;
|
||||
eval create table t1(a int not null primary key) engine=$engine_type;
|
||||
insert delayed into t1 values (1),(2),(3);
|
||||
flush tables;
|
||||
select * from t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
--replace_result $VERSION VERSION
|
||||
show binlog events;
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
96
mysql-test/extra/rpl_tests/rpl_row_func003.test
Normal file
96
mysql-test/extra/rpl_tests/rpl_row_func003.test
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
#############################################################################
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/15/2005 #
|
||||
# Update: 08/29/2005 Comment out sleep. Only needed for debugging #
|
||||
#############################################################################
|
||||
# Note: Many lines are commented out in this test case. These were used for #
|
||||
# creating the test case and debugging and are being left for #
|
||||
# debugging, but they can not be used for the regular testing as the #
|
||||
# Time changes and is not deteministic, so instead we dump both the #
|
||||
# master and slave and diff the dumps. If the dumps differ then the #
|
||||
# test case will fail. To run during diff failuers, comment out the #
|
||||
# diff. #
|
||||
# Test: Tests MySQL stored function using RAND() and a flow control. The #
|
||||
# test inserts rows into a givin table with the function used in #
|
||||
# the insert statement. Depending on the RAND() value returned #
|
||||
# inside the function one set of text is returned. In addition, #
|
||||
# it uses a transaction to see the effect a rollback has on master #
|
||||
# Vs slave. #
|
||||
#############################################################################
|
||||
|
||||
# Includes
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
DROP FUNCTION IF EXISTS test.f1;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
|
||||
--enable_warnings
|
||||
|
||||
|
||||
eval CREATE TABLE test.t1 (a INT NOT NULL AUTO_INCREMENT, c CHAR(16),PRIMARY KEY(a))ENGINE=$engine_type;
|
||||
|
||||
delimiter |;
|
||||
create function test.f1() RETURNS CHAR(16)
|
||||
BEGIN
|
||||
DECLARE tmp CHAR(16);
|
||||
DECLARE var_name FLOAT;
|
||||
SET var_name = RAND();
|
||||
IF var_name > .6
|
||||
THEN SET tmp = 'Texas';
|
||||
ELSE SET tmp = 'MySQL';
|
||||
END IF;
|
||||
RETURN tmp;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
||||
sleep 6;
|
||||
INSERT INTO test.t1 VALUES (null,test.f1()),(null,test.f1()),(null,test.f1());
|
||||
sleep 6;
|
||||
|
||||
#Select in this test are used for debugging
|
||||
#select * from test.t1;
|
||||
#connection slave;
|
||||
#select * from test.t1;
|
||||
|
||||
connection master;
|
||||
SET AUTOCOMMIT=0;
|
||||
START TRANSACTION;
|
||||
INSERT INTO test.t1 VALUES (null,test.f1());
|
||||
ROLLBACK;
|
||||
SET AUTOCOMMIT=1;
|
||||
#select * from test.t1;
|
||||
#sleep 6;
|
||||
|
||||
#connection slave;
|
||||
#select * from test.t1;
|
||||
|
||||
#connection master;
|
||||
|
||||
#used for debugging
|
||||
#show binlog events;
|
||||
|
||||
# time to dump the databases and so we can see if they match
|
||||
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > ./var/tmp/func003_master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > ./var/tmp/func003_slave.sql
|
||||
|
||||
# First lets cleanupi
|
||||
DROP FUNCTION test.f1;
|
||||
DROP TABLE test.t1;
|
||||
|
||||
|
||||
# the test will show that the diff statement failed and no reject file
|
||||
# will be created. You will need to go to the mysql-test dir and diff
|
||||
# the files yourself to see what is not matching :-) File are located
|
||||
# in mysql-test/var/tmp
|
||||
|
||||
exec diff ./var/tmp/func003_master.sql ./var/tmp/func003_slave.sql;
|
||||
|
||||
|
||||
# End of 5.0 test case
|
||||
159
mysql-test/extra/rpl_tests/rpl_row_multi_update3.test
Normal file
159
mysql-test/extra/rpl_tests/rpl_row_multi_update3.test
Normal file
|
|
@ -0,0 +1,159 @@
|
|||
-- source include/master-slave.inc
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Let's verify that multi-update with a subselect does not cause the slave to crash
|
||||
# (BUG#10442)
|
||||
#
|
||||
--disable_query_log
|
||||
SELECT '-------- Test for BUG#9361 --------' as "";
|
||||
--enable_query_log
|
||||
|
||||
eval CREATE TABLE t1 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
eval CREATE TABLE t2 (
|
||||
a int unsigned not null auto_increment primary key,
|
||||
b int unsigned
|
||||
) ENGINE=$engine_type;
|
||||
|
||||
INSERT INTO t1 VALUES (NULL, 0);
|
||||
INSERT INTO t1 SELECT NULL, 0 FROM t1;
|
||||
|
||||
INSERT INTO t2 VALUES (NULL, 0), (NULL,1);
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
UPDATE t2, (SELECT a FROM t1) AS t SET t2.b = t.a+5 ;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
drop table t1,t2;
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Test for BUG#9361:
|
||||
# Subselects should work inside multi-updates
|
||||
#
|
||||
--disable_query_log
|
||||
SELECT '-------- Test 1 for BUG#9361 --------' as "";
|
||||
--enable_query_log
|
||||
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (
|
||||
a1 char(30),
|
||||
a2 int,
|
||||
a3 int,
|
||||
a4 char(30),
|
||||
a5 char(30)
|
||||
);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
b1 int,
|
||||
b2 char(30)
|
||||
);
|
||||
|
||||
# Insert one row per table
|
||||
INSERT INTO t1 VALUES ('Yes', 1, NULL, 'foo', 'bar');
|
||||
INSERT INTO t2 VALUES (1, 'baz');
|
||||
|
||||
# This should update the row in t1
|
||||
UPDATE t1 a, t2
|
||||
SET a.a1 = 'No'
|
||||
WHERE a.a2 =
|
||||
(SELECT b1
|
||||
FROM t2
|
||||
WHERE b2 = 'baz')
|
||||
AND a.a3 IS NULL
|
||||
AND a.a4 = 'foo'
|
||||
AND a.a5 = 'bar';
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t2;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, t2;
|
||||
|
||||
##############################################################################
|
||||
#
|
||||
# Second test for BUG#9361
|
||||
#
|
||||
|
||||
--disable_query_log
|
||||
SELECT '-------- Test 2 for BUG#9361 --------' as "";
|
||||
--enable_query_log
|
||||
|
||||
connection master;
|
||||
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t2;
|
||||
DROP TABLE IF EXISTS t3;
|
||||
--enable_warnings
|
||||
|
||||
CREATE TABLE t1 (
|
||||
i INT,
|
||||
j INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
);
|
||||
|
||||
CREATE TABLE t2 (
|
||||
i INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
);
|
||||
|
||||
CREATE TABLE t3 (
|
||||
j INT,
|
||||
k INT,
|
||||
x INT,
|
||||
y INT,
|
||||
z INT
|
||||
);
|
||||
|
||||
INSERT INTO t1 VALUES ( 1, 2,13,14,15);
|
||||
INSERT INTO t2 VALUES ( 1, 3,23,24,25);
|
||||
INSERT INTO t3 VALUES ( 2, 3, 1,34,35), ( 2, 3, 1,34,36);
|
||||
|
||||
UPDATE t1 AS a
|
||||
INNER JOIN t2 AS b
|
||||
ON a.i = b.i
|
||||
INNER JOIN t3 AS c
|
||||
ON a.j = c.j AND b.k = c.k
|
||||
SET a.x = b.x,
|
||||
a.y = b.y,
|
||||
a.z = (
|
||||
SELECT sum(z)
|
||||
FROM t3
|
||||
WHERE y = 34
|
||||
)
|
||||
WHERE b.x = 23;
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
|
||||
SELECT * FROM t1;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, t2, t3;
|
||||
239
mysql-test/extra/rpl_tests/rpl_row_sp002.test
Normal file
239
mysql-test/extra/rpl_tests/rpl_row_sp002.test
Normal file
|
|
@ -0,0 +1,239 @@
|
|||
#############################################################################
|
||||
# This test is being created to test out the non deterministic items with #
|
||||
# row based replication. #
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/09/2005 #
|
||||
# Updated: Aug/29/2005 #
|
||||
#############################################################################
|
||||
# Test: Contains two stored procedures test one that insert data into tables#
|
||||
# and use the LAST_INSERTED_ID() on tables with FOREIGN KEY(a) #
|
||||
# REFERENCES ON DELETE CASCADE. This test also has a delete sp that #
|
||||
# should cause a delete cascade. #
|
||||
# The second test has a sp that will either insert rows or delete from#
|
||||
# the table depending on the CASE outcome. The test uses this SP in a#
|
||||
# transaction first rolling back and then commiting, #
|
||||
#############################################################################
|
||||
# Mod Date: 08/22/2005 #
|
||||
# TEST: Added test to include UPDATE CASCADE on table with FK per Trudy #
|
||||
#############################################################################
|
||||
|
||||
|
||||
|
||||
# Includes
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP PROCEDURE IF EXISTS test.p2;
|
||||
DROP PROCEDURE IF EXISTS test.p3;
|
||||
DROP TABLE IF EXISTS test.t3;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
DROP TABLE IF EXISTS test.t2;
|
||||
--enable_warnings
|
||||
# End of cleanup
|
||||
|
||||
# Begin test section 1
|
||||
|
||||
eval CREATE TABLE test.t1 (a INT AUTO_INCREMENT KEY, t CHAR(6)) ENGINE=$engine_type;
|
||||
eval CREATE TABLE test.t2 (a INT AUTO_INCREMENT KEY, f INT, FOREIGN KEY(a) REFERENCES test.t1(a) ON DELETE CASCADE) ENGINE=$engine_type;
|
||||
|
||||
delimiter |;
|
||||
create procedure test.p1(IN i CHAR(6))
|
||||
begin
|
||||
INSERT INTO test.t1 (t) VALUES (i);
|
||||
INSERT INTO test.t2 VALUES (NULL,LAST_INSERT_ID());
|
||||
end|
|
||||
create procedure test.p2(IN i INT)
|
||||
begin
|
||||
DELETE FROM test.t1 where a < i;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
let $message=< -- test 1 call p1 -- >;
|
||||
--source include/show_msg.inc
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
call test.p1('texas');
|
||||
call test.p1('Live');
|
||||
call test.p1('next');
|
||||
call test.p1('to');
|
||||
call test.p1('OK');
|
||||
call test.p1('MySQL');
|
||||
|
||||
let $message=< -- test 1 select master after p1 -- >;
|
||||
--source include/show_msg.inc
|
||||
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
let $message=< -- test 1 select slave after p1 -- >;
|
||||
--source include/show_msg.inc
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
let $message=< -- test 1 call p2 & select master -- >;
|
||||
--source include/show_msg.inc
|
||||
connection master;
|
||||
call test.p2(4);
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
let $message=< -- test 1 select slave after p2 -- >;
|
||||
--source include/show_msg.inc
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
connection master;
|
||||
#show binlog events;
|
||||
let $message=< -- End test 1 Begin test 2 -- >;
|
||||
--source include/show_msg.inc
|
||||
# End test 1 Begin test 2
|
||||
|
||||
--disable_warnings
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP PROCEDURE IF EXISTS test.p2;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
DROP TABLE IF EXISTS test.t2;
|
||||
--enable_warnings
|
||||
# End of cleanup
|
||||
|
||||
eval CREATE TABLE test.t1 (a INT, t CHAR(6), PRIMARY KEY(a)) ENGINE=$engine_type;
|
||||
eval CREATE TABLE test.t2 (a INT, f INT, FOREIGN KEY(a) REFERENCES test.t1(a) ON UPDATE CASCADE, PRIMARY KEY(a)) ENGINE=$engine_type;
|
||||
|
||||
delimiter |;
|
||||
CREATE PROCEDURE test.p1(IN nm INT, IN ch CHAR(6))
|
||||
BEGIN
|
||||
INSERT INTO test.t1 (a,t) VALUES (nm, ch);
|
||||
INSERT INTO test.t2 VALUES (nm, LAST_INSERT_ID());
|
||||
END|
|
||||
CREATE PROCEDURE test.p2(IN i INT)
|
||||
BEGIN
|
||||
UPDATE test.t1 SET a = i*10 WHERE a = i;
|
||||
END|
|
||||
delimiter ;|
|
||||
SET FOREIGN_KEY_CHECKS=1;
|
||||
CALL test.p1(1,'texas');
|
||||
CALL test.p1(2,'Live');
|
||||
CALL test.p1(3,'next');
|
||||
CALL test.p1(4,'to');
|
||||
CALL test.p1(5,'OK');
|
||||
CALL test.p1(6,'MySQL');
|
||||
|
||||
let $message=< -- test 2 select Master after p1 -- >;
|
||||
--source include/show_msg.inc
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
let $message=< -- test 2 select Slave after p1 -- >;
|
||||
--source include/show_msg.inc
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
let $message=< -- test 2 call p2 & select Master -- >;
|
||||
--source include/show_msg.inc
|
||||
connection master;
|
||||
CALL test.p2(2);
|
||||
CALL test.p2(4);
|
||||
CALL test.p2(6);
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
let $message=< -- test 1 select Slave after p2 -- >;
|
||||
--source include/show_msg.inc
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM test.t1;
|
||||
SELECT * FROM test.t2;
|
||||
|
||||
connection master;
|
||||
#show binlog events;
|
||||
let $message=< -- End test 2 Begin test 3 -- >;
|
||||
--source include/show_msg.inc
|
||||
# End test 2 begin test 3
|
||||
|
||||
eval CREATE TABLE test.t3 (a INT AUTO_INCREMENT KEY, t CHAR(6))ENGINE=$engine_type;
|
||||
|
||||
delimiter |;
|
||||
CREATE PROCEDURE test.p3(IN n INT)
|
||||
begin
|
||||
CASE n
|
||||
WHEN 2 THEN
|
||||
DELETE from test.t3;
|
||||
ELSE
|
||||
INSERT INTO test.t3 VALUES (NULL,'NONE');
|
||||
END CASE;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
SET AUTOCOMMIT=0;
|
||||
START TRANSACTION;
|
||||
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
let $n=50;
|
||||
while ($n)
|
||||
{
|
||||
eval call test.p3($n);
|
||||
dec $n;
|
||||
}
|
||||
-- enable_result_log
|
||||
-- enable_query_log
|
||||
|
||||
ROLLBACK;
|
||||
select * from test.t3;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from test.t3;
|
||||
|
||||
connection master;
|
||||
START TRANSACTION;
|
||||
|
||||
-- disable_query_log
|
||||
-- disable_result_log
|
||||
let $n=50;
|
||||
while ($n>3)
|
||||
{
|
||||
eval call test.p3($n);
|
||||
dec $n;
|
||||
}
|
||||
-- enable_result_log
|
||||
-- enable_query_log
|
||||
|
||||
COMMIT;
|
||||
select * from test.t3;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from test.t3;
|
||||
|
||||
connection master;
|
||||
#show binlog events from 1626;
|
||||
|
||||
|
||||
# First lets cleanup
|
||||
SET AUTOCOMMIT=1;
|
||||
SET FOREIGN_KEY_CHECKS=0;
|
||||
DROP PROCEDURE IF EXISTS test.p3;
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP PROCEDURE IF EXISTS test.p2;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
DROP TABLE IF EXISTS test.t2;
|
||||
DROP TABLE IF EXISTS test.t3;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 5.0 test case
|
||||
72
mysql-test/extra/rpl_tests/rpl_row_sp003.test
Normal file
72
mysql-test/extra/rpl_tests/rpl_row_sp003.test
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
#############################################################################
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/13/2005 Created from Bug 12335 #
|
||||
#############################################################################
|
||||
|
||||
# Includes
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP PROCEDURE IF EXISTS test.p2;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
--enable_warnings
|
||||
# End of cleanup
|
||||
|
||||
# Begin test section 1
|
||||
|
||||
eval CREATE TABLE test.t1(a INT,PRIMARY KEY(a))ENGINE=$engine_type;
|
||||
|
||||
delimiter |;
|
||||
CREATE PROCEDURE test.p1()
|
||||
BEGIN
|
||||
INSERT INTO test.t1 VALUES (4);
|
||||
SELECT get_lock("test", 100);
|
||||
UPDATE test.t1 set a=a+4 WHERE a=4;
|
||||
END|
|
||||
CREATE PROCEDURE test.p2()
|
||||
BEGIN
|
||||
UPDATE test.t1 SET a=a+1;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
SELECT get_lock("test", 200);
|
||||
|
||||
connection master1;
|
||||
send CALL test.p1();
|
||||
|
||||
connection master;
|
||||
# To make sure tha the call on master1 arrived at the get_lock
|
||||
sleep 1;
|
||||
CALL test.p2();
|
||||
SELECT release_lock("test");
|
||||
SELECT * FROM test.t1;
|
||||
#show binlog events;
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
eval CREATE TABLE test.t1(a INT,PRIMARY KEY(a))ENGINE=$engine_type;
|
||||
CALL test.p2();
|
||||
CALL test.p1();
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
SELECT * FROM test.t1;
|
||||
connection master;
|
||||
#show binlog events from 719;
|
||||
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP PROCEDURE IF EXISTS test.p2;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 5.0 test case
|
||||
90
mysql-test/extra/rpl_tests/rpl_row_sp006.test
Normal file
90
mysql-test/extra/rpl_tests/rpl_row_sp006.test
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
#############################################################################
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/15/2005 #
|
||||
# Updated: 08/29/2005 to remove sleeps #
|
||||
#############################################################################
|
||||
# Test: This test uses two SPs, one to populate a table, and another to use #
|
||||
# Cursors, CURRENT_DATE(), loop control, date math and logic control #
|
||||
# to populate a table with data from the first table. #
|
||||
#############################################################################
|
||||
|
||||
# Includes
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
create database if not exists mysqltest1;
|
||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
||||
--enable_warnings
|
||||
# End of cleanup
|
||||
|
||||
# Begin test section 1
|
||||
eval CREATE TABLE IF NOT EXISTS mysqltest1.t1(name CHAR(16), birth DATE,PRIMARY KEY(name))ENGINE=$engine_type;
|
||||
eval CREATE TABLE IF NOT EXISTS mysqltest1.t2(name CHAR(16), age INT ,PRIMARY KEY(name))ENGINE=$engine_type;
|
||||
|
||||
delimiter |;
|
||||
CREATE PROCEDURE mysqltest1.p1()
|
||||
BEGIN
|
||||
DECLARE done INT DEFAULT 0;
|
||||
DECLARE spa CHAR(16);
|
||||
DECLARE spb INT;
|
||||
DECLARE cur1 CURSOR FOR SELECT name,
|
||||
(YEAR(CURDATE())-YEAR(birth))-(RIGHT(CURDATE(),5)<RIGHT(birth,5))
|
||||
FROM mysqltest1.t1;
|
||||
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
|
||||
|
||||
OPEN cur1;
|
||||
|
||||
SET AUTOCOMMIT=0;
|
||||
REPEAT
|
||||
FETCH cur1 INTO spa, spb;
|
||||
IF NOT done THEN
|
||||
START TRANSACTION;
|
||||
INSERT INTO mysqltest1.t2 VALUES (spa,spb);
|
||||
COMMIT;
|
||||
END IF;
|
||||
UNTIL done END REPEAT;
|
||||
|
||||
SET AUTOCOMMIT=1;
|
||||
CLOSE cur1;
|
||||
END|
|
||||
CREATE PROCEDURE mysqltest1.p2()
|
||||
BEGIN
|
||||
INSERT INTO mysqltest1.t1 VALUES ('MySQL','1993-02-04'),('ROCKS', '1990-08-27'),('Texas', '1999-03-30'),('kyle','2005-1-1');
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
CALL mysqltest1.p2();
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
CALL mysqltest1.p1();
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > ./var/tmp/sp006_master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info mysqltest1 > ./var/tmp/sp006_slave.sql
|
||||
|
||||
|
||||
DROP PROCEDURE IF EXISTS mysqltest1.p1;
|
||||
DROP PROCEDURE IF EXISTS mysqltest1.p2;
|
||||
DROP TABLE IF EXISTS mysqltest1.t1;
|
||||
DROP TABLE IF EXISTS mysqltest1.t2;
|
||||
|
||||
# Lets compare. Note: If they match test will pass, if they do not match
|
||||
# the test will show that the diff statement failed and not reject file
|
||||
# will be created. You will need to go to the mysql-test dir and diff
|
||||
# the files your self to see what is not matching :-) Failed test
|
||||
# Dump files will be located in mysql-test/var/tmp.
|
||||
|
||||
exec diff ./var/tmp/sp006_master.sql ./var/tmp/sp006_slave.sql;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 5.1 test case
|
||||
70
mysql-test/extra/rpl_tests/rpl_row_sp007.test
Normal file
70
mysql-test/extra/rpl_tests/rpl_row_sp007.test
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#############################################################################
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/15/2005 #
|
||||
# Updated: 08/29/2005 Remove sleeps #
|
||||
#############################################################################
|
||||
# TEST: SP that creates table, starts tranaction inserts. Save point, insert#
|
||||
# rollback to save point and then commits. #
|
||||
#############################################################################
|
||||
# Includes
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
--enable_warnings
|
||||
# End of cleanup
|
||||
|
||||
# Begin test section 1
|
||||
delimiter |;
|
||||
eval CREATE PROCEDURE test.p1(IN i INT)
|
||||
BEGIN
|
||||
DECLARE CONTINUE HANDLER FOR sqlexception BEGIN END;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
CREATE TABLE test.t1 (num INT,PRIMARY KEY(num))ENGINE=$engine_type;
|
||||
START TRANSACTION;
|
||||
INSERT INTO test.t1 VALUES(i);
|
||||
savepoint t1_save;
|
||||
INSERT INTO test.t1 VALUES (14);
|
||||
ROLLBACK to savepoint t1_save;
|
||||
COMMIT;
|
||||
END|
|
||||
delimiter ;|
|
||||
|
||||
let $message=< ---- Master selects-- >;
|
||||
--source include/show_msg.inc
|
||||
CALL test.p1(12);
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
|
||||
let $message=< ---- Slave selects-- >;
|
||||
--source include/show_msg.inc
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
let $message=< ---- Master selects-- >;
|
||||
--source include/show_msg.inc
|
||||
connection master;
|
||||
CALL test.p1(13);
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
let $message=< ---- Slave selects-- >;
|
||||
--source include/show_msg.inc
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
SELECT * FROM test.t1;
|
||||
|
||||
connection master;
|
||||
#show binlog events;
|
||||
|
||||
|
||||
DROP PROCEDURE IF EXISTS test.p1;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
|
||||
# End of 5.0 test case
|
||||
129
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
Normal file
129
mysql-test/extra/rpl_tests/rpl_row_tabledefs.test
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
# Test how replication of tables work when the definition on the
|
||||
# master and slave differs.
|
||||
|
||||
# Consider making these part of the basic RBR tests.
|
||||
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
connection master;
|
||||
eval CREATE TABLE t1 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t2 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t3 (a INT PRIMARY KEY, b INT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t4 (a INT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t5 (a INT, b INT, c INT) ENGINE=$engine_type;
|
||||
eval CREATE TABLE t6 (a INT, b INT, c INT) ENGINE=$engine_type;
|
||||
|
||||
# Table used to detect that slave is running
|
||||
eval CREATE TABLE t9 (a INT PRIMARY KEY) ENGINE=$engine_type;
|
||||
|
||||
sync_slave_with_master;
|
||||
# On the slave, we add one column last in table 't1',
|
||||
ALTER TABLE t1 ADD x INT DEFAULT 42;
|
||||
# ... add one column in the middle of table 't2', and
|
||||
ALTER TABLE t2 ADD x INT DEFAULT 42 AFTER a;
|
||||
# ... add one column first in table 't3'.
|
||||
ALTER TABLE t3 ADD x INT DEFAULT 42 FIRST;
|
||||
# ... change the type of the single column in table 't4'
|
||||
ALTER TABLE t4 MODIFY a FLOAT;
|
||||
# ... change the type of the middle column of table 't5'
|
||||
ALTER TABLE t5 MODIFY b FLOAT;
|
||||
# ... change the type of the last column of table 't6'
|
||||
ALTER TABLE t6 MODIFY c FLOAT;
|
||||
|
||||
# Each of these should generate an error and stop the slave
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (1);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t1 VALUES (1,2);
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (2);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t2 VALUES (2,4);
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (3);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t3 VALUES (3,6);
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (4);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t4 VALUES (4);
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (5);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t5 VALUES (5,10,25);
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (6);
|
||||
sync_slave_with_master;
|
||||
# Now slave is guaranteed to be running
|
||||
connection master;
|
||||
INSERT INTO t6 VALUES (6,12,36);
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
||||
connection master;
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t9;
|
||||
--enable_warnings
|
||||
sync_slave_with_master;
|
||||
131
mysql-test/extra/rpl_tests/rpl_stm_000001.test
Normal file
131
mysql-test/extra/rpl_tests/rpl_stm_000001.test
Normal file
|
|
@ -0,0 +1,131 @@
|
|||
-- source include/have_binlog_format_statement.inc
|
||||
-- source include/master-slave.inc
|
||||
|
||||
create table t1 (word char(20) not null);
|
||||
load data infile '../../std_data/words.dat' into table t1;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
eval load data local infile '$MYSQL_TEST_DIR/std_data/words.dat' into table t1;
|
||||
select * from t1 limit 10;
|
||||
|
||||
#
|
||||
# Test slave with wrong password
|
||||
#
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
stop slave;
|
||||
connection master;
|
||||
set password for root@"localhost" = password('foo');
|
||||
connection slave;
|
||||
start slave;
|
||||
connection master;
|
||||
#
|
||||
# Give slave time to do at last one failed connect retry
|
||||
# This one must be short so that the slave will not stop retrying
|
||||
real_sleep 2;
|
||||
set password for root@"localhost" = password('');
|
||||
# Give slave time to connect (will retry every second)
|
||||
sleep 2;
|
||||
|
||||
create table t3(n int);
|
||||
insert into t3 values(1),(2);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select * from t3;
|
||||
select sum(length(word)) from t1;
|
||||
connection master;
|
||||
drop table t1,t3;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# Test if the slave SQL thread can be more than 16K behind the slave
|
||||
# I/O thread (> IO_SIZE)
|
||||
|
||||
connection master;
|
||||
# we'll use table-level locking to delay slave SQL thread
|
||||
eval create table t1 (n int) engine=$engine_type;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
reset master;
|
||||
connection slave;
|
||||
stop slave;
|
||||
reset slave;
|
||||
|
||||
connection master;
|
||||
let $1=5000;
|
||||
# Generate 16K of relay log
|
||||
disable_query_log;
|
||||
while ($1)
|
||||
{
|
||||
eval insert into t1 values($1);
|
||||
dec $1;
|
||||
}
|
||||
enable_query_log;
|
||||
|
||||
# Try to cause a large relay log lag on the slave by locking t1
|
||||
connection slave;
|
||||
lock tables t1 read;
|
||||
start slave;
|
||||
#hope this is long enough for I/O thread to fetch over 16K relay log data
|
||||
sleep 3;
|
||||
unlock tables;
|
||||
|
||||
#test handling of aborted connection in the middle of update
|
||||
|
||||
connection master;
|
||||
create table t2(id int);
|
||||
insert into t2 values(connection_id());
|
||||
save_master_pos;
|
||||
|
||||
connection master1;
|
||||
# Avoid generating result
|
||||
create temporary table t3(n int);
|
||||
insert into t3 select get_lock('crash_lock%20C', 1) from t2;
|
||||
|
||||
connection master;
|
||||
send update t1 set n = n + get_lock('crash_lock%20C', 2);
|
||||
connection master1;
|
||||
sleep 3;
|
||||
select (@id := id) - id from t2;
|
||||
kill @id;
|
||||
# We don't drop t3 as this is a temporary table
|
||||
drop table t2;
|
||||
connection master;
|
||||
--error 1053,2013
|
||||
reap;
|
||||
connection slave;
|
||||
# The SQL slave thread should now have stopped because the query was killed on
|
||||
# the master (so it has a non-zero error code in the binlog).
|
||||
wait_for_slave_to_stop;
|
||||
|
||||
# The following test can't be done because the result of Pos will differ
|
||||
# on different computers
|
||||
# --replace_result $MASTER_MYPORT MASTER_PORT
|
||||
# show slave status;
|
||||
|
||||
set global sql_slave_skip_counter=1;
|
||||
start slave;
|
||||
select count(*) from t1;
|
||||
connection master1;
|
||||
drop table t1;
|
||||
create table t1 (n int);
|
||||
insert into t1 values(3456);
|
||||
insert into mysql.user (Host, User, Password)
|
||||
VALUES ("10.10.10.%", "blafasel2", password("blafasel2"));
|
||||
select select_priv,user from mysql.user where user = _binary'blafasel2';
|
||||
update mysql.user set Select_priv = "Y" where User= _binary"blafasel2";
|
||||
select select_priv,user from mysql.user where user = _binary'blafasel2';
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
select n from t1;
|
||||
select select_priv,user from mysql.user where user = _binary'blafasel2';
|
||||
connection master1;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
38
mysql-test/extra/rpl_tests/rpl_stm_EE_err.test
Normal file
38
mysql-test/extra/rpl_tests/rpl_stm_EE_err.test
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
# The test is not relevant when testing replication of error codes for
|
||||
# statements that are not replicated. The test below could be changed
|
||||
# to rely on the replication of error codes for statements that are not
|
||||
# replicated row-based.
|
||||
-- source include/have_binlog_format_statement.inc
|
||||
|
||||
# See if an EE_ error in one event of the master's binlog stops replication
|
||||
# (it should not: in this configuration the EE_ error is probably not
|
||||
# critical). Example: you do a DROP TABLE on a table which has no MYI file
|
||||
# check if START SLAVE, RESET SLAVE, CHANGE MASTER reset Last_slave_error and
|
||||
# Last_slave_errno in SHOW SLAVE STATUS (1st and 3rd commands did not: bug 986).
|
||||
|
||||
-- source include/master-slave.inc
|
||||
|
||||
eval create table t1 (a int) engine=$engine_type;
|
||||
flush tables;
|
||||
system rm ./var/master-data/test/t1.MYI ;
|
||||
drop table if exists t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# Now a real error.
|
||||
|
||||
connection master;
|
||||
eval create table t1 (a int, unique(a)) engine=$engine_type;
|
||||
set sql_log_bin=0;
|
||||
insert into t1 values(2);
|
||||
set sql_log_bin=1;
|
||||
save_master_pos;
|
||||
--error 1062
|
||||
insert into t1 values(1),(2);
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
wait_for_slave_to_stop;
|
||||
|
||||
# End of 4.1 tests
|
||||
176
mysql-test/extra/rpl_tests/rpl_stm_charset.test
Normal file
176
mysql-test/extra/rpl_tests/rpl_stm_charset.test
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
# Replication of character sets.
|
||||
# This test will fail if the server/client does not support enough charsets.
|
||||
|
||||
# Requires statement logging
|
||||
-- source include/have_binlog_format_statement.inc
|
||||
|
||||
source include/master-slave.inc;
|
||||
--disable_warnings
|
||||
set timestamp=1000000000;
|
||||
drop database if exists mysqltest2;
|
||||
drop database if exists mysqltest3;
|
||||
--enable_warnings
|
||||
|
||||
create database mysqltest2 character set latin2;
|
||||
set @@character_set_server=latin5;
|
||||
create database mysqltest3;
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest2;
|
||||
show create database mysqltest3;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest2;
|
||||
show create database mysqltest3;
|
||||
|
||||
connection master;
|
||||
set @@collation_server=armscii8_bin;
|
||||
drop database mysqltest3;
|
||||
create database mysqltest3;
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest3;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
show create database mysqltest3;
|
||||
|
||||
connection master;
|
||||
use mysqltest2;
|
||||
create table t1 (a int auto_increment primary key, b varchar(100));
|
||||
set character_set_client=cp850, collation_connection=latin2_croatian_ci;
|
||||
insert into t1 (b) values(@@character_set_server);
|
||||
insert into t1 (b) values(@@collation_server);
|
||||
# character_set_database and collation_database are not tested as they
|
||||
# needn't be replicated (Bar said in Jan 2005).
|
||||
insert into t1 (b) values(@@character_set_client);
|
||||
# collation_client does not exist
|
||||
insert into t1 (b) values(@@character_set_connection);
|
||||
insert into t1 (b) values(@@collation_connection);
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
select * from t1 order by a;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
select * from mysqltest2.t1 order by a;
|
||||
|
||||
connection master;
|
||||
set character_set_client=latin1, collation_connection=latin1_german1_ci;
|
||||
truncate table t1;
|
||||
insert into t1 (b) values(@@collation_connection);
|
||||
insert into t1 (b) values(LEAST("Müller","Muffler"));
|
||||
set collation_connection=latin1_german2_ci;
|
||||
insert into t1 (b) values(@@collation_connection);
|
||||
insert into t1 (b) values(LEAST("Müller","Muffler"));
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
select * from t1 order by a;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
select * from mysqltest2.t1 order by a;
|
||||
|
||||
# Presently charset info is not logged with LOAD DATA but it will
|
||||
# change in Jan 2005 when Dmitri pushes his new LOAD DATA,
|
||||
# before 5.0.3 goes out. When done, LOAD DATA INFILE should be tested
|
||||
# here.
|
||||
|
||||
# See if user var is prefixed with collation in binlog and replicated well.
|
||||
# Note: replication of user variables is broken as far as derivation is
|
||||
# concerned. That's because when we store a user variable in the binlog,
|
||||
# we lose its derivation. So later on the slave, it's impossible to
|
||||
# know if the collation was explicit or not, so we use DERIVATION_NONE,
|
||||
# which provokes error messages (like 'Illegal mix of collation') when
|
||||
# we replay the master's INSERT/etc statements.
|
||||
connection master;
|
||||
set @a= _cp850 'Müller' collate cp850_general_ci;
|
||||
truncate table t1;
|
||||
insert into t1 (b) values(collation(@a));
|
||||
--disable_query_log
|
||||
select "--- --master--" as "";
|
||||
--enable_query_log
|
||||
select * from t1 order by a;
|
||||
sync_slave_with_master;
|
||||
--disable_query_log
|
||||
select "--- --slave--" as "";
|
||||
--enable_query_log
|
||||
select * from mysqltest2.t1 order by a;
|
||||
|
||||
connection master;
|
||||
drop database mysqltest2;
|
||||
drop database mysqltest3;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 102;
|
||||
sync_slave_with_master;
|
||||
|
||||
# Check that we can change global.collation_server (since 5.0.3)
|
||||
|
||||
set global character_set_server=latin2;
|
||||
set global character_set_server=latin1; # back
|
||||
connection master;
|
||||
set global character_set_server=latin2;
|
||||
set global character_set_server=latin1; # back
|
||||
|
||||
# Check that SET ONE_SHOT is really one shot
|
||||
|
||||
set one_shot @@character_set_server=latin5;
|
||||
set @@max_join_size=1000;
|
||||
select @@character_set_server;
|
||||
select @@character_set_server;
|
||||
set @@character_set_server=latin5;
|
||||
select @@character_set_server;
|
||||
select @@character_set_server;
|
||||
|
||||
# ONE_SHOT on not charset/collation stuff is not allowed
|
||||
-- error 1382
|
||||
set one_shot max_join_size=10;
|
||||
|
||||
# Test of wrong character set numbers;
|
||||
error 1115;
|
||||
set character_set_client=9999999;
|
||||
error 1273;
|
||||
set collation_server=9999998;
|
||||
|
||||
# This one was contributed by Sergey Petrunia (BUG#3943)
|
||||
|
||||
use test;
|
||||
CREATE TABLE t1 (c1 VARBINARY(255), c2 VARBINARY(255));
|
||||
SET CHARACTER_SET_CLIENT=koi8r,
|
||||
CHARACTER_SET_CONNECTION=cp1251,
|
||||
CHARACTER_SET_RESULTS=koi8r;
|
||||
INSERT INTO t1 (c1, c2) VALUES ('îÕ, ÚÁ ÒÙÂÁÌËÕ','îÕ, ÚÁ ÒÙÂÁÌËÕ');
|
||||
select hex(c1), hex(c2) from t1;
|
||||
sync_slave_with_master;
|
||||
select hex(c1), hex(c2) from t1;
|
||||
|
||||
connection master;
|
||||
# Let's have a look at generated SETs.
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
--exec $MYSQL_BINLOG --short-form $MYSQL_TEST_DIR/var/log/master-bin.000001
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# BUG#6676: Derivation of variables must be correct on slave
|
||||
#
|
||||
connection master;
|
||||
eval create table `t1` (
|
||||
`pk` varchar(10) not null default '',
|
||||
primary key (`pk`)
|
||||
) engine=$engine_type default charset=latin1;
|
||||
set @p=_latin1 'test';
|
||||
update t1 set pk='test' where pk=@p;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
46
mysql-test/extra/rpl_tests/rpl_trig004.test
Normal file
46
mysql-test/extra/rpl_tests/rpl_trig004.test
Normal file
|
|
@ -0,0 +1,46 @@
|
|||
#############################################################################
|
||||
# Original Author: JBM #
|
||||
# Original Date: Aug/09/2005 #
|
||||
#############################################################################
|
||||
# TEST: Use after insert and before inset triggers and stored procdures to #
|
||||
# Update and insert data #
|
||||
#############################################################################
|
||||
|
||||
|
||||
# Begin clean up test section
|
||||
connection master;
|
||||
--disable_warnings
|
||||
--error 0,1360
|
||||
DROP TRIGGER test.t1_bi_t2;
|
||||
DROP TABLE IF EXISTS test.t1;
|
||||
DROP TABLE IF EXISTS test.t2;
|
||||
|
||||
|
||||
eval CREATE TABLE test.t1 (n MEDIUMINT NOT NULL AUTO_INCREMENT, d FLOAT, PRIMARY KEY(n))ENGINE=$engine_type;
|
||||
eval CREATE TABLE test.t2 (n MEDIUMINT NOT NULL, f FLOAT, PRIMARY KEY(n))ENGINE=$engine_type;
|
||||
|
||||
|
||||
delimiter //;
|
||||
CREATE TRIGGER test.t1_bi_t2 BEFORE INSERT ON test.t2 FOR EACH ROW INSERT INTO test.t1 VALUES (NULL, 1.234)//
|
||||
delimiter ;//
|
||||
|
||||
INSERT INTO test.t2 VALUES (1, 0.0);
|
||||
--error 0,1062
|
||||
INSERT INTO test.t2 VALUES (1, 0.0);
|
||||
|
||||
#show binlog events;
|
||||
select * from test.t1;
|
||||
select * from test.t2;
|
||||
sync_slave_with_master;
|
||||
connection slave;
|
||||
select * from test.t1;
|
||||
select * from test.t2;
|
||||
|
||||
connection master;
|
||||
|
||||
DROP TRIGGER test.t1_bi_t2;
|
||||
DROP TABLE test.t1;
|
||||
DROP TABLE test.t2;
|
||||
|
||||
sync_slave_with_master;
|
||||
# End of 5.0 test case
|
||||
54
mysql-test/extra/rpl_tests/rpl_user_variables.test
Normal file
54
mysql-test/extra/rpl_tests/rpl_user_variables.test
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
# row-based and statement binlog difference in result files
|
||||
#
|
||||
# Test of replicating user variables
|
||||
#
|
||||
-- source include/master-slave.inc
|
||||
# Disable PS as the log positions differs
|
||||
--disable_ps_protocol
|
||||
|
||||
|
||||
# Clean up old slave's binlogs.
|
||||
# The slave is started with --log-slave-updates
|
||||
# and this test does SHOW BINLOG EVENTS on the slave's
|
||||
# binlog. But previous tests can influence the current test's
|
||||
# binlog (e.g. a temporary table in the previous test has not
|
||||
# been explicitly deleted, or it has but the slave hasn't had
|
||||
# enough time to catch it before STOP SLAVE,
|
||||
# and at the beginning of the current
|
||||
# test the slave immediately writes DROP TEMPORARY TABLE this_old_table).
|
||||
# We wait for the slave to have written all he wants to the binlog
|
||||
# (otherwise RESET MASTER may come too early).
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
reset master;
|
||||
connection master;
|
||||
|
||||
create table t1(n char(30));
|
||||
set @i1:=12345678901234, @i2:=-12345678901234, @i3:=0, @i4:=-1;
|
||||
set @s1:='This is a test', @r1:=12.5, @r2:=-12.5;
|
||||
set @n1:=null;
|
||||
set @s2:='', @s3:='abc\'def', @s4:= 'abc\\def', @s5:= 'abc''def';
|
||||
insert into t1 values (@i1), (@i2), (@i3), (@i4);
|
||||
insert into t1 values (@r1), (@r2);
|
||||
insert into t1 values (@s1), (@s2), (@s3), (@s4), (@s5);
|
||||
insert into t1 values (@n1);
|
||||
insert into t1 values (@n2); # not explicitely set before
|
||||
insert into t1 values (@a:=0), (@a:=@a+1), (@a:=@a+1);
|
||||
insert into t1 values (@a+(@b:=@a+1));
|
||||
set @q:='abc';
|
||||
insert t1 values (@q), (@q:=concat(@q, 'n1')), (@q:=concat(@q, 'n2'));
|
||||
set @a:=5;
|
||||
insert into t1 values (@a),(@a);
|
||||
# To flush the pending event, we add the following statement. RBR can
|
||||
# concatenate the result of several statements, which SBR cannot.
|
||||
select * from t1 where n = '<nonexistant>';
|
||||
connection master1; # see if variable is reset in binlog when thread changes
|
||||
insert into t1 values (@a),(@a),(@a*5);
|
||||
select * from t1;
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
connection master;
|
||||
drop table t1;
|
||||
sync_slave_with_master;
|
||||
stop slave;
|
||||
Loading…
Add table
Add a link
Reference in a new issue