Merge bk-internal.mysql.com:/home/bk/mysql-5.1
into pippilotta.erinye.com:/shared/home/df/mysql/build/mysql-5.1-build
This commit is contained in:
commit
4530750499
@ -1092,6 +1092,17 @@ static int read_and_execute(bool interactive)
|
||||
if (!interactive)
|
||||
{
|
||||
line=batch_readline(status.line_buff);
|
||||
/*
|
||||
Skip UTF8 Byte Order Marker (BOM) 0xEFBBBF.
|
||||
Editors like "notepad" put this marker in
|
||||
the very beginning of a text file when
|
||||
you save the file using "Unicode UTF-8" format.
|
||||
*/
|
||||
if (!line_number &&
|
||||
(uchar) line[0] == 0xEF &&
|
||||
(uchar) line[1] == 0xBB &&
|
||||
(uchar) line[2] == 0xBF)
|
||||
line+= 3;
|
||||
line_number++;
|
||||
if (!glob_buffer.length())
|
||||
status.query_start_line=line_number;
|
||||
@ -2155,7 +2166,7 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
{
|
||||
char buff[200], time_buff[32], *pos;
|
||||
MYSQL_RES *result;
|
||||
ulong timer, warnings;
|
||||
ulong timer, warnings= 0;
|
||||
uint error= 0;
|
||||
int err= 0;
|
||||
|
||||
@ -2305,7 +2316,8 @@ com_go(String *buffer,char *line __attribute__((unused)))
|
||||
|
||||
end:
|
||||
|
||||
if (show_warnings == 1 && warnings >= 1) /* Show warnings if any */
|
||||
/* Show warnings if any or error occured */
|
||||
if (show_warnings == 1 && (warnings >= 1 || error))
|
||||
print_warnings();
|
||||
|
||||
if (!error && !status.batch &&
|
||||
|
@ -187,7 +187,13 @@ enum ha_extra_function {
|
||||
Inform handler that an "INSERT...ON DUPLICATE KEY UPDATE" will be
|
||||
executed. This condition is unset by HA_EXTRA_NO_IGNORE_DUP_KEY.
|
||||
*/
|
||||
HA_EXTRA_INSERT_WITH_UPDATE
|
||||
HA_EXTRA_INSERT_WITH_UPDATE,
|
||||
/*
|
||||
Orders MERGE handler to attach or detach its child tables. Used at
|
||||
begin and end of a statement.
|
||||
*/
|
||||
HA_EXTRA_ATTACH_CHILDREN,
|
||||
HA_EXTRA_DETACH_CHILDREN
|
||||
};
|
||||
|
||||
/* The following is parameter to ha_panic() */
|
||||
@ -407,9 +413,11 @@ enum ha_base_keytype {
|
||||
#define HA_ERR_RECORD_IS_THE_SAME 169 /* row not actually updated :
|
||||
new values same as the old values */
|
||||
|
||||
#define HA_ERR_LOGGING_IMPOSSIBLE 170 /* It is not possible to log this
|
||||
statement */
|
||||
#define HA_ERR_LAST 170 /*Copy last error nr.*/
|
||||
#define HA_ERR_LOGGING_IMPOSSIBLE 170 /* It is not possible to log this
|
||||
statement */
|
||||
#define HA_ERR_CORRUPT_EVENT 171 /* The event was corrupt, leading to
|
||||
illegal data being read */
|
||||
#define HA_ERR_LAST 171 /*Copy last error nr.*/
|
||||
/* Add error numbers before HA_ERR_LAST and change it accordingly. */
|
||||
#define HA_ERR_ERRORS (HA_ERR_LAST - HA_ERR_FIRST + 1)
|
||||
|
||||
|
@ -69,6 +69,8 @@ typedef struct st_myrg_info
|
||||
uint merge_insert_method;
|
||||
uint tables,options,reclength,keys;
|
||||
my_bool cache_in_use;
|
||||
/* If MERGE children attached to parent. See top comment in ha_myisammrg.cc */
|
||||
my_bool children_attached;
|
||||
LIST open_list;
|
||||
QUEUE by_key;
|
||||
ulong *rec_per_key_part; /* for sql optimizing */
|
||||
@ -80,6 +82,13 @@ typedef struct st_myrg_info
|
||||
extern int myrg_close(MYRG_INFO *file);
|
||||
extern int myrg_delete(MYRG_INFO *file,const uchar *buff);
|
||||
extern MYRG_INFO *myrg_open(const char *name,int mode,int wait_if_locked);
|
||||
extern MYRG_INFO *myrg_parent_open(const char *parent_name,
|
||||
int (*callback)(void*, const char*),
|
||||
void *callback_param);
|
||||
extern int myrg_attach_children(MYRG_INFO *m_info, int handle_locking,
|
||||
MI_INFO *(*callback)(void*),
|
||||
void *callback_param);
|
||||
extern int myrg_detach_children(MYRG_INFO *m_info);
|
||||
extern int myrg_panic(enum ha_panic_function function);
|
||||
extern int myrg_rfirst(MYRG_INFO *file,uchar *buf,int inx);
|
||||
extern int myrg_rlast(MYRG_INFO *file,uchar *buf,int inx);
|
||||
|
@ -134,6 +134,15 @@ drop table t1,t2,t3;
|
||||
# table
|
||||
#
|
||||
CREATE TABLE t1(a INT) ENGINE=BLACKHOLE;
|
||||
# NOTE: After exchanging open_ltable() by open_and_lock_tables() in
|
||||
# handle_delayed_insert() to fix problems with MERGE tables (Bug#26379),
|
||||
# problems with INSERT DELAYED and BLACKHOLE popped up. open_ltable()
|
||||
# does not check if the binlogging capabilities of the statement and the
|
||||
# table match. So the below used to succeed. But since INSERT DELAYED
|
||||
# switches to row-based logging in mixed-mode and BLACKHOLE cannot do
|
||||
# row-based logging, it could not really work. Until this problem is
|
||||
# correctly fixed, we have that error here.
|
||||
--error ER_BINLOG_LOGGING_IMPOSSIBLE
|
||||
INSERT DELAYED INTO t1 VALUES(1);
|
||||
DROP TABLE t1;
|
||||
|
||||
|
15
mysql-test/extra/binlog_tests/database.test
Normal file
15
mysql-test/extra/binlog_tests/database.test
Normal file
@ -0,0 +1,15 @@
|
||||
source include/have_log_bin.inc;
|
||||
source include/not_embedded.inc;
|
||||
|
||||
# Checking that the drop of a database does not replicate anything in
|
||||
# addition to the drop of the database
|
||||
|
||||
reset master;
|
||||
create database testing_1;
|
||||
use testing_1;
|
||||
create table t1 (a int);
|
||||
create function sf1 (a int) returns int return a+1;
|
||||
create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
|
||||
create procedure sp1 (a int) insert into t1 values(a);
|
||||
drop database testing_1;
|
||||
source include/show_binlog_events.inc;
|
@ -0,0 +1,298 @@
|
||||
# the file to be sourced from binlog.binlog_mix_innodb_myisam
|
||||
|
||||
#
|
||||
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
||||
# bug #28960 non-trans temp table changes with insert .. select
|
||||
# not binlogged after rollback
|
||||
#
|
||||
# testing appearence of insert into temp_table in binlog.
|
||||
# There are two branches of execution that require different setup.
|
||||
|
||||
# checking binlog content filled with row-based events due to
|
||||
# a used stored function modifies non-transactional table
|
||||
|
||||
## send_eof() branch
|
||||
|
||||
# prepare
|
||||
|
||||
create temporary table tt (a int unique);
|
||||
create table ti (a int) engine=innodb;
|
||||
reset master;
|
||||
show master status;
|
||||
|
||||
# action
|
||||
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) ;
|
||||
insert into tt select * from ti;
|
||||
rollback;
|
||||
|
||||
# check
|
||||
|
||||
select count(*) from tt /* 2 */;
|
||||
show master status;
|
||||
source include/show_binlog_events.inc;
|
||||
select count(*) from ti /* zero */;
|
||||
insert into ti select * from tt;
|
||||
select * from ti /* that is what slave would miss - bug#28960 */;
|
||||
|
||||
|
||||
## send_error() branch
|
||||
delete from ti;
|
||||
delete from tt where a=1;
|
||||
reset master;
|
||||
show master status;
|
||||
|
||||
# action
|
||||
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) /* to make the dup error in the following */;
|
||||
--error ER_DUP_ENTRY
|
||||
insert into tt select * from ti /* one affected and error */;
|
||||
rollback;
|
||||
|
||||
# check
|
||||
|
||||
show master status;
|
||||
source include/show_binlog_events.inc; # nothing in binlog with row bilog format
|
||||
select count(*) from ti /* zero */;
|
||||
insert into ti select * from tt;
|
||||
select * from tt /* that is what otherwise slave missed - the bug */;
|
||||
|
||||
drop table ti;
|
||||
|
||||
|
||||
#
|
||||
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
||||
#
|
||||
# Testing asserts: if there is a side effect of modifying non-transactional
|
||||
# table thd->no_trans_update.stmt must be TRUE;
|
||||
# the assert is active with debug build
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop function if exists bug27417;
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
# side effect table
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
# target tables
|
||||
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
|
||||
|
||||
delimiter |;
|
||||
create function bug27417(n int)
|
||||
RETURNS int(11)
|
||||
begin
|
||||
insert into t1 values (null);
|
||||
return n;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
|
||||
insert into t2 values (bug27417(1));
|
||||
insert into t2 select bug27417(2);
|
||||
reset master;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t2 values (bug27417(2));
|
||||
source include/show_binlog_events.inc; #only (!) with fixes for #23333 will show there is the query
|
||||
select count(*) from t1 /* must be 3 */;
|
||||
|
||||
reset master;
|
||||
select count(*) from t2;
|
||||
delete from t2 where a=bug27417(3);
|
||||
select count(*) from t2 /* nothing got deleted */;
|
||||
source include/show_binlog_events.inc; # the query must be in regardless of #23333
|
||||
select count(*) from t1 /* must be 5 */;
|
||||
|
||||
--enable_info
|
||||
delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
|
||||
--disable_info
|
||||
select count(*) from t1 /* must be 7 */;
|
||||
|
||||
# function bug27417 remains for the following testing of bug#23333
|
||||
drop table t1,t2;
|
||||
|
||||
#
|
||||
# Bug#23333 using the patch (and the test) for bug#27471
|
||||
# throughout the bug tests
|
||||
# t1 - non-trans side effects gatherer;
|
||||
# t2 - transactional table;
|
||||
#
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
|
||||
CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
|
||||
CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
|
||||
|
||||
#
|
||||
# INSERT
|
||||
#
|
||||
|
||||
# prepare
|
||||
|
||||
insert into t2 values (1);
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t2 values (bug27417(1));
|
||||
|
||||
# check
|
||||
|
||||
source include/show_binlog_events.inc; # must be event of the query
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
|
||||
#
|
||||
# INSERT SELECT
|
||||
#
|
||||
|
||||
# prepare
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t2 values (2);
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t2 select bug27417(1) union select bug27417(2);
|
||||
|
||||
# check
|
||||
|
||||
source include/show_binlog_events.inc; # must be events of the query
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
|
||||
#
|
||||
# UPDATE inc multi-update
|
||||
#
|
||||
|
||||
# prepare
|
||||
delete from t1;
|
||||
insert into t3 values (1,1),(2,3),(3,4);
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
--error ER_DUP_ENTRY
|
||||
update t3 set b=b+bug27417(1);
|
||||
|
||||
# check
|
||||
source include/show_binlog_events.inc; # must be events of the query
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
|
||||
## multi_update::send_eof() branch
|
||||
|
||||
# prepare
|
||||
delete from t3;
|
||||
delete from t4;
|
||||
insert into t3 values (1,1);
|
||||
insert into t4 values (1,1),(2,2);
|
||||
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
--error ER_DUP_ENTRY
|
||||
UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
||||
|
||||
# check
|
||||
source include/show_binlog_events.inc; # the offset must denote there is the query
|
||||
select count(*) from t1 /* must be 4 */;
|
||||
|
||||
## send_error() branch of multi_update
|
||||
|
||||
# prepare
|
||||
delete from t1;
|
||||
delete from t3;
|
||||
delete from t4;
|
||||
insert into t3 values (1,1),(2,2);
|
||||
insert into t4 values (1,1),(2,2);
|
||||
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
--error ER_DUP_ENTRY
|
||||
UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
|
||||
|
||||
# check
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
|
||||
# cleanup
|
||||
drop table t4;
|
||||
|
||||
|
||||
#
|
||||
# DELETE incl multi-delete
|
||||
#
|
||||
|
||||
# prepare
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t3;
|
||||
insert into t2 values (1);
|
||||
insert into t3 values (1,1);
|
||||
create trigger trg_del before delete on t2 for each row
|
||||
insert into t3 values (bug27417(1), 2);
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
--error ER_DUP_ENTRY
|
||||
delete from t2;
|
||||
# check
|
||||
source include/show_binlog_events.inc; # the offset must denote there is the query
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
|
||||
# cleanup
|
||||
drop trigger trg_del;
|
||||
|
||||
# prepare
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t5;
|
||||
create trigger trg_del_t2 after delete on t2 for each row
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (2),(3);
|
||||
insert into t5 values (1),(2);
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
--error ER_DUP_ENTRY
|
||||
delete t2.* from t2,t5 where t2.a=t5.a + 1;
|
||||
|
||||
# check
|
||||
source include/show_binlog_events.inc; # must be events of the query
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
|
||||
|
||||
#
|
||||
# LOAD DATA
|
||||
#
|
||||
|
||||
# prepare
|
||||
delete from t1;
|
||||
create table t4 (a int default 0, b int primary key) engine=innodb;
|
||||
insert into t4 values (0, 17);
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
--error ER_DUP_ENTRY
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
|
||||
# check
|
||||
select * from t4;
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
source include/show_binlog_events.inc; # must be events of the query
|
||||
|
||||
#
|
||||
# bug#23333 cleanup
|
||||
#
|
||||
|
||||
|
||||
drop trigger trg_del_t2;
|
||||
drop table t1,t2,t3,t4,t5;
|
||||
drop function bug27417;
|
@ -410,7 +410,7 @@ binary data';
|
||||
select * from t2 order by f1;
|
||||
select * from t3 order by f1;
|
||||
select * from t4 order by f1;
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
|
||||
connection master;
|
||||
--echo
|
||||
|
@ -10,7 +10,7 @@
|
||||
########### Clean up ################
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17;
|
||||
DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t14a,t15,t16,t17;
|
||||
--enable_query_log
|
||||
--enable_warnings
|
||||
|
||||
@ -662,6 +662,68 @@ sync_slave_with_master;
|
||||
--replace_column 7 CURRENT_TIMESTAMP
|
||||
SELECT * FROM t14 ORDER BY c1;
|
||||
|
||||
####################################################
|
||||
# - Alter Master drop column at end of table #
|
||||
# Expect: column dropped #
|
||||
####################################################
|
||||
|
||||
--echo *** Create t14a on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
eval CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
|
||||
c6 INT DEFAULT '1',
|
||||
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)ENGINE=$engine_type;
|
||||
|
||||
--echo *** Create t14a on Master ***
|
||||
connection master;
|
||||
eval CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
|
||||
) ENGINE=$engine_type;
|
||||
RESET MASTER;
|
||||
|
||||
--echo *** Start Slave ***
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
|
||||
--echo *** Master Data Insert ***
|
||||
connection master;
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
|
||||
(2,@b1,'JOE'),
|
||||
(3,@b1,'QA');
|
||||
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
--echo *** Select on Slave ****
|
||||
sync_slave_with_master;
|
||||
--replace_column 5 CURRENT_TIMESTAMP
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
--echo *** Master Drop c5 ***
|
||||
connection master;
|
||||
ALTER TABLE t14a DROP COLUMN c5;
|
||||
RESET MASTER;
|
||||
|
||||
--echo *** Start Slave ***
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
|
||||
--echo *** Master Data Insert ***
|
||||
connection master;
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
|
||||
INSERT INTO t14a () VALUES(4,@b1),
|
||||
(5,@b1),
|
||||
(6,@b1);
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
|
||||
--echo *** Select on Slave ****
|
||||
sync_slave_with_master;
|
||||
--replace_column 5 CURRENT_TIMESTAMP
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
|
||||
####################################################
|
||||
# - Alter Master Dropping columns from the middle. #
|
||||
@ -736,7 +798,7 @@ connection slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
|
||||
--echo *** Try to insert in master ****
|
||||
@ -744,6 +806,8 @@ connection master;
|
||||
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
|
||||
SELECT * FROM t15 ORDER BY c1;
|
||||
|
||||
#SHOW BINLOG EVENTS;
|
||||
|
||||
--echo *** Try to select from slave ****
|
||||
sync_slave_with_master;
|
||||
--replace_column 7 CURRENT_TIMESTAMP
|
||||
@ -856,7 +920,10 @@ sync_slave_with_master;
|
||||
#### Clean Up ####
|
||||
--disable_warnings
|
||||
--disable_query_log
|
||||
DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t15,t16,t17;
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS t1, t2,t3,t4,t5,t6,t7,t8,t9,t10,t11,t12,t13,t14,t14a,t15,t16,t17;
|
||||
sync_slave_with_master;
|
||||
connection master;
|
||||
--enable_query_log
|
||||
--enable_warnings
|
||||
|
||||
|
@ -215,11 +215,36 @@ sync_slave_with_master;
|
||||
--echo --- on slave ---
|
||||
SELECT * FROM t8 ORDER BY a;
|
||||
|
||||
#
|
||||
# Test conflicting operations when changing in a table referenced by a
|
||||
# foreign key. We'll reuse the above table and just add a table that
|
||||
# references it.
|
||||
#
|
||||
# BUG#31552: Replication breaks when deleting rows from out-of-sync
|
||||
# table without PK
|
||||
|
||||
--echo **** Test for BUG#31552 ****
|
||||
|
||||
--echo **** On Master ****
|
||||
# Clean up t1 so that we can use it.
|
||||
connection master;
|
||||
DELETE FROM t1;
|
||||
sync_slave_with_master;
|
||||
|
||||
# Just to get a clean binary log
|
||||
source include/reset_master_and_slave.inc;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
|
||||
--echo **** On Master ****
|
||||
sync_slave_with_master;
|
||||
DELETE FROM t1 WHERE C1 = 'L';
|
||||
|
||||
connection master;
|
||||
DELETE FROM t1;
|
||||
query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
sync_slave_with_master;
|
||||
let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
|
||||
disable_query_log;
|
||||
eval SELECT "$last_error" AS Last_SQL_Error;
|
||||
enable_query_log;
|
||||
query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
|
||||
#
|
||||
# cleanup
|
||||
@ -227,3 +252,4 @@ SELECT * FROM t8 ORDER BY a;
|
||||
|
||||
connection master;
|
||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
sync_slave_with_master;
|
||||
|
@ -1,17 +1,16 @@
|
||||
|
||||
--disable_query_log
|
||||
--disable_warnings
|
||||
connection slave;
|
||||
STOP SLAVE;
|
||||
source include/wait_for_slave_to_stop.inc;
|
||||
connection master;
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET MASTER;
|
||||
--enable_warnings
|
||||
connection slave;
|
||||
--disable_warnings
|
||||
DROP TABLE IF EXISTS t1;
|
||||
--enable_warnings
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
--enable_warnings
|
||||
--enable_query_log
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
@ -38,3 +37,6 @@ connection master;
|
||||
DROP TABLE t1;
|
||||
let $SERVER_VERSION=`select version()`;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
|
42
mysql-test/include/ctype_regex.inc
Normal file
42
mysql-test/include/ctype_regex.inc
Normal file
@ -0,0 +1,42 @@
|
||||
#
|
||||
# To test a desired collation, set session.collation_connection to
|
||||
# this collation before including this file
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Create a table with two varchar(64) null-able column,
|
||||
# using current values of
|
||||
# @@character_set_connection and @@collation_connection.
|
||||
#
|
||||
|
||||
create table t1 as
|
||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||
union
|
||||
select null, null;
|
||||
show create table t1;
|
||||
delete from t1;
|
||||
|
||||
insert into t1 values('aaa','aaa');
|
||||
insert into t1 values('aaa|qqq','qqq');
|
||||
insert into t1 values('gheis','^[^a-dXYZ]+$');
|
||||
insert into t1 values('aab','^aa?b');
|
||||
insert into t1 values('Baaan','^Ba*n');
|
||||
insert into t1 values('aaa','qqq|aaa');
|
||||
insert into t1 values('qqq','qqq|aaa');
|
||||
|
||||
insert into t1 values('bbb','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq');
|
||||
insert into t1 values('aaa','aba');
|
||||
|
||||
insert into t1 values(null,'abc');
|
||||
insert into t1 values('def',null);
|
||||
insert into t1 values(null,null);
|
||||
insert into t1 values('ghi','ghi[');
|
||||
|
||||
select HIGH_PRIORITY s1 regexp s2 from t1;
|
||||
|
||||
drop table t1;
|
@ -2,6 +2,10 @@
|
||||
# Bug #24200: Provide backwards compatibility mode for 4.x "rollback on
|
||||
# transaction timeout"
|
||||
#
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
--enable_warnings
|
||||
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
create table t1 (a int unsigned not null primary key) engine = innodb;
|
||||
insert into t1 values (1);
|
||||
|
10
mysql-test/include/reset_master_and_slave.inc
Normal file
10
mysql-test/include/reset_master_and_slave.inc
Normal file
@ -0,0 +1,10 @@
|
||||
--echo **** Resetting master and slave ****
|
||||
connection slave;
|
||||
STOP SLAVE;
|
||||
source include/wait_for_slave_to_stop.inc;
|
||||
RESET SLAVE;
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
source include/wait_for_slave_to_start.inc;
|
33
mysql-test/include/wait_for_slave_sql_error.inc
Normal file
33
mysql-test/include/wait_for_slave_sql_error.inc
Normal file
@ -0,0 +1,33 @@
|
||||
###################################################
|
||||
#Author: Sven
|
||||
#Date: 2007-10-09
|
||||
#Purpose: Wait until the slave has an error in the
|
||||
# sql thread, as indicated by
|
||||
# "SHOW SLAVE STATUS", or at most 30
|
||||
# seconds.
|
||||
#Details:
|
||||
# 1) Fill in and setup variables
|
||||
# 2) loop, looking for sql error on slave
|
||||
# 3) If it loops too long, die.
|
||||
####################################################
|
||||
connection slave;
|
||||
let $row_number= 1;
|
||||
let $run= 1;
|
||||
let $counter= 300;
|
||||
|
||||
while ($run)
|
||||
{
|
||||
let $sql_result= query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, $row_number);
|
||||
let $run= `SELECT '$sql_result' = '0'`;
|
||||
if ($run) {
|
||||
real_sleep 0.1;
|
||||
if (!$counter){
|
||||
--echo "Failed while waiting for slave to produce an error in its sql thread"
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
exit;
|
||||
}
|
||||
dec $counter;
|
||||
}
|
||||
}
|
@ -214,17 +214,44 @@ sub collect_one_suite($$)
|
||||
|
||||
mtr_verbose("Collecting: $suite");
|
||||
|
||||
my $combination_file= "combinations";
|
||||
my $combinations = [];
|
||||
|
||||
my $suitedir= "$::glob_mysql_test_dir"; # Default
|
||||
my $combination_file= "$::glob_mysql_test_dir/$combination_file";
|
||||
if ( $suite ne "main" )
|
||||
{
|
||||
$suitedir= mtr_path_exists("$suitedir/suite/$suite",
|
||||
"$suitedir/$suite");
|
||||
mtr_verbose("suitedir: $suitedir");
|
||||
$combination_file= "$suitedir/$combination_file";
|
||||
}
|
||||
|
||||
my $testdir= "$suitedir/t";
|
||||
my $resdir= "$suitedir/r";
|
||||
|
||||
if (!@::opt_combination)
|
||||
{
|
||||
# Read combinations file
|
||||
if ( open(COMB,$combination_file) )
|
||||
{
|
||||
while (<COMB>)
|
||||
{
|
||||
chomp;
|
||||
s/\ +/ /g;
|
||||
push (@$combinations, $_) unless ($_ eq '');
|
||||
}
|
||||
close COMB;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
# take the combination from command-line
|
||||
@$combinations = @::opt_combination;
|
||||
}
|
||||
# Remember last element position
|
||||
my $begin_index = $#{@$cases} + 1;
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# Build a hash of disabled testcases for this suite
|
||||
# ----------------------------------------------------------------------
|
||||
@ -335,6 +362,78 @@ sub collect_one_suite($$)
|
||||
closedir TESTDIR;
|
||||
}
|
||||
|
||||
# ----------------------------------------------------------------------
|
||||
# Proccess combinations only if new tests were added
|
||||
# ----------------------------------------------------------------------
|
||||
if (0 and $combinations && $begin_index <= $#{@$cases})
|
||||
{
|
||||
my $end_index = $#{@$cases};
|
||||
my $is_copy;
|
||||
# Keep original master/slave options
|
||||
my @orig_opts;
|
||||
for (my $idx = $begin_index; $idx <= $end_index; $idx++)
|
||||
{
|
||||
foreach my $param (('master_opt','slave_opt','slave_mi'))
|
||||
{
|
||||
@{$orig_opts[$idx]{$param}} = @{$cases->[$idx]->{$param}};
|
||||
}
|
||||
}
|
||||
my $comb_index = 1;
|
||||
# Copy original test cases
|
||||
foreach my $comb_set (@$combinations)
|
||||
{
|
||||
for (my $idx = $begin_index; $idx <= $end_index; $idx++)
|
||||
{
|
||||
my $test = $cases->[$idx];
|
||||
my $copied_test = {};
|
||||
foreach my $param (keys %{$test})
|
||||
{
|
||||
# Scalar. Copy as is.
|
||||
$copied_test->{$param} = $test->{$param};
|
||||
# Array. Copy reference instead itself
|
||||
if ($param =~ /(master_opt|slave_opt|slave_mi)/)
|
||||
{
|
||||
my $new_arr = [];
|
||||
@$new_arr = @{$orig_opts[$idx]{$param}};
|
||||
$copied_test->{$param} = $new_arr;
|
||||
}
|
||||
elsif ($param =~ /(comment|combinations)/)
|
||||
{
|
||||
$copied_test->{$param} = '';
|
||||
}
|
||||
}
|
||||
if ($is_copy)
|
||||
{
|
||||
push(@$cases, $copied_test);
|
||||
$test = $cases->[$#{@$cases}];
|
||||
}
|
||||
foreach my $comb_opt (split(/ /,$comb_set))
|
||||
{
|
||||
push(@{$test->{'master_opt'}},$comb_opt);
|
||||
push(@{$test->{'slave_opt'}},$comb_opt);
|
||||
# Enable rpl if added option is --binlog-format and test case supports that
|
||||
if ($comb_opt =~ /^--binlog-format=.+$/)
|
||||
{
|
||||
my @opt_pairs = split(/=/, $comb_opt);
|
||||
if ($test->{'binlog_format'} =~ /^$opt_pairs[1]$/ || $test->{'binlog_format'} eq '')
|
||||
{
|
||||
$test->{'skip'} = 0;
|
||||
$test->{'comment'} = '';
|
||||
}
|
||||
else
|
||||
{
|
||||
$test->{'skip'} = 1;
|
||||
$test->{'comment'} = "Requiring binlog format '$test->{'binlog_format'}'";;
|
||||
}
|
||||
}
|
||||
}
|
||||
$test->{'combination'} = $comb_set;
|
||||
}
|
||||
$is_copy = 1;
|
||||
$comb_index++;
|
||||
}
|
||||
}
|
||||
|
||||
return $cases;
|
||||
}
|
||||
|
||||
|
@ -352,7 +352,15 @@ sub mtr_report_stats ($) {
|
||||
|
||||
# BUG#29839 - lowercase_table3.test: Cannot find table test/T1
|
||||
# from the internal data dictiona
|
||||
/Cannot find table test\/BUG29839 from the internal data dictionary/
|
||||
/Cannot find table test\/BUG29839 from the internal data dictionary/ or
|
||||
|
||||
# rpl_extrColmaster_*.test, the slave thread produces warnings
|
||||
# when it get updates to a table that has more columns on the
|
||||
# master
|
||||
/Slave: Unknown column 'c7' in 't15' Error_code: 1054/ or
|
||||
/Slave: Can't DROP 'c7'.* 1091/ or
|
||||
/Slave: Key column 'c6'.* 1072/
|
||||
|
||||
)
|
||||
{
|
||||
next; # Skip these lines
|
||||
|
@ -164,6 +164,8 @@ our $opt_bench= 0;
|
||||
our $opt_small_bench= 0;
|
||||
our $opt_big_test= 0;
|
||||
|
||||
our @opt_combination;
|
||||
|
||||
our @opt_extra_mysqld_opt;
|
||||
|
||||
our $opt_compress;
|
||||
@ -529,6 +531,7 @@ sub command_line_setup () {
|
||||
'skip-im' => \$opt_skip_im,
|
||||
'skip-test=s' => \$opt_skip_test,
|
||||
'big-test' => \$opt_big_test,
|
||||
'combination=s' => \@opt_combination,
|
||||
|
||||
# Specify ports
|
||||
'master_port=i' => \$opt_master_myport,
|
||||
@ -2092,6 +2095,22 @@ sub environment_setup () {
|
||||
$ENV{'EXAMPLE_PLUGIN_OPT'}=
|
||||
($lib_example_plugin ? "--plugin_dir=" . dirname($lib_example_plugin) : "");
|
||||
|
||||
# ----------------------------------------------------
|
||||
# Setup env so childs can execute myisampack and myisamchk
|
||||
# ----------------------------------------------------
|
||||
$ENV{'MYISAMCHK'}= mtr_native_path(mtr_exe_exists(
|
||||
vs_config_dirs('storage/myisam', 'myisamchk'),
|
||||
vs_config_dirs('myisam', 'myisamchk'),
|
||||
"$path_client_bindir/myisamchk",
|
||||
"$glob_basedir/storage/myisam/myisamchk",
|
||||
"$glob_basedir/myisam/myisamchk"));
|
||||
$ENV{'MYISAMPACK'}= mtr_native_path(mtr_exe_exists(
|
||||
vs_config_dirs('storage/myisam', 'myisampack'),
|
||||
vs_config_dirs('myisam', 'myisampack'),
|
||||
"$path_client_bindir/myisampack",
|
||||
"$glob_basedir/storage/myisam/myisampack",
|
||||
"$glob_basedir/myisam/myisampack"));
|
||||
|
||||
# ----------------------------------------------------
|
||||
# We are nice and report a bit about our settings
|
||||
# ----------------------------------------------------
|
||||
@ -5143,6 +5162,8 @@ Options to control what test suites or cases to run
|
||||
skip-im Don't start IM, and skip the IM test cases
|
||||
big-test Set the environment variable BIG_TEST, which can be
|
||||
checked from test cases.
|
||||
combination="ARG1 .. ARG2" Specify a set of "mysqld" arguments for one
|
||||
combination.
|
||||
|
||||
Options that specify ports
|
||||
|
||||
|
@ -56,3 +56,11 @@ show index from t1;
|
||||
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment
|
||||
t1 1 a 1 a A 5 NULL NULL YES BTREE
|
||||
drop table t1;
|
||||
End of 4.1 tests
|
||||
create table t1(a int);
|
||||
analyze table t1 extended;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'extended' at line 1
|
||||
optimize table t1 extended;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'extended' at line 1
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -2619,7 +2619,7 @@ auto fld1 companynr fld3 fld4 fld5 fld6
|
||||
INSERT INTO t2 VALUES (2,011401,37,'breaking','dreaded','Steinberg','W');
|
||||
INSERT INTO t2 VALUES (3,011402,37,'Romans','scholastics','jarring','');
|
||||
INSERT INTO t2 VALUES (4,011403,37,'intercepted','audiology','tinily','');
|
||||
OPTIMIZE TABLE t2 EXTENDED;
|
||||
OPTIMIZE TABLE t2;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t2 optimize status OK
|
||||
SELECT * FROM t2;
|
||||
|
@ -594,7 +594,7 @@ create table t1 (a int);
|
||||
create table t1 select * from t1;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
create table t2 union = (t1) select * from t1;
|
||||
ERROR HY000: You can't specify target table 't1' for update in FROM clause
|
||||
ERROR HY000: 'test.t2' is not BASE TABLE
|
||||
flush tables with read lock;
|
||||
unlock tables;
|
||||
drop table t1;
|
||||
|
@ -178,3 +178,44 @@ hex(a)
|
||||
A2E6
|
||||
FEF7
|
||||
DROP TABLE t1;
|
||||
create table t1 (s1 varchar(5) character set euckr);
|
||||
insert into t1 values (0xA141);
|
||||
insert into t1 values (0xA15A);
|
||||
insert into t1 values (0xA161);
|
||||
insert into t1 values (0xA17A);
|
||||
insert into t1 values (0xA181);
|
||||
insert into t1 values (0xA1FE);
|
||||
insert into t1 values (0xA140);
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1@' for column 's1' at row 1
|
||||
insert into t1 values (0xA15B);
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1[' for column 's1' at row 1
|
||||
insert into t1 values (0xA160);
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1`' for column 's1' at row 1
|
||||
insert into t1 values (0xA17B);
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1{' for column 's1' at row 1
|
||||
insert into t1 values (0xA180);
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1\x80' for column 's1' at row 1
|
||||
insert into t1 values (0xA1FF);
|
||||
Warnings:
|
||||
Warning 1366 Incorrect string value: '\xA1\xFF' for column 's1' at row 1
|
||||
select hex(s1), hex(convert(s1 using utf8)) from t1 order by binary s1;
|
||||
hex(s1) hex(convert(s1 using utf8))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
A141 ECA2A5
|
||||
A15A ECA381
|
||||
A161 ECA382
|
||||
A17A ECA3A5
|
||||
A181 ECA3A6
|
||||
A1FE EFBFA2
|
||||
drop table t1;
|
||||
End of 5.0 tests
|
||||
|
@ -2767,4 +2767,49 @@ a
|
||||
c
|
||||
ch
|
||||
drop table t1;
|
||||
set collation_connection=ucs2_unicode_ci;
|
||||
drop table if exists t1;
|
||||
create table t1 as
|
||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||
union
|
||||
select null, null;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`s1` varchar(64) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci DEFAULT NULL,
|
||||
`s2` varchar(64) CHARACTER SET ucs2 COLLATE ucs2_unicode_ci DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
delete from t1;
|
||||
insert into t1 values('aaa','aaa');
|
||||
insert into t1 values('aaa|qqq','qqq');
|
||||
insert into t1 values('gheis','^[^a-dXYZ]+$');
|
||||
insert into t1 values('aab','^aa?b');
|
||||
insert into t1 values('Baaan','^Ba*n');
|
||||
insert into t1 values('aaa','qqq|aaa');
|
||||
insert into t1 values('qqq','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq');
|
||||
insert into t1 values('aaa','aba');
|
||||
insert into t1 values(null,'abc');
|
||||
insert into t1 values('def',null);
|
||||
insert into t1 values(null,null);
|
||||
insert into t1 values('ghi','ghi[');
|
||||
select HIGH_PRIORITY s1 regexp s2 from t1;
|
||||
s1 regexp s2
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
0
|
||||
0
|
||||
0
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
drop table t1;
|
||||
set names utf8;
|
||||
End for 5.0 tests
|
||||
|
@ -928,6 +928,51 @@ ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_gen
|
||||
select * from t1 where a=if(b<10,_ucs2 0x0062,_ucs2 0x00C0);
|
||||
ERROR HY000: Illegal mix of collations (ascii_general_ci,IMPLICIT) and (ucs2_general_ci,COERCIBLE) for operation '='
|
||||
drop table t1;
|
||||
set collation_connection=ucs2_general_ci;
|
||||
drop table if exists t1;
|
||||
create table t1 as
|
||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||
union
|
||||
select null, null;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`s1` varchar(64) CHARACTER SET ucs2 DEFAULT NULL,
|
||||
`s2` varchar(64) CHARACTER SET ucs2 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
delete from t1;
|
||||
insert into t1 values('aaa','aaa');
|
||||
insert into t1 values('aaa|qqq','qqq');
|
||||
insert into t1 values('gheis','^[^a-dXYZ]+$');
|
||||
insert into t1 values('aab','^aa?b');
|
||||
insert into t1 values('Baaan','^Ba*n');
|
||||
insert into t1 values('aaa','qqq|aaa');
|
||||
insert into t1 values('qqq','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq');
|
||||
insert into t1 values('aaa','aba');
|
||||
insert into t1 values(null,'abc');
|
||||
insert into t1 values('def',null);
|
||||
insert into t1 values(null,null);
|
||||
insert into t1 values('ghi','ghi[');
|
||||
select HIGH_PRIORITY s1 regexp s2 from t1;
|
||||
s1 regexp s2
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
0
|
||||
0
|
||||
0
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
drop table t1;
|
||||
set names latin1;
|
||||
select hex(char(0x41 using ucs2));
|
||||
hex(char(0x41 using ucs2))
|
||||
0041
|
||||
|
@ -267,6 +267,51 @@ b
|
||||
select * from t1 where a = 'b' and a != 'b';
|
||||
a
|
||||
drop table t1;
|
||||
set collation_connection=utf8_general_ci;
|
||||
drop table if exists t1;
|
||||
create table t1 as
|
||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||
union
|
||||
select null, null;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`s1` varchar(64) CHARACTER SET utf8 DEFAULT NULL,
|
||||
`s2` varchar(64) CHARACTER SET utf8 DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
delete from t1;
|
||||
insert into t1 values('aaa','aaa');
|
||||
insert into t1 values('aaa|qqq','qqq');
|
||||
insert into t1 values('gheis','^[^a-dXYZ]+$');
|
||||
insert into t1 values('aab','^aa?b');
|
||||
insert into t1 values('Baaan','^Ba*n');
|
||||
insert into t1 values('aaa','qqq|aaa');
|
||||
insert into t1 values('qqq','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq|aaa');
|
||||
insert into t1 values('bbb','qqq');
|
||||
insert into t1 values('aaa','aba');
|
||||
insert into t1 values(null,'abc');
|
||||
insert into t1 values('def',null);
|
||||
insert into t1 values(null,null);
|
||||
insert into t1 values('ghi','ghi[');
|
||||
select HIGH_PRIORITY s1 regexp s2 from t1;
|
||||
s1 regexp s2
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
1
|
||||
0
|
||||
0
|
||||
0
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
NULL
|
||||
drop table t1;
|
||||
set names utf8;
|
||||
set names utf8;
|
||||
select 'вася' rlike '[[:<:]]вася[[:>:]]';
|
||||
'вася' rlike '[[:<:]]вася[[:>:]]'
|
||||
|
@ -73,13 +73,13 @@ a
|
||||
13
|
||||
DROP TABLE t1;
|
||||
SET @bug20627_old_auto_increment_offset=
|
||||
@@auto_increment_offset= 2;
|
||||
@@auto_increment_offset;
|
||||
SET @bug20627_old_auto_increment_increment=
|
||||
@@auto_increment_increment= 3;
|
||||
@@auto_increment_increment;
|
||||
SET @bug20627_old_session_auto_increment_offset=
|
||||
@@session.auto_increment_offset= 4;
|
||||
@@session.auto_increment_offset;
|
||||
SET @bug20627_old_session_auto_increment_increment=
|
||||
@@session.auto_increment_increment= 5;
|
||||
@@session.auto_increment_increment;
|
||||
SET @@auto_increment_offset= 2;
|
||||
SET @@auto_increment_increment= 3;
|
||||
SET @@session.auto_increment_offset= 4;
|
||||
@ -116,13 +116,13 @@ SET @@session.auto_increment_offset=
|
||||
SET @@session.auto_increment_increment=
|
||||
@bug20627_old_session_auto_increment_increment;
|
||||
SET @bug20830_old_auto_increment_offset=
|
||||
@@auto_increment_offset= 2;
|
||||
@@auto_increment_offset;
|
||||
SET @bug20830_old_auto_increment_increment=
|
||||
@@auto_increment_increment= 3;
|
||||
@@auto_increment_increment;
|
||||
SET @bug20830_old_session_auto_increment_offset=
|
||||
@@session.auto_increment_offset= 4;
|
||||
@@session.auto_increment_offset;
|
||||
SET @bug20830_old_session_auto_increment_increment=
|
||||
@@session.auto_increment_increment= 5;
|
||||
@@session.auto_increment_increment;
|
||||
SET @@auto_increment_offset= 2;
|
||||
SET @@auto_increment_increment= 3;
|
||||
SET @@session.auto_increment_offset= 4;
|
||||
@ -250,11 +250,6 @@ SELECT HEX(a) FROM t1;
|
||||
HEX(a)
|
||||
1
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(c1 INT) ENGINE=MyISAM;
|
||||
CREATE TABLE t2(c1 INT) ENGINE=MERGE UNION=(t1);
|
||||
INSERT DELAYED INTO t2 VALUES(1);
|
||||
ERROR HY000: Table storage engine for 't2' doesn't have this option
|
||||
DROP TABLE t1, t2;
|
||||
DROP TABLE IF EXISTS t1,t2;
|
||||
SET SQL_MODE='NO_AUTO_VALUE_ON_ZERO';
|
||||
CREATE TABLE `t1` (
|
||||
|
@ -1,5 +1,17 @@
|
||||
drop table if exists t1;
|
||||
create table t1 (s1 char(64),s2 char(64));
|
||||
set names latin1;
|
||||
drop table if exists t1;
|
||||
create table t1 as
|
||||
select repeat(' ', 64) as s1, repeat(' ',64) as s2
|
||||
union
|
||||
select null, null;
|
||||
show create table t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`s1` varchar(64) DEFAULT NULL,
|
||||
`s2` varchar(64) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
delete from t1;
|
||||
insert into t1 values('aaa','aaa');
|
||||
insert into t1 values('aaa|qqq','qqq');
|
||||
insert into t1 values('gheis','^[^a-dXYZ]+$');
|
||||
|
@ -73,3 +73,33 @@ find_in_set(binary 'a', 'A,B,C')
|
||||
select find_in_set('1','3,1,');
|
||||
find_in_set('1','3,1,')
|
||||
2
|
||||
End of 4.1 tests
|
||||
SELECT INTERVAL(0.0, NULL);
|
||||
INTERVAL(0.0, NULL)
|
||||
1
|
||||
SELECT INTERVAL(0.0, CAST(NULL AS DECIMAL));
|
||||
INTERVAL(0.0, CAST(NULL AS DECIMAL))
|
||||
1
|
||||
SELECT INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL));
|
||||
INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL))
|
||||
1
|
||||
SELECT INTERVAL(0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
INTERVAL(0.0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL)
|
||||
8
|
||||
SELECT INTERVAL(0.0, CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
|
||||
CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
|
||||
CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL));
|
||||
INTERVAL(0.0, CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
|
||||
CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL),
|
||||
CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL), CAST(NULL AS DECIMAL))
|
||||
8
|
||||
SELECT INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
|
||||
CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
|
||||
CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
|
||||
CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL));
|
||||
INTERVAL(0.0, CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
|
||||
CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
|
||||
CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL),
|
||||
CAST(DATE(NULL) AS DECIMAL), CAST(DATE(NULL) AS DECIMAL))
|
||||
8
|
||||
End of 5.0 tests
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
set session transaction isolation level read committed;
|
||||
create table t1(a int not null) engine=innodb DEFAULT CHARSET=latin1;
|
||||
insert into t1 values (1),(2),(3),(4),(5),(6),(7);
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1, t2;
|
||||
create table t1 (
|
||||
a int, b char(10), c char(10), filler char(10), primary key(a, b(2)), unique key (a, c(2))
|
||||
) character set utf8 engine = innodb;
|
||||
|
@ -1049,6 +1049,19 @@ n d
|
||||
1 30
|
||||
2 20
|
||||
drop table t1,t2;
|
||||
drop table if exists t1, t2;
|
||||
CREATE TABLE t1 (a int, PRIMARY KEY (a));
|
||||
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
create trigger trg_del_t2 after delete on t2 for each row
|
||||
insert into t1 values (1);
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (1),(2);
|
||||
delete t2 from t2;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
select count(*) from t2 /* must be 2 as restored after rollback caused by the error */;
|
||||
count(*)
|
||||
2
|
||||
drop table t1, t2;
|
||||
create table t1 (a int, b int) engine=innodb;
|
||||
insert into t1 values(20,null);
|
||||
select t2.b, ifnull(t2.b,"this is null") from t1 as t2 left join t1 as t3 on
|
||||
@ -1714,10 +1727,10 @@ Variable_name Value
|
||||
Innodb_page_size 16384
|
||||
show status like "Innodb_rows_deleted";
|
||||
Variable_name Value
|
||||
Innodb_rows_deleted 69
|
||||
Innodb_rows_deleted 70
|
||||
show status like "Innodb_rows_inserted";
|
||||
Variable_name Value
|
||||
Innodb_rows_inserted 1080
|
||||
Innodb_rows_inserted 1082
|
||||
show status like "Innodb_rows_updated";
|
||||
Variable_name Value
|
||||
Innodb_rows_updated 885
|
||||
|
@ -391,6 +391,7 @@ id select_type table type possible_keys key key_len ref rows Extra
|
||||
SELECT DISTINCT t1.name, t1.dept FROM t1 WHERE t1.name='rs5';
|
||||
name dept
|
||||
DROP TABLE t1;
|
||||
drop table if exists t1;
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
Variable_name Value
|
||||
innodb_rollback_on_timeout OFF
|
||||
@ -453,6 +454,7 @@ tes 1234
|
||||
drop table test;
|
||||
set global query_cache_type=@save_qcache_type;
|
||||
set global query_cache_size=@save_qcache_size;
|
||||
drop table if exists t1;
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
Variable_name Value
|
||||
innodb_rollback_on_timeout OFF
|
||||
@ -777,6 +779,7 @@ EXPLAIN SELECT SQL_BIG_RESULT b, SUM(c) FROM t1 GROUP BY b;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE t1 ALL NULL NULL NULL NULL 128 Using filesort
|
||||
DROP TABLE t1;
|
||||
drop table if exists t1;
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
Variable_name Value
|
||||
innodb_rollback_on_timeout OFF
|
||||
|
@ -1,3 +1,4 @@
|
||||
drop table if exists t1;
|
||||
show variables like 'innodb_rollback_on_timeout';
|
||||
Variable_name Value
|
||||
innodb_rollback_on_timeout ON
|
||||
|
77
mysql-test/r/merge-big.result
Normal file
77
mysql-test/r/merge-big.result
Normal file
@ -0,0 +1,77 @@
|
||||
drop table if exists t1,t2,t3,t4,t5,t6;
|
||||
#
|
||||
# Bug#26379 - Combination of FLUSH TABLE and REPAIR TABLE
|
||||
# corrupts a MERGE table
|
||||
# Problem #3
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT) ENGINE= MyISAM;
|
||||
LOCK TABLE t1 WRITE;
|
||||
# connection con1
|
||||
SET SESSION debug="+d,sleep_open_and_lock_after_open";
|
||||
INSERT INTO t1 VALUES (1);
|
||||
# connection default
|
||||
# Let INSERT go into thr_multi_lock().
|
||||
# Kick INSERT out of thr_multi_lock().
|
||||
FLUSH TABLES;
|
||||
# Let INSERT go through open_tables() where it sleeps.
|
||||
# Unlock and close table and wait for con1 to close too.
|
||||
FLUSH TABLES;
|
||||
# This should give no result.
|
||||
SELECT * FROM t1;
|
||||
c1
|
||||
UNLOCK TABLES;
|
||||
# connection con1
|
||||
SET SESSION debug="-d,sleep_open_and_lock_after_open";
|
||||
# connection default
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Extra tests for Bug#26379 - Combination of FLUSH TABLE and
|
||||
# REPAIR TABLE corrupts a MERGE table
|
||||
#
|
||||
CREATE TABLE t1 (c1 INT);
|
||||
CREATE TABLE t2 (c1 INT);
|
||||
CREATE TABLE t3 (c1 INT);
|
||||
INSERT INTO t1 VALUES (1);
|
||||
INSERT INTO t2 VALUES (2);
|
||||
INSERT INTO t3 VALUES (3);
|
||||
#
|
||||
# CREATE ... SELECT
|
||||
# try to access parent from another thread.
|
||||
#
|
||||
# connection con1
|
||||
SET SESSION debug="+d,sleep_create_select_before_lock";
|
||||
CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=FIRST SELECT * FROM t3;
|
||||
# connection default
|
||||
# Now try to access the parent.
|
||||
# If 3 is in table, SELECT had to wait.
|
||||
SELECT * FROM t4 ORDER BY c1;
|
||||
c1
|
||||
1
|
||||
2
|
||||
3
|
||||
# connection con1
|
||||
SET SESSION debug="-d,sleep_create_select_before_lock";
|
||||
# connection default
|
||||
# Cleanup for next test.
|
||||
DROP TABLE t4;
|
||||
DELETE FROM t1 WHERE c1 != 1;
|
||||
#
|
||||
# CREATE ... SELECT
|
||||
# try to access child from another thread.
|
||||
#
|
||||
# connection con1
|
||||
SET SESSION debug="+d,sleep_create_select_before_lock";
|
||||
CREATE TABLE t4 (c1 INT) ENGINE=MRG_MYISAM UNION=(t1,t2)
|
||||
INSERT_METHOD=FIRST SELECT * FROM t3;
|
||||
# connection default
|
||||
# Now try to access a child.
|
||||
# If 3 is in table, SELECT had to wait.
|
||||
SELECT * FROM t1 ORDER BY c1;
|
||||
c1
|
||||
1
|
||||
3
|
||||
# connection con1
|
||||
SET SESSION debug="-d,sleep_create_select_before_lock";
|
||||
# connection default
|
||||
DROP TABLE t1, t2, t3, t4;
|
File diff suppressed because it is too large
Load Diff
@ -614,6 +614,7 @@ CREATE TABLE `t2` (
|
||||
`b` int(11) default NULL,
|
||||
PRIMARY KEY (`a`)
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ;
|
||||
set @sav_binlog_format= @@session.binlog_format;
|
||||
set @@session.binlog_format= mixed;
|
||||
insert into t1 values (1,1),(2,2);
|
||||
insert into t2 values (1,1),(4,4);
|
||||
@ -626,7 +627,7 @@ a b
|
||||
4 4
|
||||
show master status /* there must be the UPDATE query event */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 197
|
||||
master-bin.000001 268
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,2),(3,4),(4,4);
|
||||
@ -636,6 +637,24 @@ UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
||||
ERROR 23000: Duplicate entry '4' for key 'PRIMARY'
|
||||
show master status /* there must be the UPDATE query event */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 212
|
||||
master-bin.000001 283
|
||||
drop table t1, t2;
|
||||
set @@session.binlog_format= @sav_binlog_format;
|
||||
drop table if exists t1, t2, t3;
|
||||
CREATE TABLE t1 (a int, PRIMARY KEY (a));
|
||||
CREATE TABLE t2 (a int, PRIMARY KEY (a));
|
||||
CREATE TABLE t3 (a int, PRIMARY KEY (a)) ENGINE=MyISAM;
|
||||
create trigger trg_del_t3 before delete on t3 for each row insert into t1 values (1);
|
||||
insert into t2 values (1),(2);
|
||||
insert into t3 values (1),(2);
|
||||
reset master;
|
||||
delete t3.* from t2,t3 where t2.a=t3.a;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
select count(*) from t3 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
drop table t1, t2, t3;
|
||||
end of tests
|
||||
|
@ -606,24 +606,6 @@ select count(*) from t1 where a is null;
|
||||
count(*)
|
||||
2
|
||||
drop table t1;
|
||||
create table t1 (c1 int, index(c1));
|
||||
create table t2 (c1 int, index(c1)) engine=merge union=(t1);
|
||||
insert into t1 values (1);
|
||||
flush tables;
|
||||
select * from t2;
|
||||
c1
|
||||
1
|
||||
flush tables;
|
||||
truncate table t1;
|
||||
insert into t1 values (1);
|
||||
flush tables;
|
||||
select * from t2;
|
||||
c1
|
||||
1
|
||||
truncate table t1;
|
||||
ERROR HY000: MyISAM table 't1' is in use (most likely by a MERGE table). Try FLUSH TABLES.
|
||||
insert into t1 values (1);
|
||||
drop table t1,t2;
|
||||
create table t1 (c1 int, c2 varchar(4) not null default '',
|
||||
key(c2(3))) default charset=utf8;
|
||||
insert into t1 values (1,'A'), (2, 'B'), (3, 'A');
|
||||
@ -1818,6 +1800,14 @@ ALTER TABLE t1 ENABLE KEYS;
|
||||
SHOW TABLE STATUS LIKE 't1';
|
||||
Name Engine Version Row_format Rows Avg_row_length Data_length Max_data_length Index_length Data_free Auto_increment Create_time Update_time Check_time Collation Checksum Create_options Comment
|
||||
t1 MyISAM 10 Fixed 1 # # # 3072 # # # # # # #
|
||||
# Enable keys with parallel repair
|
||||
SET @@myisam_repair_threads=2;
|
||||
ALTER TABLE t1 DISABLE KEYS;
|
||||
ALTER TABLE t1 ENABLE KEYS;
|
||||
SET @@myisam_repair_threads=1;
|
||||
CHECK TABLE t1 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
create table t1 (a int not null, key `a` (a) key_block_size=1024);
|
||||
|
29
mysql-test/r/myisampack.result
Normal file
29
mysql-test/r/myisampack.result
Normal file
@ -0,0 +1,29 @@
|
||||
CREATE TABLE t1(c1 DOUBLE, c2 DOUBLE, c3 DOUBLE, c4 DOUBLE, c5 DOUBLE,
|
||||
c6 DOUBLE, c7 DOUBLE, c8 DOUBLE, c9 DOUBLE, a INT PRIMARY KEY);
|
||||
INSERT INTO t1 VALUES
|
||||
(-3.31168791059336e-06,-3.19054655887874e-06,-1.06528081684847e-05,-1.227278240089e-06,-1.66718069164799e-06,-2.59038972510885e-06,-2.83145227805303e-06,-4.09678491270648e-07,-2.22610091291797e-06,6),
|
||||
(0.0030743000272545,2.53222044316438e-05,2.78674650061845e-05,1.95914465544536e-05,1.7347572525984e-05,1.87513810069614e-05,1.69882826885005e-05,2.44449336987598e-05,1.89914629921774e-05,9),
|
||||
(2.85229319423495e-05,3.05970988282259e-05,3.77161100113133e-05,2.3055238978766e-05,2.08241267364615e-05,2.28009504270553e-05,2.12070165658947e-05,2.84350091565409e-05,2.3366822910704e-05,3),
|
||||
(0,0,0,0,0,0,0,0,0,12),
|
||||
(3.24544577570754e-05,3.44619021870993e-05,4.37561613201124e-05,2.57556808726748e-05,2.3195354640561e-05,2.58532400758869e-05,2.34934241667179e-05,3.1621640063232e-05,2.58229982746189e-05,19),
|
||||
(2.53222044316438e-05,0.00445071933455582,2.97447268116016e-05,2.12379514059868e-05,1.86777776502663e-05,2.0170058676712e-05,1.8946030385445e-05,2.66040037173511e-05,2.09161899668946e-05,20),
|
||||
(3.03462382611645e-05,3.26517930083994e-05,3.5242025468662e-05,2.53219745106391e-05,2.24384532945004e-05,2.4052346047657e-05,2.23865572957053e-05,3.1634313969082e-05,2.48285463481801e-05,21),
|
||||
(1.95914465544536e-05,2.12379514059868e-05,2.27808649037128e-05,0.000341724375366877,1.4512761275113e-05,1.56475828693953e-05,1.44372366441415e-05,2.07952121981765e-05,1.61488256935919e-05,28),
|
||||
(1.7347572525984e-05,1.86777776502663e-05,2.04116907052727e-05,1.4512761275113e-05,0.000432162526082388,1.38116514014465e-05,1.2712914948904e-05,1.82503165178506e-05,1.43043075345922e-05,30),
|
||||
(1.68339762136661e-05,1.77836497166611e-05,2.36328309295222e-05,1.30183423732016e-05,1.18674654241553e-05,1.32467273128652e-05,1.24581739117775e-05,1.55624190959406e-05,1.33010638508213e-05,31),
|
||||
(1.89643062824415e-05,2.06997140070717e-05,2.29045490159364e-05,1.57918175731019e-05,1.39864987449492e-05,1.50580274578455e-05,1.45908734129609e-05,1.95329296993327e-05,1.5814709481221e-05,32),
|
||||
(1.69882826885005e-05,1.8946030385445e-05,2.00820439721439e-05,1.44372366441415e-05,1.2712914948904e-05,1.35209686474184e-05,0.00261563314789896,1.78285095864627e-05,1.46699314500019e-05,34),
|
||||
(2.0278186540684e-05,2.18923409729654e-05,2.39981539939738e-05,1.71774589459438e-05,1.54654355357383e-05,1.62731485707636e-05,1.49253140625051e-05,2.18229800160297e-05,1.71923561673718e-05,35),
|
||||
(2.44449336987598e-05,2.66040037173511e-05,2.84860148925308e-05,2.07952121981765e-05,1.82503165178506e-05,1.97667730441441e-05,1.78285095864627e-05,0.00166478601822712,2.0299952103232e-05,36),
|
||||
(1.89914629921774e-05,2.09161899668946e-05,2.26026841007872e-05,1.61488256935919e-05,1.43043075345922e-05,1.52609063290127e-05,1.46699314500019e-05,2.0299952103232e-05,0.00306670170971682,39),
|
||||
(0,0,0,0,0,0,0,0,0,41),
|
||||
(0,0,0,0,0,0,0,0,0,17),
|
||||
(0,0,0,0,0,0,0,0,0,18),
|
||||
(2.51880677333017e-05,2.63051795435778e-05,2.79874748974906e-05,2.02888886670845e-05,1.8178636318197e-05,1.91308527003585e-05,1.83260023644133e-05,2.4422300558171e-05,1.96411467520551e-05,44),
|
||||
(2.22402118719591e-05,2.37546284320705e-05,2.58463051055541e-05,1.83391609130854e-05,1.6300720519646e-05,1.74559091886791e-05,1.63733785575587e-05,2.26616253279828e-05,1.79541237435621e-05,45),
|
||||
(3.01092775359837e-05,3.23865212934412e-05,4.09444584045994e-05,0,2.15470966302776e-05,2.39082636344032e-05,2.28296706429177e-05,2.9007671511595e-05,2.44201138973326e-05,46);
|
||||
FLUSH TABLES;
|
||||
CHECK TABLE t1 EXTENDED;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check status OK
|
||||
DROP TABLE t1;
|
@ -178,11 +178,13 @@ ERROR at line 1: DELIMITER cannot contain a backslash character
|
||||
1
|
||||
1
|
||||
1
|
||||
This is a file starting with UTF8 BOM 0xEFBBBF
|
||||
This is a file starting with UTF8 BOM 0xEFBBBF
|
||||
End of 5.0 tests
|
||||
WARNING: --server-arg option not supported in this configuration.
|
||||
Warning (Code 1286): Unknown table engine 'nonexistent'
|
||||
Warning (Code 1266): Using storage engine MyISAM for table 't2'
|
||||
Warning (Code 1286): Unknown table engine 'nonexistent'
|
||||
Warning (Code 1286): Unknown table engine 'nonexistent2'
|
||||
Warning (Code 1266): Using storage engine MyISAM for table 't2'
|
||||
Error (Code 1050): Table 't2' already exists
|
||||
drop tables t1, t2;
|
||||
|
@ -326,6 +326,7 @@ flush logs;
|
||||
drop table t1;
|
||||
1
|
||||
drop table t1;
|
||||
shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql
|
||||
End of 5.0 tests
|
||||
flush logs;
|
||||
BUG#31611: Security risk with BINLOG statement
|
||||
|
@ -726,3 +726,11 @@ count(a)
|
||||
3
|
||||
drop table t1;
|
||||
##############################################################
|
||||
CREATE TABLE t1(a INT);
|
||||
INSERT INTO t1 VALUES(0);
|
||||
SELECT 1 FROM t1 GROUP BY (DATE(NULL)) WITH ROLLUP;
|
||||
1
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
|
@ -289,6 +289,13 @@ select * from t1 where a = 4;
|
||||
a b
|
||||
4 4
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (c1 INT, c2 INT, PRIMARY KEY USING BTREE (c1,c2)) ENGINE=MEMORY
|
||||
PARTITION BY KEY(c2,c1) PARTITIONS 4;
|
||||
INSERT INTO t1 VALUES (0,0),(1,1),(2,2),(3,3),(4,4),(5,5),(6,6);
|
||||
SELECT * FROM t1 WHERE c1 = 4;
|
||||
c1 c2
|
||||
4 4
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1 (a int)
|
||||
PARTITION BY LIST (a)
|
||||
PARTITIONS 1
|
||||
@ -1290,4 +1297,14 @@ create table t1
|
||||
partition by key(s1) partitions 3;
|
||||
insert into t1 values (null,null);
|
||||
drop table t1;
|
||||
CREATE TABLE t1(a int)
|
||||
PARTITION BY RANGE (a) (
|
||||
PARTITION p1 VALUES LESS THAN (10),
|
||||
PARTITION p2 VALUES LESS THAN (20)
|
||||
);
|
||||
ALTER TABLE t1 OPTIMIZE PARTITION p1 EXTENDED;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXTENDED' at line 1
|
||||
ALTER TABLE t1 ANALYZE PARTITION p1 EXTENDED;
|
||||
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'EXTENDED' at line 1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
@ -1979,8 +1979,6 @@ a
|
||||
drop table table_25411_a;
|
||||
drop table table_25411_b;
|
||||
DROP TRIGGER IF EXISTS trg;
|
||||
Warnings:
|
||||
Note 1360 Trigger does not exist
|
||||
SHOW CREATE TRIGGER trg;
|
||||
ERROR HY000: Trigger does not exist
|
||||
End of 5.1 tests.
|
||||
|
@ -224,3 +224,10 @@ ERROR 22007: Incorrect date value: '0000-00-00' for column 'a' at row 1
|
||||
SET SQL_MODE=DEFAULT;
|
||||
DROP TABLE t1,t2;
|
||||
End of 5.0 tests
|
||||
create table t1 (a date, primary key (a))engine=memory;
|
||||
insert into t1 values ('0000-01-01'), ('0000-00-01'), ('0001-01-01');
|
||||
select * from t1 where a between '0000-00-01' and '0000-00-02';
|
||||
a
|
||||
0000-00-01
|
||||
drop table t1;
|
||||
End of 5.1 tests
|
||||
|
@ -353,3 +353,14 @@ select @a:=f4, count(f4) from t1 group by 1 desc;
|
||||
2.6 1
|
||||
1.6 4
|
||||
drop table t1;
|
||||
create table t1(a int);
|
||||
insert into t1 values(5),(4),(4),(3),(2),(2),(2),(1);
|
||||
set @rownum := 0;
|
||||
set @rank := 0;
|
||||
set @prev_score := NULL;
|
||||
select @rownum := @rownum + 1 as row,
|
||||
@rank := IF(@prev_score!=a, @rownum, @rank) as rank,
|
||||
@prev_score := a as score
|
||||
from t1 order by score desc;
|
||||
drop table t1;
|
||||
End of 5.1 tests
|
||||
|
@ -1022,4 +1022,11 @@ NULL NULL NULL
|
||||
select updatexml(NULL, NULL, NULL);
|
||||
updatexml(NULL, NULL, NULL)
|
||||
NULL
|
||||
CREATE TABLE t1(a INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (0), (0);
|
||||
SELECT 1 FROM t1 ORDER BY(UPDATEXML(a, '1', '1'));
|
||||
1
|
||||
1
|
||||
1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
BIN
mysql-test/std_data/corrupt-relay-bin.000624
Normal file
BIN
mysql-test/std_data/corrupt-relay-bin.000624
Normal file
Binary file not shown.
56
mysql-test/suite/binlog/r/binlog_database.result
Normal file
56
mysql-test/suite/binlog/r/binlog_database.result
Normal file
@ -0,0 +1,56 @@
|
||||
set binlog_format=statement;
|
||||
reset master;
|
||||
create database testing_1;
|
||||
use testing_1;
|
||||
create table t1 (a int);
|
||||
create function sf1 (a int) returns int return a+1;
|
||||
create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
|
||||
create procedure sp1 (a int) insert into t1 values(a);
|
||||
drop database testing_1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # create database testing_1
|
||||
master-bin.000001 # Query # # use `testing_1`; create table t1 (a int)
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` function sf1 (a int) returns int return a+1
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a)
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` procedure sp1 (a int) insert into t1 values(a)
|
||||
master-bin.000001 # Query # # drop database testing_1
|
||||
set binlog_format=mixed;
|
||||
reset master;
|
||||
create database testing_1;
|
||||
use testing_1;
|
||||
create table t1 (a int);
|
||||
create function sf1 (a int) returns int return a+1;
|
||||
create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
|
||||
create procedure sp1 (a int) insert into t1 values(a);
|
||||
drop database testing_1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # create database testing_1
|
||||
master-bin.000001 # Query # # use `testing_1`; create table t1 (a int)
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` function sf1 (a int) returns int return a+1
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a)
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` procedure sp1 (a int) insert into t1 values(a)
|
||||
master-bin.000001 # Query # # drop database testing_1
|
||||
set binlog_format=row;
|
||||
reset master;
|
||||
create database testing_1;
|
||||
use testing_1;
|
||||
create table t1 (a int);
|
||||
create function sf1 (a int) returns int return a+1;
|
||||
create trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a);
|
||||
create procedure sp1 (a int) insert into t1 values(a);
|
||||
drop database testing_1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # create database testing_1
|
||||
master-bin.000001 # Query # # use `testing_1`; create table t1 (a int)
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` function sf1 (a int) returns int return a+1
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` trigger tr1 before insert on t1 for each row insert into t2 values (2*new.a)
|
||||
master-bin.000001 # Query # # use `testing_1`; CREATE DEFINER=`root`@`localhost` procedure sp1 (a int) insert into t1 values(a)
|
||||
master-bin.000001 # Query # # drop database testing_1
|
||||
show databases;
|
||||
Database
|
||||
information_schema
|
||||
mysql
|
||||
test
|
@ -9,4 +9,135 @@ insert into t2 values (null, null), (null, get_lock("a", 10));
|
||||
select @result /* must be zero either way */;
|
||||
@result
|
||||
0
|
||||
select RELEASE_LOCK("a");
|
||||
RELEASE_LOCK("a")
|
||||
1
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,1),(2,2);
|
||||
begin;
|
||||
update t1 set b=11 where a=2;
|
||||
begin;
|
||||
update t1 set b=b+10;
|
||||
kill query ID;
|
||||
rollback;
|
||||
rollback;
|
||||
select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
begin;
|
||||
delete from t1 where a=2;
|
||||
begin;
|
||||
delete from t1 where a=2;
|
||||
kill query ID;
|
||||
rollback;
|
||||
rollback;
|
||||
select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
drop table if exists t4;
|
||||
create table t4 (a int, b int) engine=innodb;
|
||||
insert into t4 values (3, 3);
|
||||
begin;
|
||||
insert into t1 values (3, 3);
|
||||
begin;
|
||||
insert into t1 select * from t4 for update;
|
||||
kill query ID;
|
||||
rollback;
|
||||
rollback;
|
||||
select * from t1 /* must be the same as before (1,1),(2,2) */;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
drop table t4;
|
||||
create table t4 (a int, b int) ENGINE=MyISAM /* for killing update and delete */;
|
||||
create function bug27563(n int)
|
||||
RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
if @b > 0 then
|
||||
select get_lock("a", 20) into @a;
|
||||
else
|
||||
set @b= 1;
|
||||
end if;
|
||||
return n;
|
||||
end|
|
||||
delete from t4;
|
||||
insert into t4 values (1,1), (1,1);
|
||||
reset master;
|
||||
select get_lock("a", 20);
|
||||
get_lock("a", 20)
|
||||
1
|
||||
set @b= 0;
|
||||
update t4 set b=b + bug27563(b);
|
||||
select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
|
||||
count(*)
|
||||
1
|
||||
kill query ID;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
select * from t4 order by b /* must be (1,1), (1,2) */;
|
||||
a b
|
||||
1 1
|
||||
1 2
|
||||
select @b /* must be 1 at the end of a stmt calling bug27563() */;
|
||||
@b
|
||||
1
|
||||
must have the update query event more to FD
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # User var # # @`b`=0
|
||||
master-bin.000001 # Query # # use `test`; update t4 set b=b + bug27563(b)
|
||||
select
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null
|
||||
1
|
||||
select 0 /* must return 0 to mean the killed query is in */;
|
||||
0
|
||||
0
|
||||
select RELEASE_LOCK("a");
|
||||
RELEASE_LOCK("a")
|
||||
1
|
||||
delete from t4;
|
||||
insert into t4 values (1,1), (2,2);
|
||||
reset master;
|
||||
select get_lock("a", 20);
|
||||
get_lock("a", 20)
|
||||
1
|
||||
set @b= 0;
|
||||
delete from t4 where b=bug27563(1) or b=bug27563(2);
|
||||
select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
|
||||
count(*)
|
||||
1
|
||||
kill query ID;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
select count(*) from t4 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
select @b /* must be 1 at the end of a stmt calling bug27563() */;
|
||||
@b
|
||||
1
|
||||
must have the delete query event more to FD
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # User var # # @`b`=0
|
||||
master-bin.000001 # Query # # use `test`; delete from t4 where b=bug27563(1) or b=bug27563(2)
|
||||
select
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null
|
||||
1
|
||||
select 0 /* must return 0 to mean the killed query is in */;
|
||||
0
|
||||
0
|
||||
select RELEASE_LOCK("a");
|
||||
RELEASE_LOCK("a")
|
||||
1
|
||||
drop table t4;
|
||||
drop function bug27563;
|
||||
drop table t1,t2,t3;
|
||||
end of the tests
|
||||
|
33
mysql-test/suite/binlog/r/binlog_killed_simulate.result
Normal file
33
mysql-test/suite/binlog/r/binlog_killed_simulate.result
Normal file
@ -0,0 +1,33 @@
|
||||
drop table if exists t1,t2;
|
||||
create table t1 (a int) engine=MyISAM;
|
||||
insert into t1 set a=1;
|
||||
reset master;
|
||||
update t1 set a=2 /* will be "killed" after work has been done */;
|
||||
select
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null
|
||||
1
|
||||
select 1 /* must return 1 as query completed before got killed*/;
|
||||
1
|
||||
1
|
||||
create table t2 (a int, b int) ENGINE=MyISAM;
|
||||
reset master;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
||||
ERROR 70100: Query execution was interrupted
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=12
|
||||
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */ ;file_id=1
|
||||
select
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
(@a:=load_file("MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null
|
||||
1
|
||||
select 0 /* must return 0 to mean the killed query is in */;
|
||||
0
|
||||
0
|
||||
drop table t1,t2;
|
||||
end of the tests
|
@ -413,3 +413,236 @@ select
|
||||
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||
1 1
|
||||
drop table t1, t2;
|
||||
create temporary table tt (a int unique);
|
||||
create table ti (a int) engine=innodb;
|
||||
reset master;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) ;
|
||||
insert into tt select * from ti;
|
||||
rollback;
|
||||
Warnings:
|
||||
Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
select count(*) from tt /* 2 */;
|
||||
count(*)
|
||||
2
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 395
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.ti)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.ti)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from ti /* zero */;
|
||||
count(*)
|
||||
0
|
||||
insert into ti select * from tt;
|
||||
select * from ti /* that is what slave would miss - bug#28960 */;
|
||||
a
|
||||
1
|
||||
2
|
||||
delete from ti;
|
||||
delete from tt where a=1;
|
||||
reset master;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) /* to make the dup error in the following */;
|
||||
insert into tt select * from ti /* one affected and error */;
|
||||
ERROR 23000: Duplicate entry '2' for key 'a'
|
||||
rollback;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
select count(*) from ti /* zero */;
|
||||
count(*)
|
||||
0
|
||||
insert into ti select * from tt;
|
||||
select * from tt /* that is what otherwise slave missed - the bug */;
|
||||
a
|
||||
1
|
||||
2
|
||||
drop table ti;
|
||||
drop function if exists bug27417;
|
||||
drop table if exists t1,t2;
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
|
||||
create function bug27417(n int)
|
||||
RETURNS int(11)
|
||||
begin
|
||||
insert into t1 values (null);
|
||||
return n;
|
||||
end|
|
||||
reset master;
|
||||
insert into t2 values (bug27417(1));
|
||||
insert into t2 select bug27417(2);
|
||||
reset master;
|
||||
insert into t2 values (bug27417(2));
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=3
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
|
||||
select count(*) from t1 /* must be 3 */;
|
||||
count(*)
|
||||
3
|
||||
reset master;
|
||||
select count(*) from t2;
|
||||
count(*)
|
||||
2
|
||||
delete from t2 where a=bug27417(3);
|
||||
select count(*) from t2 /* nothing got deleted */;
|
||||
count(*)
|
||||
2
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||
master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
|
||||
select count(*) from t1 /* must be 5 */;
|
||||
count(*)
|
||||
5
|
||||
delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
|
||||
affected rows: 0
|
||||
select count(*) from t1 /* must be 7 */;
|
||||
count(*)
|
||||
7
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
|
||||
CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
|
||||
CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
insert into t2 values (1);
|
||||
reset master;
|
||||
insert into t2 values (bug27417(1));
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=1
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t2 values (2);
|
||||
reset master;
|
||||
insert into t2 select bug27417(1) union select bug27417(2);
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=2
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
count(*)
|
||||
2
|
||||
delete from t1;
|
||||
insert into t3 values (1,1),(2,3),(3,4);
|
||||
reset master;
|
||||
update t3 set b=b+bug27417(1);
|
||||
ERROR 23000: Duplicate entry '4' for key 'b'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||
master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
count(*)
|
||||
2
|
||||
delete from t3;
|
||||
delete from t4;
|
||||
insert into t3 values (1,1);
|
||||
insert into t4 values (1,1),(2,2);
|
||||
reset master;
|
||||
UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 4 */;
|
||||
count(*)
|
||||
4
|
||||
delete from t1;
|
||||
delete from t3;
|
||||
delete from t4;
|
||||
insert into t3 values (1,1),(2,2);
|
||||
insert into t4 values (1,1),(2,2);
|
||||
reset master;
|
||||
UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
drop table t4;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t3;
|
||||
insert into t2 values (1);
|
||||
insert into t3 values (1,1);
|
||||
create trigger trg_del before delete on t2 for each row
|
||||
insert into t3 values (bug27417(1), 2);
|
||||
reset master;
|
||||
delete from t2;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=9
|
||||
master-bin.000001 # Query # # use `test`; delete from t2
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
drop trigger trg_del;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t5;
|
||||
create trigger trg_del_t2 after delete on t2 for each row
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (2),(3);
|
||||
insert into t5 values (1),(2);
|
||||
reset master;
|
||||
delete t2.* from t2,t5 where t2.a=t5.a + 1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
delete from t1;
|
||||
create table t4 (a int default 0, b int primary key) engine=innodb;
|
||||
insert into t4 values (0, 17);
|
||||
reset master;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
|
||||
ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
|
||||
select * from t4;
|
||||
a b
|
||||
0 17
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
count(*)
|
||||
2
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=12
|
||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=1
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
drop trigger trg_del_t2;
|
||||
drop table t1,t2,t3,t4,t5;
|
||||
drop function bug27417;
|
||||
|
@ -124,6 +124,7 @@ master-bin.000001 # Query # # use `test`; replace into t1 select * from t3
|
||||
drop table t1,t2,t3;
|
||||
CREATE TABLE t1(a INT) ENGINE=BLACKHOLE;
|
||||
INSERT DELAYED INTO t1 VALUES(1);
|
||||
ERROR HY000: Binary logging not possible. Message: Row-based format required for this statement, but not allowed by this combination of engines
|
||||
DROP TABLE t1;
|
||||
CREATE TABLE t1(a INT, b INT) ENGINE=BLACKHOLE;
|
||||
DELETE FROM t1 WHERE a=10;
|
||||
|
@ -380,7 +380,8 @@ select
|
||||
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%" @a not like "%#%error_code=%error_code=%"
|
||||
1 1
|
||||
drop table t1, t2;
|
||||
create table tt (a int unique);
|
||||
set @@session.binlog_format=statement;
|
||||
create temporary table tt (a int unique);
|
||||
create table ti (a int) engine=innodb;
|
||||
reset master;
|
||||
show master status;
|
||||
@ -399,18 +400,18 @@ count(*)
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 515
|
||||
show binlog events from 106;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (1)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (2)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into tt select * from ti
|
||||
master-bin.000001 # Query 1 # use `test`; ROLLBACK
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into ti values (1)
|
||||
master-bin.000001 # Query # # use `test`; insert into ti values (2)
|
||||
master-bin.000001 # Query # # use `test`; insert into tt select * from ti
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from ti /* zero */;
|
||||
count(*)
|
||||
0
|
||||
insert into ti select * from tt;
|
||||
select * from ti /* that is what slave would miss - a bug */;
|
||||
select * from ti /* that is what slave would miss - bug#28960 */;
|
||||
a
|
||||
1
|
||||
2
|
||||
@ -431,13 +432,13 @@ Warning 1196 Some non-transactional changed tables couldn't be rolled back
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 589
|
||||
show binlog events from 106;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # use `test`; BEGIN
|
||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (1)
|
||||
master-bin.000001 # Query 1 # use `test`; insert into ti values (2) /* to make the dup error in the following */
|
||||
master-bin.000001 # Query 1 # use `test`; insert into tt select * from ti /* one affected and error */
|
||||
master-bin.000001 # Query 1 # use `test`; ROLLBACK
|
||||
master-bin.000001 # Query # # use `test`; BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into ti values (1)
|
||||
master-bin.000001 # Query # # use `test`; insert into ti values (2) /* to make the dup error in the following */
|
||||
master-bin.000001 # Query # # use `test`; insert into tt select * from ti /* one affected and error */
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from ti /* zero */;
|
||||
count(*)
|
||||
0
|
||||
@ -446,7 +447,7 @@ select * from tt /* that is what otherwise slave missed - the bug */;
|
||||
a
|
||||
1
|
||||
2
|
||||
drop table ti,tt;
|
||||
drop table ti;
|
||||
drop function if exists bug27417;
|
||||
drop table if exists t1,t2;
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
@ -463,6 +464,10 @@ insert into t2 select bug27417(2);
|
||||
reset master;
|
||||
insert into t2 values (bug27417(2));
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=3
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(2))
|
||||
select count(*) from t1 /* must be 3 */;
|
||||
count(*)
|
||||
3
|
||||
@ -474,6 +479,10 @@ delete from t2 where a=bug27417(3);
|
||||
select count(*) from t2 /* nothing got deleted */;
|
||||
count(*)
|
||||
2
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||
master-bin.000001 # Query # # use `test`; delete from t2 where a=bug27417(3)
|
||||
select count(*) from t1 /* must be 5 */;
|
||||
count(*)
|
||||
5
|
||||
@ -482,6 +491,134 @@ affected rows: 0
|
||||
select count(*) from t1 /* must be 7 */;
|
||||
count(*)
|
||||
7
|
||||
drop function bug27417;
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
CREATE TABLE t2 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
CREATE TABLE t3 (a int, PRIMARY KEY (a), b int unique) ENGINE=MyISAM;
|
||||
CREATE TABLE t4 (a int, PRIMARY KEY (a), b int unique) ENGINE=Innodb;
|
||||
CREATE TABLE t5 (a int, PRIMARY KEY (a)) ENGINE=InnoDB;
|
||||
insert into t2 values (1);
|
||||
reset master;
|
||||
insert into t2 values (bug27417(1));
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=1
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (bug27417(1))
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t2 values (2);
|
||||
reset master;
|
||||
insert into t2 select bug27417(1) union select bug27417(2);
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=2
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 select bug27417(1) union select bug27417(2)
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
count(*)
|
||||
2
|
||||
delete from t1;
|
||||
insert into t3 values (1,1),(2,3),(3,4);
|
||||
reset master;
|
||||
update t3 set b=b+bug27417(1);
|
||||
ERROR 23000: Duplicate entry '4' for key 'b'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=4
|
||||
master-bin.000001 # Query # # use `test`; update t3 set b=b+bug27417(1)
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
count(*)
|
||||
2
|
||||
delete from t3;
|
||||
delete from t4;
|
||||
insert into t3 values (1,1);
|
||||
insert into t4 values (1,1),(2,2);
|
||||
reset master;
|
||||
UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */;
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=6
|
||||
master-bin.000001 # Query # # use `test`; UPDATE t4,t3 SET t4.a=t3.a + bug27417(1) /* top level non-ta table */
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 4 */;
|
||||
count(*)
|
||||
4
|
||||
delete from t1;
|
||||
delete from t3;
|
||||
delete from t4;
|
||||
insert into t3 values (1,1),(2,2);
|
||||
insert into t4 values (1,1),(2,2);
|
||||
reset master;
|
||||
UPDATE t3,t4 SET t3.a=t4.a + bug27417(1);
|
||||
ERROR 23000: Duplicate entry '2' for key 'PRIMARY'
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
drop table t4;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t3;
|
||||
insert into t2 values (1);
|
||||
insert into t3 values (1,1);
|
||||
create trigger trg_del before delete on t2 for each row
|
||||
insert into t3 values (bug27417(1), 2);
|
||||
reset master;
|
||||
delete from t2;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=9
|
||||
master-bin.000001 # Query # # use `test`; delete from t2
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
drop trigger trg_del;
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
delete from t5;
|
||||
create trigger trg_del_t2 after delete on t2 for each row
|
||||
insert into t1 values (1);
|
||||
insert into t2 values (2),(3);
|
||||
insert into t5 values (1),(2);
|
||||
reset master;
|
||||
delete t2.* from t2,t5 where t2.a=t5.a + 1;
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; delete t2.* from t2,t5 where t2.a=t5.a + 1
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
select count(*) from t1 /* must be 1 */;
|
||||
count(*)
|
||||
1
|
||||
delete from t1;
|
||||
create table t4 (a int default 0, b int primary key) engine=innodb;
|
||||
insert into t4 values (0, 17);
|
||||
reset master;
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2);
|
||||
ERROR 23000: Duplicate entry '17' for key 'PRIMARY'
|
||||
select * from t4;
|
||||
a b
|
||||
0 17
|
||||
select count(*) from t1 /* must be 2 */;
|
||||
count(*)
|
||||
2
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=1;block_len=12
|
||||
master-bin.000001 # Intvar # # INSERT_ID=10
|
||||
master-bin.000001 # Execute_load_query # # use `test`; load data infile '../std_data_ln/rpl_loaddata.dat' into table t4 (a, @b) set b= @b + bug27417(2) ;file_id=1
|
||||
master-bin.000001 # Query # # use `test`; ROLLBACK
|
||||
drop trigger trg_del_t2;
|
||||
drop table t1,t2,t3,t4,t5;
|
||||
drop function bug27417;
|
||||
set @@session.binlog_format=@@global.binlog_format;
|
||||
end of tests
|
||||
|
12
mysql-test/suite/binlog/t/binlog_database.test
Normal file
12
mysql-test/suite/binlog/t/binlog_database.test
Normal file
@ -0,0 +1,12 @@
|
||||
# A wrapper to test that dropping a database is binlogged
|
||||
# correctly. We test all three modes in the same file to avoid
|
||||
# unecessary server restarts.
|
||||
|
||||
set binlog_format=statement;
|
||||
source extra/binlog_tests/database.test;
|
||||
set binlog_format=mixed;
|
||||
source extra/binlog_tests/database.test;
|
||||
set binlog_format=row;
|
||||
source extra/binlog_tests/database.test;
|
||||
|
||||
show databases;
|
@ -55,194 +55,277 @@ enable_result_log;
|
||||
|
||||
select @result /* must be zero either way */;
|
||||
|
||||
# the functions are either *insensitive* to killing or killing can cause
|
||||
# strange problmes with the error propagation out of SF's stack
|
||||
# Bug#27563, Bug#27565, BUG#24971
|
||||
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog
|
||||
connection con1;
|
||||
select RELEASE_LOCK("a");
|
||||
|
||||
#
|
||||
# TODO: use if's block as regression test for the bugs or remove
|
||||
# bug#27571 asynchronous setting mysql_`query`::error and Query_log_e::error_code
|
||||
#
|
||||
if (0)
|
||||
{
|
||||
|
||||
# checking that killing inside of select loops is safe as before
|
||||
# killing after the loop can be only simulated - another test
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,1),(2,2);
|
||||
|
||||
#
|
||||
# simple update
|
||||
#
|
||||
connection con1;
|
||||
begin; update t1 set b=11 where a=2;
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
begin;
|
||||
send update t1 set b=b+10;
|
||||
|
||||
connection con1;
|
||||
--replace_result $ID ID
|
||||
eval kill query $ID;
|
||||
rollback;
|
||||
|
||||
# Bug #32148 killi query may be ineffective
|
||||
# forced to comment out the test's outcome
|
||||
# and mask out ineffective ER_QUERY_INTERRUPTED
|
||||
# todo1: revert back upon fixing bug#32148
|
||||
# todo2: the tests need refining in that
|
||||
# killing should wait till the victim requested
|
||||
# its lock (wait_condition available in 5.1 tests)
|
||||
|
||||
connection con2;
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
rollback;
|
||||
select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
|
||||
|
||||
#
|
||||
# multi update
|
||||
# commented out as Bug #31807 multi-update,delete killing does not report with ER_QUERY_INTERRUPTED
|
||||
# in the way
|
||||
#
|
||||
# connection con1;
|
||||
# begin; update t1 set b=b+10;
|
||||
|
||||
# connection con2;
|
||||
# send update t1 as t_1,t1 as t_2 set t_1.b=11 where t_2.a=2;
|
||||
|
||||
# connection con1;
|
||||
# --replace_result $ID ID
|
||||
# eval kill query $ID;
|
||||
# rollback;
|
||||
|
||||
# disable_abort_on_error;
|
||||
|
||||
# connection con2;
|
||||
# --error HY000,ER_QUERY_INTERRUPTED
|
||||
# reap;
|
||||
# select * from t1 /* must be the same as before (1,1),(2,2) */;
|
||||
|
||||
# enable_abort_on_error;
|
||||
#
|
||||
# simple delete
|
||||
#
|
||||
connection con1;
|
||||
begin; delete from t1 where a=2;
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
begin;
|
||||
send delete from t1 where a=2;
|
||||
|
||||
connection con1;
|
||||
--replace_result $ID ID
|
||||
eval kill query $ID;
|
||||
rollback;
|
||||
|
||||
connection con2;
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
rollback;
|
||||
# todo1,2 above
|
||||
select * from t1 order by a /* must be the same as before (1,1),(2,2) */;
|
||||
|
||||
|
||||
#
|
||||
# multi delete
|
||||
# the same as for multi-update
|
||||
#
|
||||
# connection con1;
|
||||
# begin; delete from t1 where a=2;
|
||||
|
||||
# connection con2;
|
||||
# send delete t1 from t1 where t1.a=2;
|
||||
|
||||
# connection con1;
|
||||
# --replace_result $ID ID
|
||||
# eval kill query $ID;
|
||||
# rollback;
|
||||
|
||||
# connection con2;
|
||||
# --error 0,ER_QUERY_INTERRUPTED
|
||||
# reap;
|
||||
# select * from t1 /* must be the same as before (1,1),(2,2) */;
|
||||
#
|
||||
# insert select
|
||||
#
|
||||
connection con1;
|
||||
--disable_warnings
|
||||
drop table if exists t4;
|
||||
--enable_warnings
|
||||
create table t4 (a int, b int) engine=innodb;
|
||||
insert into t4 values (3, 3);
|
||||
begin; insert into t1 values (3, 3);
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
begin;
|
||||
send insert into t1 select * from t4 for update;
|
||||
|
||||
connection con1;
|
||||
--replace_result $ID ID
|
||||
eval kill query $ID;
|
||||
rollback;
|
||||
|
||||
connection con2;
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
# todo 1,2 above
|
||||
rollback;
|
||||
select * from t1 /* must be the same as before (1,1),(2,2) */;
|
||||
|
||||
drop table t4; # cleanup for the sub-case
|
||||
|
||||
###
|
||||
## non-ta table case: killing must be recorded in binlog
|
||||
###
|
||||
create table t4 (a int, b int) ENGINE=MyISAM /* for killing update and delete */;
|
||||
|
||||
delimiter |;
|
||||
create function bug27563()
|
||||
create function bug27563(n int)
|
||||
RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
select get_lock("a", 10) into @a;
|
||||
return 1;
|
||||
if @b > 0 then
|
||||
select get_lock("a", 20) into @a;
|
||||
else
|
||||
set @b= 1;
|
||||
end if;
|
||||
return n;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
# the function is sensitive to killing requiring innodb though with wrong client error
|
||||
# TO FIX in BUG#27565; TODO: remove --error 1105 afterwards
|
||||
delimiter |;
|
||||
create function bug27565()
|
||||
RETURNS int(11)
|
||||
DETERMINISTIC
|
||||
begin
|
||||
select a from t1 where a=1 into @a for update;
|
||||
return 1;
|
||||
end|
|
||||
delimiter ;|
|
||||
#
|
||||
# update
|
||||
#
|
||||
|
||||
delete from t4;
|
||||
insert into t4 values (1,1), (1,1);
|
||||
reset master;
|
||||
|
||||
|
||||
### ta table case: killing causes rollback
|
||||
|
||||
# A. autocommit ON
|
||||
connection con1;
|
||||
select get_lock("a", 20);
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
send insert into t1 values (bug27563(),1);
|
||||
set @b= 0;
|
||||
send update t4 set b=b + bug27563(b);
|
||||
|
||||
connection con1;
|
||||
let $wait_condition= select count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
|
||||
source include/wait_condition.inc;
|
||||
select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
|
||||
|
||||
--replace_result $ID ID
|
||||
eval kill query $ID;
|
||||
|
||||
connection con2;
|
||||
# todo (re-record test): after bugs 27563,27565 got fixed affected rows will report zero
|
||||
--enable_info
|
||||
# todo: remove 0 return after fixing Bug#27563
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
reap; ### pb: wrong error
|
||||
--disable_info
|
||||
###--replace_column 2 # 5 #
|
||||
### show binlog events from 98 /* nothing in binlog unless Bug#27563 */;
|
||||
show master status /* must be only FD event unless Bug#27563 */;
|
||||
select count(*) from t1 /* must be zero unless Bug#27563 */;
|
||||
|
||||
# M. multi-statement-ta
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
begin;
|
||||
send insert into t1 values (bug27563(),1);
|
||||
|
||||
connection con1;
|
||||
eval kill query $ID;
|
||||
connection con2;
|
||||
# todo (re-record test): after bugs 27563,27565 got fixed affected rows will report zero
|
||||
--enable_info
|
||||
# todo: remove 0 return after fixing Bug#27563
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
--error ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
--disable_info
|
||||
select count(*) from t1 /* must be zero unless Bug#27563 */;
|
||||
commit;
|
||||
select * from t4 order by b /* must be (1,1), (1,2) */;
|
||||
select @b /* must be 1 at the end of a stmt calling bug27563() */;
|
||||
--echo must have the update query event more to FD
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
# a proof the query is binlogged with an error
|
||||
|
||||
### non-ta table case: killing must be recorded in binlog
|
||||
|
||||
reset master;
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
send insert into t2 values (bug27563(),1);
|
||||
|
||||
connection con1;
|
||||
eval kill query $ID;
|
||||
|
||||
connection con2;
|
||||
# todo: remove 0 return after fixing Bug#27563
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
select count(*) from t2 /* must be one */;
|
||||
#show binlog events from 98 /* must have the insert on non-ta table */;
|
||||
show master status /* must have the insert event more to FD */;
|
||||
# the value of the error flag of KILLED_QUERY is tested further
|
||||
--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
|
||||
eval select $error_code /* must return 0 to mean the killed query is in */;
|
||||
|
||||
# cleanup for the sub-case
|
||||
connection con1;
|
||||
select RELEASE_LOCK("a");
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
|
||||
### test with effective killing of SF()
|
||||
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,1);
|
||||
insert into t2 values (1,1);
|
||||
|
||||
#
|
||||
# Bug#27565
|
||||
# test where KILL is propagated as error to the top level
|
||||
# still another bug with the error message to the user
|
||||
# todo: fix reexecute the result file after fixing
|
||||
#
|
||||
begin; update t1 set b=0 where a=1;
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
send update t2 set b=bug27565()-1 where a=1;
|
||||
|
||||
connection con1;
|
||||
eval kill query $ID;
|
||||
commit;
|
||||
|
||||
connection con2;
|
||||
# todo: fix Bug #27565 killed query of SF() is not reported correctly and
|
||||
# remove 1105 (wrong)
|
||||
#--error ER_QUERY_INTERRUPTED
|
||||
--error 1105,ER_QUERY_INTERRUPTED
|
||||
reap; ### pb: wrong error
|
||||
select * from t1 /* must be: (1,0) */;
|
||||
select * from t2 /* must be as before: (1,1) */;
|
||||
|
||||
## bug#22725 with effective and propagating killing
|
||||
#
|
||||
# top-level ta-table
|
||||
connection con1;
|
||||
delete from t3;
|
||||
# delete
|
||||
#
|
||||
|
||||
delete from t4;
|
||||
insert into t4 values (1,1), (2,2);
|
||||
reset master;
|
||||
begin; update t1 set b=0 where a=1;
|
||||
connection con1;
|
||||
select get_lock("a", 20);
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
# the query won't perform completely since the function gets interrupted
|
||||
send insert into t3 values (0,0),(1,bug27565());
|
||||
set @b= 0;
|
||||
send delete from t4 where b=bug27563(1) or b=bug27563(2);
|
||||
|
||||
connection con1;
|
||||
let $wait_condition= select count(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
|
||||
source include/wait_condition.inc;
|
||||
select count(*) FROM INFORMATION_SCHEMA.PROCESSLIST where state='User lock';
|
||||
--replace_result $ID ID
|
||||
eval kill query $ID;
|
||||
rollback;
|
||||
|
||||
connection con2;
|
||||
# todo: fix Bug #27565 killed query of SF() is not reported correctly and
|
||||
# remove 1105 (wrong)
|
||||
#--error ER_QUERY_INTERRUPTED
|
||||
--error 1105,ER_QUERY_INTERRUPTED
|
||||
reap; ### pb: wrong error
|
||||
select count(*) from t3 /* must be zero */;
|
||||
show master status /* nothing in binlog */;
|
||||
--error ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
select count(*) from t4 /* must be 1 */;
|
||||
select @b /* must be 1 at the end of a stmt calling bug27563() */;
|
||||
--echo must have the delete query event more to FD
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
# top-level non-ta-table
|
||||
# a proof the query is binlogged with an error
|
||||
|
||||
--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
|
||||
eval select $error_code /* must return 0 to mean the killed query is in */;
|
||||
|
||||
# cleanup for the sub-case
|
||||
connection con1;
|
||||
delete from t2;
|
||||
reset master;
|
||||
begin; update t1 set b=0 where a=1;
|
||||
select RELEASE_LOCK("a");
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
|
||||
connection con2;
|
||||
let $ID= `select connection_id()`;
|
||||
# the query won't perform completely since the function gets intrurrupted
|
||||
send insert into t2 values (0,0),(1,bug27565()) /* non-ta t2 */;
|
||||
drop table t4;
|
||||
|
||||
connection con1;
|
||||
eval kill query $ID;
|
||||
rollback;
|
||||
#
|
||||
# load data - see simulation tests
|
||||
#
|
||||
|
||||
connection con2;
|
||||
# todo: fix Bug #27565 killed query of SF() is not reported correctly and
|
||||
# remove 1105 (wrong)
|
||||
#--error ER_QUERY_INTERRUPTED
|
||||
--error 1105,ER_QUERY_INTERRUPTED
|
||||
reap; ### pb: wrong error
|
||||
|
||||
select count(*) from t2 /* count must be one */;
|
||||
show master status /* insert into non-ta must be in binlog */;
|
||||
# bug#27571 cleanup
|
||||
|
||||
drop function bug27563;
|
||||
drop function bug27565;
|
||||
}
|
||||
|
||||
system rm $MYSQLTEST_VARDIR/tmp/kill_query_calling_sp.binlog ;
|
||||
|
||||
#
|
||||
# common cleanup
|
||||
#
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
--echo end of the tests
|
||||
|
@ -0,0 +1 @@
|
||||
--loose-debug=d,simulate_kill_bug27571
|
69
mysql-test/suite/binlog/t/binlog_killed_simulate.test
Normal file
69
mysql-test/suite/binlog/t/binlog_killed_simulate.test
Normal file
@ -0,0 +1,69 @@
|
||||
-- source include/have_debug.inc
|
||||
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||
#
|
||||
# bug#27571 asynchronous setting mysql_$query()'s local error and
|
||||
# Query_log_event::error_code
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
|
||||
#
|
||||
# Checking that killing upon successful row-loop does not affect binlogging
|
||||
#
|
||||
|
||||
create table t1 (a int) engine=MyISAM;
|
||||
insert into t1 set a=1;
|
||||
reset master;
|
||||
|
||||
update t1 set a=2 /* will be "killed" after work has been done */;
|
||||
|
||||
# a proof the query is binlogged with no error
|
||||
#todo: introduce a suite private macro that provides numeric values
|
||||
# for some constants like the offset of the first real event
|
||||
# that is different between severs versions.
|
||||
--exec $MYSQL_BINLOG --start-position=106 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
let $error_code= `select @a like "%#%error_code=0%" /* must return 1 */`;
|
||||
eval select $error_code /* must return 1 as query completed before got killed*/;
|
||||
|
||||
# cleanup for the sub-case
|
||||
system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
|
||||
|
||||
|
||||
#
|
||||
# Checking that killing inside of row-loop for LOAD DATA into
|
||||
# non-transactional table affects binlogging
|
||||
#
|
||||
|
||||
create table t2 (a int, b int) ENGINE=MyISAM;
|
||||
reset master;
|
||||
--error ER_QUERY_INTERRUPTED
|
||||
load data infile '../std_data_ln/rpl_loaddata.dat' into table t2 /* will be "killed" in the middle */;
|
||||
|
||||
|
||||
# a proof the query is binlogged with an error
|
||||
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--exec $MYSQL_BINLOG --start-position=98 $MYSQLTEST_VARDIR/log/master-bin.000001 > $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
|
||||
eval select
|
||||
(@a:=load_file("$MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog"))
|
||||
is not null;
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
let $error_code= `select @a like "%#%error_code=0%" /* must return 0*/`;
|
||||
eval select $error_code /* must return 0 to mean the killed query is in */;
|
||||
|
||||
# cleanup for the sub-case
|
||||
system rm $MYSQLTEST_VARDIR/tmp/binlog_killed_bug27571.binlog;
|
||||
|
||||
|
||||
drop table t1,t2;
|
||||
|
||||
--echo end of the tests
|
@ -31,3 +31,5 @@ eval select
|
||||
@a like "%#%error_code=0%ROLLBACK/*!*/;%ROLLBACK /* added by mysqlbinlog */;%",
|
||||
@a not like "%#%error_code=%error_code=%";
|
||||
drop table t1, t2;
|
||||
|
||||
-- source extra/binlog_tests/mix_innodb_myisam_side_effects.test
|
||||
|
@ -24,123 +24,9 @@ eval select
|
||||
|
||||
drop table t1, t2;
|
||||
|
||||
#
|
||||
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
||||
# bug #28960 non-trans temp table changes with insert .. select
|
||||
# not binlogged after rollback
|
||||
#
|
||||
# testing appearence of insert into temp_table in binlog.
|
||||
# There are two branches of execution that require different setup.
|
||||
set @@session.binlog_format=statement;
|
||||
-- source extra/binlog_tests/mix_innodb_myisam_side_effects.test
|
||||
set @@session.binlog_format=@@global.binlog_format;
|
||||
|
||||
## send_eof() branch
|
||||
|
||||
# prepare
|
||||
|
||||
create table tt (a int unique);
|
||||
create table ti (a int) engine=innodb;
|
||||
reset master;
|
||||
show master status;
|
||||
|
||||
# action
|
||||
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) ;
|
||||
insert into tt select * from ti;
|
||||
rollback;
|
||||
|
||||
# check
|
||||
|
||||
select count(*) from tt /* 2 */;
|
||||
show master status;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 106;
|
||||
select count(*) from ti /* zero */;
|
||||
insert into ti select * from tt;
|
||||
select * from ti /* that is what slave would miss - a bug */;
|
||||
|
||||
|
||||
## send_error() branch
|
||||
delete from ti;
|
||||
delete from tt where a=1;
|
||||
reset master;
|
||||
show master status;
|
||||
|
||||
# action
|
||||
|
||||
begin;
|
||||
insert into ti values (1);
|
||||
insert into ti values (2) /* to make the dup error in the following */;
|
||||
--error ER_DUP_ENTRY
|
||||
insert into tt select * from ti /* one affected and error */;
|
||||
rollback;
|
||||
|
||||
# check
|
||||
|
||||
show master status;
|
||||
--replace_column 2 # 5 #
|
||||
show binlog events from 106;
|
||||
select count(*) from ti /* zero */;
|
||||
insert into ti select * from tt;
|
||||
select * from tt /* that is what otherwise slave missed - the bug */;
|
||||
|
||||
drop table ti,tt;
|
||||
|
||||
|
||||
#
|
||||
# Bug #27417 thd->no_trans_update.stmt lost value inside of SF-exec-stack
|
||||
#
|
||||
# Testing asserts: if there is a side effect of modifying non-transactional
|
||||
# table thd->no_trans_update.stmt must be TRUE;
|
||||
# the assert is active with debug build
|
||||
#
|
||||
|
||||
--disable_warnings
|
||||
drop function if exists bug27417;
|
||||
drop table if exists t1,t2;
|
||||
--enable_warnings
|
||||
# side effect table
|
||||
CREATE TABLE t1 (a int NOT NULL auto_increment primary key) ENGINE=MyISAM;
|
||||
# target tables
|
||||
CREATE TABLE t2 (a int NOT NULL auto_increment, PRIMARY KEY (a));
|
||||
|
||||
delimiter |;
|
||||
create function bug27417(n int)
|
||||
RETURNS int(11)
|
||||
begin
|
||||
insert into t1 values (null);
|
||||
return n;
|
||||
end|
|
||||
delimiter ;|
|
||||
|
||||
reset master;
|
||||
|
||||
# execute
|
||||
|
||||
insert into t2 values (bug27417(1));
|
||||
insert into t2 select bug27417(2);
|
||||
reset master;
|
||||
|
||||
--error ER_DUP_ENTRY
|
||||
insert into t2 values (bug27417(2));
|
||||
#TODO: Andrei: enable this test after 23333 is pushed
|
||||
#show master status; /* only (!) with fixes for #23333 will show there is the query */;
|
||||
select count(*) from t1 /* must be 3 */;
|
||||
|
||||
reset master;
|
||||
select count(*) from t2;
|
||||
delete from t2 where a=bug27417(3);
|
||||
select count(*) from t2 /* nothing got deleted */;
|
||||
#TODO: Andrei: enable this test after 23333 is pushed
|
||||
#show master status; /* the query must be in regardless of #23333 */;
|
||||
select count(*) from t1 /* must be 5 */;
|
||||
|
||||
--enable_info
|
||||
delete t2 from t2 where t2.a=bug27417(100) /* must not affect t2 */;
|
||||
--disable_info
|
||||
select count(*) from t1 /* must be 7 */;
|
||||
|
||||
drop function bug27417;
|
||||
drop table t1,t2;
|
||||
|
||||
--echo end of tests
|
||||
|
@ -9,3 +9,4 @@
|
||||
# Do not use any TAB characters for whitespace.
|
||||
#
|
||||
##############################################################################
|
||||
binlog_multi_engine : Bug#32663 binlog_multi_engine.test fails randomly
|
||||
|
136
mysql-test/suite/manual/r/rpl_replication_delay.result
Normal file
136
mysql-test/suite/manual/r/rpl_replication_delay.result
Normal file
@ -0,0 +1,136 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
show slave status /* Second_behind reports 0 */;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port 9306
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 106
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 106
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master 0
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
drop table if exists t1;
|
||||
Warnings:
|
||||
Note 1051 Unknown table 't1'
|
||||
create table t1 (f1 int);
|
||||
flush logs /* contaminate rli->last_master_timestamp */;
|
||||
lock table t1 write;
|
||||
insert into t1 values (1);
|
||||
show slave status /* bug emulated: reports slave threads starting time about 3*3 not 3 secs */;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port 9306
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 367
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 279
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master 9
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
unlock tables;
|
||||
flush logs /* this time rli->last_master_timestamp is not affected */;
|
||||
lock table t1 write;
|
||||
insert into t1 values (2);
|
||||
show slave status /* reports the correct diff with master query time about 3+3 secs */;;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port 9306
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 455
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 367
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master 7
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
unlock tables;
|
||||
drop table t1;
|
@ -0,0 +1 @@
|
||||
--loose-debug=d,let_first_flush_log_change_timestamp
|
71
mysql-test/suite/manual/t/rpl_replication_delay.test
Normal file
71
mysql-test/suite/manual/t/rpl_replication_delay.test
Normal file
@ -0,0 +1,71 @@
|
||||
#
|
||||
# Testing replication delay reporting (bug#29309)
|
||||
# there is an unavoidable non-determinism in the test
|
||||
# please compare the results with the comments
|
||||
#
|
||||
|
||||
|
||||
source include/master-slave.inc;
|
||||
|
||||
connection master;
|
||||
#connection slave;
|
||||
sync_slave_with_master;
|
||||
--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 #
|
||||
--query_vertical show slave status /* Second_behind reports 0 */;
|
||||
sleep 3;
|
||||
|
||||
### bug emulation
|
||||
|
||||
connection master;
|
||||
drop table if exists t1;
|
||||
create table t1 (f1 int);
|
||||
sleep 3;
|
||||
|
||||
#connection slave;
|
||||
sync_slave_with_master;
|
||||
flush logs /* contaminate rli->last_master_timestamp */;
|
||||
|
||||
connection slave;
|
||||
lock table t1 write;
|
||||
|
||||
connection master;
|
||||
insert into t1 values (1);
|
||||
|
||||
sleep 3;
|
||||
|
||||
connection slave;
|
||||
--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 #
|
||||
--query_vertical show slave status /* bug emulated: reports slave threads starting time about 3*3 not 3 secs */;
|
||||
unlock tables;
|
||||
|
||||
connection master;
|
||||
sync_slave_with_master;
|
||||
|
||||
### bugfix
|
||||
|
||||
|
||||
connection slave;
|
||||
flush logs /* this time rli->last_master_timestamp is not affected */;
|
||||
lock table t1 write;
|
||||
|
||||
connection master;
|
||||
insert into t1 values (2);
|
||||
sleep 3;
|
||||
|
||||
connection slave;
|
||||
--replace_result $DEFAULT_MASTER_PORT DEFAULT_MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 #
|
||||
--query_vertical show slave status /* reports the correct diff with master query time about 3+3 secs */;
|
||||
unlock tables;
|
||||
|
||||
connection master;
|
||||
drop table t1;
|
||||
|
||||
#connection slave;
|
||||
sync_slave_with_master;
|
||||
|
||||
|
||||
# End of tests
|
||||
|
@ -12,7 +12,10 @@
|
||||
partition_03ndb : BUG#16385 2006-03-24 mikael Partitions: crash when updating a range partitioned NDB table
|
||||
|
||||
ndb_partition_error2 : HF is not sure if the test can work as internded on all the platforms
|
||||
ndb_binlog_basic : Bug #32759 2007-11-27 mats ndb_binlog_basic assert failure 'thd->transaction.stmt.modified_non_trans_table'
|
||||
|
||||
# the below testcase have been reworked to avoid the bug, test contains comment, keep bug open
|
||||
#ndb_binlog_ddl_multi : BUG#18976 2006-04-10 kent CRBR: multiple binlog, second binlog may miss schema log events
|
||||
#ndb_binlog_discover : bug#21806 2006-08-24
|
||||
ndb_backup_print : Bug#32357: ndb_backup_print test fails sometimes in pushbuild
|
||||
ndb_dd_backuprestore : Bug#32659 ndb_dd_backuprestore.test fails randomly
|
||||
|
3
mysql-test/suite/rpl/data/rpl_bug28618.dat
Normal file
3
mysql-test/suite/rpl/data/rpl_bug28618.dat
Normal file
@ -0,0 +1,3 @@
|
||||
1|master only
|
||||
2|master only
|
||||
3|master only
|
@ -7,15 +7,15 @@
|
||||
|
||||
--echo ==========MASTER==========
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
sync_slave_with_master;
|
||||
--echo ==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT COUNT(*) FROM t2;
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
connection master;
|
||||
|
||||
|
@ -7,11 +7,11 @@
|
||||
|
||||
--echo ==========MASTER==========
|
||||
SHOW CREATE VIEW v1;
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1 ORDER BY a;
|
||||
sync_slave_with_master;
|
||||
--echo ==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SHOW CREATE VIEW v1;
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1 ORDER BY a;
|
||||
connection master;
|
||||
|
||||
|
@ -54,7 +54,7 @@ DELETE FROM t2 WHERE a = 2;
|
||||
--copy_file ./suite/rpl/data/rpl_mixed.dat $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
|
||||
LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_mixed.dat
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--source suite/rpl/include/rpl_mixed_check_select.inc
|
||||
--source suite/rpl/include/rpl_mixed_clear_tables.inc
|
||||
|
||||
@ -75,7 +75,7 @@ DELETE FROM t1 WHERE a = 2;
|
||||
--echo
|
||||
--echo ******************** SELECT ********************
|
||||
INSERT INTO t1 VALUES(1, 't1, text 1');
|
||||
SELECT * FROM t1 WHERE b <> UUID();
|
||||
SELECT * FROM t1 WHERE b <> UUID() ORDER BY a;
|
||||
--source suite/rpl/include/rpl_mixed_clear_tables.inc
|
||||
|
||||
# JOIN
|
||||
@ -85,8 +85,8 @@ INSERT INTO t1 VALUES(1, 'CCC');
|
||||
INSERT INTO t1 VALUES(2, 'DDD');
|
||||
INSERT INTO t2 VALUES(1, 'DDD');
|
||||
INSERT INTO t2 VALUES(2, 'CCC');
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a;
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b;
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a ORDER BY t1.a,t2.a;
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b ORDER BY t1.a,t2.a;
|
||||
--source suite/rpl/include/rpl_mixed_clear_tables.inc
|
||||
|
||||
# UNION
|
||||
|
@ -1,3 +1,9 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
drop database if exists d1;
|
||||
create database d1;
|
||||
use d1;
|
||||
|
@ -615,6 +615,66 @@ c1 c2 c3 c4 c5 c6 c7
|
||||
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
*** Create t14a on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
|
||||
c6 INT DEFAULT '1',
|
||||
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)ENGINE='InnoDB';
|
||||
*** Create t14a on Master ***
|
||||
CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
|
||||
) ENGINE='InnoDB';
|
||||
RESET MASTER;
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
*** Master Data Insert ***
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
|
||||
(2,@b1,'JOE'),
|
||||
(3,@b1,'QA');
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4 c5
|
||||
1 b1b1b1b1b1b1b1b1 Kyle
|
||||
2 b1b1b1b1b1b1b1b1 JOE
|
||||
3 b1b1b1b1b1b1b1b1 QA
|
||||
*** Select on Slave ****
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4 c5 c6 c7
|
||||
1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
*** Master Drop c5 ***
|
||||
ALTER TABLE t14a DROP COLUMN c5;
|
||||
RESET MASTER;
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
*** Master Data Insert ***
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t14a () VALUES(4,@b1),
|
||||
(5,@b1),
|
||||
(6,@b1);
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4
|
||||
1 b1b1b1b1b1b1b1b1
|
||||
2 b1b1b1b1b1b1b1b1
|
||||
3 b1b1b1b1b1b1b1b1
|
||||
4 b1b1b1b1b1b1b1b1
|
||||
5 b1b1b1b1b1b1b1b1
|
||||
6 b1b1b1b1b1b1b1b1
|
||||
*** Select on Slave ****
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4 c5 c6 c7
|
||||
1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
4 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
|
||||
5 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
|
||||
6 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
|
||||
*** connect to master and drop columns ***
|
||||
ALTER TABLE t14 DROP COLUMN c2;
|
||||
ALTER TABLE t14 DROP COLUMN c4;
|
||||
@ -707,7 +767,7 @@ Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1060
|
||||
Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
*** Try to insert in master ****
|
||||
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
|
||||
@ -723,6 +783,7 @@ c1 c2 c3 c4 c5 c6 c7
|
||||
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
5 2.00 Replication Testing b1b1b1b1b1b1b1b1 Buda 2 CURRENT_TIMESTAMP
|
||||
*** DROP TABLE t15 ***
|
||||
DROP TABLE t15;
|
||||
*** Create t16 on slave ***
|
||||
|
@ -615,6 +615,66 @@ c1 c2 c3 c4 c5 c6 c7
|
||||
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
*** Create t14a on slave ***
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
CREATE TABLE t14a (c1 INT KEY, c4 BLOB, c5 CHAR(5),
|
||||
c6 INT DEFAULT '1',
|
||||
c7 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
|
||||
)ENGINE='MyISAM';
|
||||
*** Create t14a on Master ***
|
||||
CREATE TABLE t14a (c1 INT PRIMARY KEY, c4 BLOB, c5 CHAR(5)
|
||||
) ENGINE='MyISAM';
|
||||
RESET MASTER;
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
*** Master Data Insert ***
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t14a () VALUES(1,@b1,'Kyle'),
|
||||
(2,@b1,'JOE'),
|
||||
(3,@b1,'QA');
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4 c5
|
||||
1 b1b1b1b1b1b1b1b1 Kyle
|
||||
2 b1b1b1b1b1b1b1b1 JOE
|
||||
3 b1b1b1b1b1b1b1b1 QA
|
||||
*** Select on Slave ****
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4 c5 c6 c7
|
||||
1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
*** Master Drop c5 ***
|
||||
ALTER TABLE t14a DROP COLUMN c5;
|
||||
RESET MASTER;
|
||||
*** Start Slave ***
|
||||
START SLAVE;
|
||||
*** Master Data Insert ***
|
||||
set @b1 = 'b1b1b1b1';
|
||||
set @b1 = concat(@b1,@b1);
|
||||
INSERT INTO t14a () VALUES(4,@b1),
|
||||
(5,@b1),
|
||||
(6,@b1);
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4
|
||||
1 b1b1b1b1b1b1b1b1
|
||||
2 b1b1b1b1b1b1b1b1
|
||||
3 b1b1b1b1b1b1b1b1
|
||||
4 b1b1b1b1b1b1b1b1
|
||||
5 b1b1b1b1b1b1b1b1
|
||||
6 b1b1b1b1b1b1b1b1
|
||||
*** Select on Slave ****
|
||||
SELECT * FROM t14a ORDER BY c1;
|
||||
c1 c4 c5 c6 c7
|
||||
1 b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
4 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
|
||||
5 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
|
||||
6 b1b1b1b1b1b1b1b1 NULL 1 CURRENT_TIMESTAMP
|
||||
*** connect to master and drop columns ***
|
||||
ALTER TABLE t14 DROP COLUMN c2;
|
||||
ALTER TABLE t14 DROP COLUMN c4;
|
||||
@ -707,7 +767,7 @@ Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1060
|
||||
Last_SQL_Error Error 'Duplicate column name 'c6'' on query. Default database: 'test'. Query: 'ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5'
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
*** Try to insert in master ****
|
||||
INSERT INTO t15 () VALUES(5,2.00,'Replication Testing',@b1,'Buda',2);
|
||||
@ -723,6 +783,7 @@ c1 c2 c3 c4 c5 c6 c7
|
||||
1 1.00 Replication Testing Extra Col b1b1b1b1b1b1b1b1 Kyle 1 CURRENT_TIMESTAMP
|
||||
2 2.00 This Test Should work b1b1b1b1b1b1b1b1 JOE 1 CURRENT_TIMESTAMP
|
||||
3 3.00 If is does not, I will open a bug b1b1b1b1b1b1b1b1 QA 1 CURRENT_TIMESTAMP
|
||||
5 2.00 Replication Testing b1b1b1b1b1b1b1b1 Buda 2 CURRENT_TIMESTAMP
|
||||
*** DROP TABLE t15 ***
|
||||
DROP TABLE t15;
|
||||
*** Create t16 on slave ***
|
||||
|
@ -440,7 +440,7 @@ f1 f2 f3 f4
|
||||
select * from t4 order by f1;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
1 1 2 second
|
||||
@ -563,7 +563,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -581,7 +581,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -638,7 +638,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -656,7 +656,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -1580,7 +1580,7 @@ f1 f2 f3 f4
|
||||
select * from t4 order by f1;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
1 1 2 second
|
||||
@ -1703,7 +1703,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -1721,7 +1721,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -1778,7 +1778,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -1796,7 +1796,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -2720,7 +2720,7 @@ f1 f2 f3 f4
|
||||
select * from t4 order by f1;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
1 1 2 second
|
||||
@ -2843,7 +2843,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -2861,7 +2861,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -2918,7 +2918,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -2936,7 +2936,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
@ -440,7 +440,7 @@ f1 f2 f3 f4
|
||||
select * from t4 order by f1;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
1 1 2 second
|
||||
@ -563,7 +563,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -581,7 +581,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -638,7 +638,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -656,7 +656,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -1580,7 +1580,7 @@ f1 f2 f3 f4
|
||||
select * from t4 order by f1;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
1 1 2 second
|
||||
@ -1703,7 +1703,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -1721,7 +1721,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -1778,7 +1778,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -1796,7 +1796,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -2720,7 +2720,7 @@ f1 f2 f3 f4
|
||||
select * from t4 order by f1;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
select * from t31 order by f1;
|
||||
select * from t31 order by f3;
|
||||
f1 f2 f3 f4
|
||||
1 1 1 first
|
||||
1 1 2 second
|
||||
@ -2843,7 +2843,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -2861,7 +2861,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 5, test.t10 has type 254
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
@ -2918,7 +2918,7 @@ Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1534
|
||||
Last_Errno 1535
|
||||
Last_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
@ -2936,7 +2936,7 @@ Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 1534
|
||||
Last_SQL_Errno 1535
|
||||
Last_SQL_Error Table definition on master and slave does not match: Column 2 type mismatch - received type 252, test.t11 has type 15
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
|
233
mysql-test/suite/rpl/r/rpl_found_rows.result
Normal file
233
mysql-test/suite/rpl/r/rpl_found_rows.result
Normal file
@ -0,0 +1,233 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
==== 0. Setting it all up ====
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
**** On Master ****
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE logtbl (sect INT, test INT, count INT);
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
#### 1. Using statement mode ####
|
||||
==== 1.1. Simple test ====
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
SELECT FOUND_ROWS() INTO @a;
|
||||
INSERT INTO logtbl VALUES(1,1,@a);
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
1
|
||||
SELECT FOUND_ROWS() INTO @a;
|
||||
INSERT INTO logtbl VALUES(1,2,@a);
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
sect test count
|
||||
1 1 183
|
||||
1 2 3
|
||||
**** On Slave ****
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
sect test count
|
||||
1 1 183
|
||||
1 2 3
|
||||
==== 1.2. Stored procedure ====
|
||||
**** On Master ****
|
||||
CREATE PROCEDURE calc_and_log(sect INT, test INT) BEGIN
|
||||
DECLARE cnt INT;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
SELECT FOUND_ROWS() INTO cnt;
|
||||
INSERT INTO logtbl VALUES(sect,test,cnt);
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
SELECT FOUND_ROWS() INTO cnt;
|
||||
INSERT INTO logtbl VALUES(sect,test+1,cnt);
|
||||
END $$
|
||||
CALL calc_and_log(2,1);
|
||||
a
|
||||
1
|
||||
a
|
||||
7
|
||||
CREATE PROCEDURE just_log(sect INT, test INT, found_rows INT) BEGIN
|
||||
INSERT INTO logtbl VALUES (sect,test,found_rows);
|
||||
END $$
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
SELECT FOUND_ROWS() INTO @found_rows;
|
||||
CALL just_log(2,3,@found_rows);
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
sect test count
|
||||
2 1 3
|
||||
2 2 183
|
||||
2 3 183
|
||||
**** On Slave ****
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
sect test count
|
||||
2 1 3
|
||||
2 2 183
|
||||
2 3 183
|
||||
==== 1.3. Stored functions ====
|
||||
**** On Master ****
|
||||
CREATE FUNCTION log_rows(sect INT, test INT, found_rows INT)
|
||||
RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO logtbl VALUES(sect,test,found_rows);
|
||||
RETURN found_rows;
|
||||
END $$
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
SELECT FOUND_ROWS() INTO @found_rows;
|
||||
SELECT log_rows(3,1,@found_rows), log_rows(3,2,@found_rows);
|
||||
log_rows(3,1,@found_rows) log_rows(3,2,@found_rows)
|
||||
183 183
|
||||
SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
|
||||
sect test count
|
||||
3 1 183
|
||||
3 2 183
|
||||
**** On Slave ****
|
||||
SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
|
||||
sect test count
|
||||
3 1 183
|
||||
3 2 183
|
||||
==== 1.9. Cleanup ====
|
||||
**** On Master ****
|
||||
DELETE FROM logtbl;
|
||||
DROP PROCEDURE just_log;
|
||||
DROP PROCEDURE calc_and_log;
|
||||
DROP FUNCTION log_rows;
|
||||
**** Resetting master and slave ****
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
#### 2. Using mixed mode ####
|
||||
==== 2.1. Checking a procedure ====
|
||||
**** On Master ****
|
||||
SET BINLOG_FORMAT=MIXED;
|
||||
CREATE PROCEDURE just_log(sect INT, test INT) BEGIN
|
||||
INSERT INTO logtbl VALUES (sect,test,FOUND_ROWS());
|
||||
END $$
|
||||
**** On Master 1 ****
|
||||
SET BINLOG_FORMAT=MIXED;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
CALL just_log(1,1);
|
||||
**** On Master ****
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
CALL just_log(1,2);
|
||||
**** On Master 1 ****
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
1
|
||||
CALL just_log(1,3);
|
||||
**** On Master ****
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
CALL just_log(1,4);
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
sect test count
|
||||
1 1 183
|
||||
1 2 183
|
||||
1 3 3
|
||||
1 4 183
|
||||
**** On Slave ****
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
sect test count
|
||||
1 1 183
|
||||
1 2 183
|
||||
1 3 3
|
||||
1 4 183
|
||||
==== 2.1. Checking a stored function ====
|
||||
**** On Master ****
|
||||
CREATE FUNCTION log_rows(sect INT, test INT)
|
||||
RETURNS INT
|
||||
BEGIN
|
||||
DECLARE found_rows INT;
|
||||
SELECT FOUND_ROWS() INTO found_rows;
|
||||
INSERT INTO logtbl VALUES(sect,test,found_rows);
|
||||
RETURN found_rows;
|
||||
END $$
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
1
|
||||
SELECT log_rows(2,1), log_rows(2,2);
|
||||
log_rows(2,1) log_rows(2,2)
|
||||
3 3
|
||||
CREATE TABLE t2 (a INT, b INT);
|
||||
CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO logtbl VALUES (NEW.a, NEW.b, FOUND_ROWS());
|
||||
END $$
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
1
|
||||
INSERT INTO t2 VALUES (2,3), (2,4);
|
||||
DROP TRIGGER t2_tr;
|
||||
CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE dummy INT;
|
||||
SELECT log_rows(NEW.a, NEW.b) INTO dummy;
|
||||
END $$
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
INSERT INTO t2 VALUES (2,5), (2,6);
|
||||
DROP TRIGGER t2_tr;
|
||||
CREATE PROCEDURE log_me_inner(sect INT, test INT)
|
||||
BEGIN
|
||||
DECLARE dummy INT;
|
||||
SELECT log_rows(sect, test) INTO dummy;
|
||||
SELECT log_rows(sect, test+1) INTO dummy;
|
||||
END $$
|
||||
CREATE PROCEDURE log_me(sect INT, test INT)
|
||||
BEGIN
|
||||
CALL log_me_inner(sect,test);
|
||||
END $$
|
||||
CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
|
||||
BEGIN
|
||||
CALL log_me(NEW.a, NEW.b);
|
||||
END $$
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
a
|
||||
7
|
||||
INSERT INTO t2 VALUES (2,5), (2,6);
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
sect test count
|
||||
2 1 3
|
||||
2 2 3
|
||||
2 3 3
|
||||
2 4 3
|
||||
2 5 183
|
||||
2 5 183
|
||||
2 6 183
|
||||
2 6 0
|
||||
2 6 183
|
||||
2 7 0
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
sect test count
|
||||
2 1 3
|
||||
2 2 3
|
||||
2 3 3
|
||||
2 4 3
|
||||
2 5 183
|
||||
2 5 183
|
||||
2 6 183
|
||||
2 6 0
|
||||
2 6 183
|
||||
2 7 0
|
||||
DROP TABLE t1, logtbl;
|
||||
DROP PROCEDURE just_log;
|
||||
DROP PROCEDURE log_me;
|
||||
DROP PROCEDURE log_me_inner;
|
||||
DROP FUNCTION log_rows;
|
71
mysql-test/suite/rpl/r/rpl_idempotency.result
Normal file
71
mysql-test/suite/rpl/r/rpl_idempotency.result
Normal file
@ -0,0 +1,71 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (-1),(-2),(-3);
|
||||
INSERT INTO t2 VALUES (-1),(-2),(-3);
|
||||
DELETE FROM t1 WHERE a = -2;
|
||||
DELETE FROM t2 WHERE a = -2;
|
||||
DELETE FROM t1 WHERE a = -2;
|
||||
DELETE FROM t2 WHERE a = -2;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-1
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-1
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-1
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-1
|
||||
Last_SQL_Error
|
||||
0
|
||||
INSERT IGNORE INTO t1 VALUES (-2);
|
||||
INSERT IGNORE INTO t1 VALUES (-2);
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-2
|
||||
-1
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-2
|
||||
-1
|
||||
Last_SQL_Error
|
||||
0
|
||||
UPDATE t1 SET a = 1 WHERE a = -1;
|
||||
UPDATE t2 SET a = 1 WHERE a = -1;
|
||||
UPDATE t1 SET a = 1 WHERE a = -1;
|
||||
UPDATE t2 SET a = 1 WHERE a = -1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-2
|
||||
1
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
1
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
-2
|
||||
1
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a
|
||||
-3
|
||||
1
|
||||
Last_SQL_Error
|
||||
0
|
||||
DROP TABLE t1, t2;
|
@ -114,30 +114,30 @@ Create Table CREATE TABLE `byrange_tbl` (
|
||||
`filler` varchar(255) DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=latin1 /*!50100 PARTITION BY RANGE (id) SUBPARTITION BY HASH (id) SUBPARTITIONS 2 (PARTITION pa1 VALUES LESS THAN (10) ENGINE = InnoDB, PARTITION pa2 VALUES LESS THAN (20) ENGINE = InnoDB, PARTITION pa3 VALUES LESS THAN (30) ENGINE = InnoDB, PARTITION pa4 VALUES LESS THAN (40) ENGINE = InnoDB, PARTITION pa5 VALUES LESS THAN (50) ENGINE = InnoDB, PARTITION pa6 VALUES LESS THAN (60) ENGINE = InnoDB, PARTITION pa7 VALUES LESS THAN (70) ENGINE = InnoDB, PARTITION pa8 VALUES LESS THAN (80) ENGINE = InnoDB, PARTITION pa9 VALUES LESS THAN (90) ENGINE = InnoDB, PARTITION pa10 VALUES LESS THAN (100) ENGINE = InnoDB, PARTITION pa11 VALUES LESS THAN MAXVALUE ENGINE = InnoDB) */
|
||||
show slave status;
|
||||
Slave_IO_State Waiting for master to send event
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 945470
|
||||
Relay_Log_File slave-relay-bin.000003
|
||||
Relay_Log_Pos 945616
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 945470
|
||||
Relay_Log_Space 945771
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
@ -149,8 +149,8 @@ Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
SELECT count(*) "Slave norm" FROM test.regular_tbl;
|
||||
|
@ -41,26 +41,26 @@ DELETE FROM t2 WHERE b <> UUID();
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
2 t1, text 2
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
2 t1, text 2
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
@ -76,13 +76,13 @@ DELETE FROM t2 WHERE a = 2;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 t2, text 1
|
||||
==========SLAVE===========
|
||||
@ -90,13 +90,13 @@ USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 t2, text 1
|
||||
DELETE FROM t1;
|
||||
@ -104,7 +104,7 @@ DELETE FROM t2;
|
||||
|
||||
******************** LOAD DATA INFILE ********************
|
||||
LOAD DATA INFILE '../tmp/rpl_mixed.dat' INTO TABLE t1 FIELDS TERMINATED BY '|' ;
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
10 line A
|
||||
20 line B
|
||||
@ -113,7 +113,7 @@ a b
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
3
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
10 line A
|
||||
20 line B
|
||||
@ -121,14 +121,14 @@ a b
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
3
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
10 line A
|
||||
20 line B
|
||||
@ -136,7 +136,7 @@ a b
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
@ -153,35 +153,35 @@ DELETE FROM t1 WHERE a = 2;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 11
|
||||
3 t1, text 33
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 11
|
||||
3 t1, text 33
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
|
||||
******************** SELECT ********************
|
||||
INSERT INTO t1 VALUES(1, 't1, text 1');
|
||||
SELECT * FROM t1 WHERE b <> UUID();
|
||||
SELECT * FROM t1 WHERE b <> UUID() ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1
|
||||
DELETE FROM t1;
|
||||
@ -192,11 +192,11 @@ INSERT INTO t1 VALUES(1, 'CCC');
|
||||
INSERT INTO t1 VALUES(2, 'DDD');
|
||||
INSERT INTO t2 VALUES(1, 'DDD');
|
||||
INSERT INTO t2 VALUES(2, 'CCC');
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a;
|
||||
SELECT * FROM t1 LEFT JOIN t2 ON t1.a = t2.a ORDER BY t1.a,t2.a;
|
||||
a b a b
|
||||
1 CCC 1 DDD
|
||||
2 DDD 2 CCC
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b;
|
||||
SELECT * FROM t1 INNER JOIN t2 ON t1.b = t2.b ORDER BY t1.a,t2.a;
|
||||
a b a b
|
||||
1 CCC 2 CCC
|
||||
2 DDD 1 DDD
|
||||
@ -219,50 +219,50 @@ INSERT INTO t1 VALUES(1, 't1, text 1');
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
TRUNCATE t1;
|
||||
==========MASTER==========
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
@ -275,13 +275,13 @@ UPDATE t1 SET b = 't1, text 1 updated' WHERE a = 1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1 updated
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 t2, text 1
|
||||
==========SLAVE===========
|
||||
@ -289,13 +289,13 @@ USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 t1, text 1 updated
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 t2, text 1
|
||||
UPDATE t1, t2 SET t1.b = 'test', t2.b = 'test';
|
||||
@ -303,13 +303,13 @@ UPDATE t1, t2 SET t1.b = 'test', t2.b = 'test';
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
==========SLAVE===========
|
||||
@ -317,13 +317,13 @@ USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
DELETE FROM t1;
|
||||
@ -349,26 +349,26 @@ COMMIT;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (2, 'rollback');
|
||||
@ -377,26 +377,26 @@ ROLLBACK;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (3, 'before savepoint s1');
|
||||
@ -407,27 +407,27 @@ ROLLBACK TO SAVEPOINT s1;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
3 before savepoint s1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
START TRANSACTION;
|
||||
INSERT INTO t1 VALUES (5, 'before savepoint s2');
|
||||
@ -441,7 +441,7 @@ DELETE FROM t1 WHERE a = 7;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
4
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
3 before savepoint s1
|
||||
@ -450,14 +450,14 @@ a b
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
4
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 start
|
||||
3 before savepoint s1
|
||||
@ -466,7 +466,7 @@ a b
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
DELETE FROM t1;
|
||||
DELETE FROM t2;
|
||||
@ -610,28 +610,28 @@ DELETE FROM t1 WHERE a = 202;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
100 test
|
||||
201 test
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
2
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
100 test
|
||||
201 test
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
ALTER PROCEDURE p1 COMMENT 'p1';
|
||||
DROP PROCEDURE p1;
|
||||
@ -649,13 +649,13 @@ INSERT INTO t1 VALUES (1, 'test');
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
==========SLAVE===========
|
||||
@ -663,13 +663,13 @@ USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 test
|
||||
DELETE FROM t1;
|
||||
@ -694,51 +694,51 @@ test_rpl e1 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========MASTER==========
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
ALTER EVENT e1 RENAME TO e2;
|
||||
==========MASTER==========
|
||||
@ -754,26 +754,26 @@ test_rpl e2 @ SYSTEM RECURRING NULL 1 # # NULL SLAVESIDE_DISABLED 1 latin1 latin
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
==========SLAVE===========
|
||||
USE test_rpl;
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
1
|
||||
SELECT * FROM t1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
SELECT COUNT(*) FROM t2;
|
||||
COUNT(*)
|
||||
0
|
||||
SELECT * FROM t2;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
DROP EVENT e2;
|
||||
==========MASTER==========
|
||||
@ -795,7 +795,7 @@ CREATE VIEW v2 AS SELECT * FROM t1 WHERE b <> UUID();
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 1) latin1 latin1_swedish_ci
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
==========SLAVE===========
|
||||
@ -803,7 +803,7 @@ USE test_rpl;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 1) latin1 latin1_swedish_ci
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1 ORDER BY a;
|
||||
a b
|
||||
1 test1
|
||||
ALTER VIEW v1 AS SELECT * FROM t1 WHERE a = 2;
|
||||
@ -811,7 +811,7 @@ ALTER VIEW v1 AS SELECT * FROM t1 WHERE a = 2;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 2) latin1 latin1_swedish_ci
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1 ORDER BY a;
|
||||
a b
|
||||
2 test2
|
||||
==========SLAVE===========
|
||||
@ -819,7 +819,7 @@ USE test_rpl;
|
||||
SHOW CREATE VIEW v1;
|
||||
View Create View character_set_client collation_connection
|
||||
v1 CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `v1` AS select `t1`.`a` AS `a`,`t1`.`b` AS `b` from `t1` where (`t1`.`a` = 2) latin1 latin1_swedish_ci
|
||||
SELECT * FROM v1;
|
||||
SELECT * FROM v1 ORDER BY a;
|
||||
a b
|
||||
2 test2
|
||||
DROP VIEW v1;
|
||||
|
@ -17,13 +17,13 @@ DROP EVENT IF EXISTS e11;
|
||||
CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=myisam;
|
||||
INSERT INTO t1 VALUES (1,1,'1');
|
||||
INSERT INTO t1 VALUES (2,2,UUID());
|
||||
CREATE TABLE t2 (a INT, b INT, c VARCHAR(64)) ENGINE=myisam;
|
||||
CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=myisam;
|
||||
INSERT INTO t2 VALUES (1,1,'1');
|
||||
INSERT INTO t2 VALUES (2,2,UUID());
|
||||
CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=innodb;
|
||||
INSERT INTO t11 VALUES (1,1,'1');
|
||||
INSERT INTO t11 VALUES (2,2,UUID());
|
||||
CREATE TABLE t12 (a INT, b INT, c VARCHAR(64)) ENGINE=innodb;
|
||||
CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=innodb;
|
||||
INSERT INTO t12 VALUES (1,1,'1');
|
||||
INSERT INTO t12 VALUES (2,2,UUID());
|
||||
|
||||
@ -49,21 +49,15 @@ BEGIN
|
||||
UPDATE t12 SET c = '';
|
||||
UPDATE t13 SET c = '';
|
||||
END|
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||
BEGIN
|
||||
DECLARE c INT;
|
||||
SELECT a INTO c FROM t1 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
||||
IF c = 7 THEN
|
||||
ALTER EVENT e1 DISABLE;
|
||||
CALL p1(10, '');
|
||||
END IF;
|
||||
END|
|
||||
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
||||
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||
BEGIN
|
||||
DECLARE c INT;
|
||||
SELECT a INTO c FROM t11 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
||||
IF c = 7 THEN
|
||||
ALTER EVENT e11 DISABLE;
|
||||
CALL p11(10, '');
|
||||
END IF;
|
||||
END|
|
||||
CREATE FUNCTION f1 (x INT) RETURNS VARCHAR(64)
|
||||
BEGIN
|
||||
@ -78,11 +72,11 @@ RETURN f1(x);
|
||||
END|
|
||||
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
|
||||
BEGIN
|
||||
INSERT INTO t1 VALUES (x,x,y);
|
||||
INSERT IGNORE INTO t1 VALUES (x,x,y);
|
||||
END|
|
||||
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
|
||||
BEGIN
|
||||
INSERT INTO t11 VALUES (x,x,y);
|
||||
INSERT IGNORE INTO t11 VALUES (x,x,y);
|
||||
END|
|
||||
|
||||
CREATE TABLE t3 SELECT * FROM v1;
|
||||
@ -110,6 +104,8 @@ INSERT INTO t11 VALUES(7,7,f2(7));
|
||||
INSERT INTO t11 VALUES (103,103,'');
|
||||
|
||||
SET GLOBAL EVENT_SCHEDULER = on;
|
||||
ALTER EVENT e1 ENABLE;
|
||||
ALTER EVENT e11 ENABLE;
|
||||
SET GLOBAL EVENT_SCHEDULER = off;
|
||||
|
||||
SHOW TABLES LIKE 't%';
|
||||
@ -138,8 +134,8 @@ PROCEDURE p1
|
||||
PROCEDURE p11
|
||||
SELECT event_name, status FROM information_schema.events WHERE event_schema='test';
|
||||
event_name status
|
||||
e1 ENABLED
|
||||
e11 ENABLED
|
||||
e1 DISABLED
|
||||
e11 DISABLED
|
||||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
@ -438,6 +434,8 @@ UPDATE t3 SET c='';
|
||||
UPDATE t11 SET c='';
|
||||
UPDATE t12 SET c='';
|
||||
UPDATE t13 SET c='';
|
||||
ALTER TABLE t3 ORDER BY a;
|
||||
ALTER TABLE t13 ORDER BY a;
|
||||
|
||||
|
||||
|
||||
|
@ -27,6 +27,42 @@ STOP SLAVE;
|
||||
START SLAVE;
|
||||
CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||
SHOW STATUS LIKE 'Slave_running';
|
||||
Variable_name Value
|
||||
Slave_running OFF
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_MYPORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running #
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos #
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
|
@ -242,3 +242,34 @@ a b
|
||||
3 1
|
||||
4 4
|
||||
drop table t1,t2;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b SET('master','slave'));
|
||||
INSERT INTO t1 VALUES (1,'master,slave'), (2,'master,slave');
|
||||
**** On Slave ****
|
||||
UPDATE t1 SET a = 5, b = 'slave' WHERE a = 1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
2 master,slave
|
||||
5 slave
|
||||
**** On Master ****
|
||||
UPDATE t1 SET a = 5, b = 'master' WHERE a = 1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
2 master,slave
|
||||
5 master
|
||||
**** On Slave ****
|
||||
Last_SQL_Error
|
||||
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
2 master,slave
|
||||
5 slave
|
||||
DROP TABLE t1;
|
||||
**** On Master ****
|
||||
DROP TABLE t1;
|
||||
|
@ -415,4 +415,23 @@ a b c
|
||||
2 4 8
|
||||
3 6 9
|
||||
99 99 99
|
||||
**** Test for BUG#31552 ****
|
||||
**** On Master ****
|
||||
DELETE FROM t1;
|
||||
**** Resetting master and slave ****
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
|
||||
**** On Master ****
|
||||
DELETE FROM t1 WHERE C1 = 'L';
|
||||
DELETE FROM t1;
|
||||
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
COUNT(*) 0
|
||||
Last_SQL_Error
|
||||
0
|
||||
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
COUNT(*) 0
|
||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
|
@ -415,4 +415,23 @@ a b c
|
||||
2 4 8
|
||||
3 6 9
|
||||
99 99 99
|
||||
**** Test for BUG#31552 ****
|
||||
**** On Master ****
|
||||
DELETE FROM t1;
|
||||
**** Resetting master and slave ****
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
RESET MASTER;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
INSERT INTO t1 VALUES ('K','K'), ('L','L'), ('M','M');
|
||||
**** On Master ****
|
||||
DELETE FROM t1 WHERE C1 = 'L';
|
||||
DELETE FROM t1;
|
||||
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
COUNT(*) 0
|
||||
Last_SQL_Error
|
||||
0
|
||||
SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
COUNT(*) 0
|
||||
DROP TABLE IF EXISTS t1,t2,t3,t4,t5,t6,t7,t8;
|
||||
|
@ -29,8 +29,7 @@ select * from t1;
|
||||
a
|
||||
1
|
||||
2
|
||||
3
|
||||
show slave status;
|
||||
Slave_IO_State Master_Host Master_User Master_Port Connect_Retry Master_Log_File Read_Master_Log_Pos Relay_Log_File Relay_Log_Pos Relay_Master_Log_File Slave_IO_Running Slave_SQL_Running Replicate_Do_DB Replicate_Ignore_DB Replicate_Do_Table Replicate_Ignore_Table Replicate_Wild_Do_Table Replicate_Wild_Ignore_Table Last_Errno Last_Error Skip_Counter Exec_Master_Log_Pos Relay_Log_Space Until_Condition Until_Log_File Until_Log_Pos Master_SSL_Allowed Master_SSL_CA_File Master_SSL_CA_Path Master_SSL_Cert Master_SSL_Cipher Master_SSL_Key Seconds_Behind_Master Master_SSL_Verify_Server_Cert Last_IO_Errno Last_IO_Error Last_SQL_Errno Last_SQL_Error
|
||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 786 # # master-bin.000001 Yes Yes 0 0 786 # None 0 No # No 0 0
|
||||
# 127.0.0.1 root MASTER_PORT 1 master-bin.000001 851 # # master-bin.000001 Yes Yes 0 0 851 # None 0 No # No 0 0
|
||||
drop table t1;
|
||||
|
@ -142,3 +142,211 @@ Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
**** On Master ****
|
||||
DROP TABLE t1, t2;
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
SET AUTOCOMMIT=0;
|
||||
CREATE TABLE t1 (a INT, b VARCHAR(20)) ENGINE=myisam;
|
||||
CREATE TABLE t2 (a INT, b VARCHAR(20)) ENGINE=myisam;
|
||||
CREATE TABLE t3 (a INT, b VARCHAR(20)) ENGINE=myisam;
|
||||
INSERT INTO t1 VALUES (1,'master/slave');
|
||||
INSERT INTO t2 VALUES (1,'master/slave');
|
||||
INSERT INTO t3 VALUES (1,'master/slave');
|
||||
CREATE TRIGGER tr1 AFTER UPDATE on t1 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO t2 VALUES (NEW.a,NEW.b);
|
||||
DELETE FROM t2 WHERE a < NEW.a;
|
||||
END|
|
||||
CREATE TRIGGER tr2 AFTER INSERT on t2 FOR EACH ROW
|
||||
BEGIN
|
||||
UPDATE t3 SET a =2, b = 'master only';
|
||||
END|
|
||||
**** On Slave ****
|
||||
STOP SLAVE;
|
||||
**** On Master ****
|
||||
UPDATE t1 SET a = 2, b = 'master only' WHERE a = 1;
|
||||
DROP TRIGGER tr1;
|
||||
DROP TRIGGER tr2;
|
||||
INSERT INTO t1 VALUES (3,'master/slave');
|
||||
INSERT INTO t2 VALUES (3,'master/slave');
|
||||
INSERT INTO t3 VALUES (3,'master/slave');
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
*** On Slave ***
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
a b
|
||||
1 master/slave
|
||||
3 master/slave
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
a b
|
||||
1 master/slave
|
||||
3 master/slave
|
||||
SELECT * FROM t3 ORDER BY a;
|
||||
a b
|
||||
1 master/slave
|
||||
3 master/slave
|
||||
DROP TABLE t1, t2, t3;
|
||||
**** Case 2: Row binlog format and transactional tables ****
|
||||
*** On Master ***
|
||||
CREATE TABLE t4 (a INT, b VARCHAR(20)) ENGINE=innodb;
|
||||
CREATE TABLE t5 (a INT, b VARCHAR(20)) ENGINE=innodb;
|
||||
CREATE TABLE t6 (a INT, b VARCHAR(20)) ENGINE=innodb;
|
||||
**** On Slave ****
|
||||
STOP SLAVE;
|
||||
*** On Master ***
|
||||
BEGIN;
|
||||
INSERT INTO t4 VALUES (2, 'master only');
|
||||
INSERT INTO t5 VALUES (2, 'master only');
|
||||
INSERT INTO t6 VALUES (2, 'master only');
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO t4 VALUES (3, 'master/slave');
|
||||
INSERT INTO t5 VALUES (3, 'master/slave');
|
||||
INSERT INTO t6 VALUES (3, 'master/slave');
|
||||
COMMIT;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
SELECT * FROM t5 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
SELECT * FROM t6 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
*** On Slave ***
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
SELECT * FROM t5 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
SELECT * FROM t6 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
**** On Slave ****
|
||||
STOP SLAVE;
|
||||
*** On Master ***
|
||||
BEGIN;
|
||||
INSERT INTO t4 VALUES (6, 'master only');
|
||||
INSERT INTO t5 VALUES (6, 'master only');
|
||||
INSERT INTO t6 VALUES (6, 'master only');
|
||||
COMMIT;
|
||||
BEGIN;
|
||||
INSERT INTO t4 VALUES (7, 'master only');
|
||||
INSERT INTO t5 VALUES (7, 'master only');
|
||||
INSERT INTO t6 VALUES (7, 'master only');
|
||||
COMMIT;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
6 master only
|
||||
7 master only
|
||||
SELECT * FROM t5 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
6 master only
|
||||
7 master only
|
||||
SELECT * FROM t6 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
6 master only
|
||||
7 master only
|
||||
*** On Slave ***
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=10;
|
||||
START SLAVE;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
SELECT * FROM t5 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
SELECT * FROM t6 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
STOP SLAVE;
|
||||
SET AUTOCOMMIT=0;
|
||||
INSERT INTO t4 VALUES (4, 'master only');
|
||||
INSERT INTO t5 VALUES (4, 'master only');
|
||||
INSERT INTO t6 VALUES (4, 'master only');
|
||||
COMMIT;
|
||||
INSERT INTO t4 VALUES (5, 'master/slave');
|
||||
INSERT INTO t5 VALUES (5, 'master/slave');
|
||||
INSERT INTO t6 VALUES (5, 'master/slave');
|
||||
COMMIT;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
4 master only
|
||||
5 master/slave
|
||||
6 master only
|
||||
7 master only
|
||||
SELECT * FROM t5 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
4 master only
|
||||
5 master/slave
|
||||
6 master only
|
||||
7 master only
|
||||
SELECT * FROM t6 ORDER BY a;
|
||||
a b
|
||||
2 master only
|
||||
3 master/slave
|
||||
4 master only
|
||||
5 master/slave
|
||||
6 master only
|
||||
7 master only
|
||||
*** On Slave ***
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
SELECT * FROM t4 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
5 master/slave
|
||||
SELECT * FROM t5 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
5 master/slave
|
||||
SELECT * FROM t6 ORDER BY a;
|
||||
a b
|
||||
3 master/slave
|
||||
5 master/slave
|
||||
DROP TABLE t4, t5, t6;
|
||||
**** Case 3: Statement logging format and LOAD DATA with non-transactional table ****
|
||||
*** On Master ***
|
||||
CREATE TABLE t10 (a INT, b VARCHAR(20)) ENGINE=myisam;
|
||||
*** On Slave ***
|
||||
STOP SLAVE;
|
||||
*** On Master ***
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/rpl_bug28618.dat' INTO TABLE t10 FIELDS TERMINATED BY '|';
|
||||
SELECT * FROM t10 ORDER BY a;
|
||||
a b
|
||||
1 master only
|
||||
2 master only
|
||||
3 master only
|
||||
*** On Slave ***
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
START SLAVE;
|
||||
SELECT * FROM t10 ORDER BY a;
|
||||
a b
|
||||
DROP TABLE t10;
|
||||
|
@ -235,4 +235,45 @@ drop table t1;
|
||||
drop function f1;
|
||||
drop function f2;
|
||||
drop procedure p1;
|
||||
create table t2 (b BIT(7));
|
||||
create procedure sp_bug26199(bitvalue BIT(7))
|
||||
begin
|
||||
insert into t2 set b = bitvalue;
|
||||
end //
|
||||
create function sf_bug26199(b BIT(7)) returns int
|
||||
begin
|
||||
insert into t2 values(b);
|
||||
return 0;
|
||||
end//
|
||||
call sp_bug26199(b'1110');
|
||||
call sp_bug26199('\0');
|
||||
select sf_bug26199(b'1111111');
|
||||
sf_bug26199(b'1111111')
|
||||
0
|
||||
select sf_bug26199(b'101111111');
|
||||
sf_bug26199(b'101111111')
|
||||
0
|
||||
Warnings:
|
||||
Warning 1264 Out of range value for column 'b' at row 1
|
||||
select sf_bug26199('\'');
|
||||
sf_bug26199('\'')
|
||||
0
|
||||
select hex(b) from t2;
|
||||
hex(b)
|
||||
E
|
||||
0
|
||||
7F
|
||||
7F
|
||||
27
|
||||
select hex(b) from t2;
|
||||
hex(b)
|
||||
E
|
||||
0
|
||||
7F
|
||||
7F
|
||||
27
|
||||
drop table t2;
|
||||
drop procedure sp_bug26199;
|
||||
drop function sf_bug26199;
|
||||
SET GLOBAL log_bin_trust_function_creators = 0;
|
||||
end of the tests
|
||||
|
@ -405,6 +405,26 @@ CREATE TABLE t12 (data LONG);
|
||||
LOCK TABLES t12 WRITE;
|
||||
INSERT INTO t12 VALUES(UUID());
|
||||
UNLOCK TABLES;
|
||||
CREATE FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
CREATE FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END $$
|
||||
DROP TABLE IF EXISTS t13;
|
||||
CREATE TABLE t13 (data CHAR(64));
|
||||
INSERT INTO t13 VALUES (USER());
|
||||
INSERT INTO t13 VALUES (my_user());
|
||||
INSERT INTO t13 VALUES (CURRENT_USER());
|
||||
INSERT INTO t13 VALUES (my_current_user());
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest1
|
||||
@ -709,6 +729,30 @@ master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t12
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t12 (data LONG)
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t12)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t13
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t13 (data CHAR(64))
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # drop database if exists mysqltest1
|
||||
@ -1013,5 +1057,29 @@ master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t12
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t12 (data LONG)
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t12)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE DEFINER=`root`@`localhost` FUNCTION my_current_user()
|
||||
RETURNS CHAR(64)
|
||||
BEGIN
|
||||
DECLARE user CHAR(64);
|
||||
SELECT CURRENT_USER() INTO user;
|
||||
RETURN user;
|
||||
END
|
||||
master-bin.000001 # Query # # use `mysqltest1`; DROP TABLE IF EXISTS t13
|
||||
master-bin.000001 # Query # # use `mysqltest1`; CREATE TABLE t13 (data CHAR(64))
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (mysqltest1.t13)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
drop database mysqltest1;
|
||||
set global binlog_format =@my_binlog_format;
|
||||
|
81
mysql-test/suite/rpl/r/rpl_temporary_errors.result
Normal file
81
mysql-test/suite/rpl/r/rpl_temporary_errors.result
Normal file
@ -0,0 +1,81 @@
|
||||
stop slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b INT);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2), (3,3), (4,4);
|
||||
**** On Slave ****
|
||||
SHOW STATUS LIKE 'Slave_retried_transactions';
|
||||
Variable_name Value
|
||||
Slave_retried_transactions 0
|
||||
UPDATE t1 SET a = 5, b = 47 WHERE a = 1;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
5 47
|
||||
2 2
|
||||
3 3
|
||||
4 4
|
||||
**** On Master ****
|
||||
UPDATE t1 SET a = 5, b = 5 WHERE a = 1;
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
5 5
|
||||
2 2
|
||||
3 3
|
||||
4 4
|
||||
**** On Slave ****
|
||||
SHOW STATUS LIKE 'Slave_retried_transactions';
|
||||
Variable_name Value
|
||||
Slave_retried_transactions 0
|
||||
SELECT * FROM t1;
|
||||
a b
|
||||
5 47
|
||||
2 2
|
||||
3 3
|
||||
4 4
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry 1
|
||||
Master_Log_File master-bin.000001
|
||||
Read_Master_Log_Pos 408
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running Yes
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table #
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 0
|
||||
Last_Error
|
||||
Skip_Counter 0
|
||||
Exec_Master_Log_Pos 408
|
||||
Relay_Log_Space #
|
||||
Until_Condition None
|
||||
Until_Log_File
|
||||
Until_Log_Pos 0
|
||||
Master_SSL_Allowed No
|
||||
Master_SSL_CA_File
|
||||
Master_SSL_CA_Path
|
||||
Master_SSL_Cert
|
||||
Master_SSL_Cipher
|
||||
Master_SSL_Key
|
||||
Seconds_Behind_Master #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
DROP TABLE t1;
|
||||
**** On Master ****
|
||||
DROP TABLE t1;
|
@ -4,6 +4,11 @@ reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
SET GLOBAL BINLOG_FORMAT=STATEMENT;
|
||||
@ -31,10 +36,17 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=MIXED;
|
||||
SET GLOBAL BINLOG_FORMAT=MIXED;
|
||||
@ -62,10 +74,17 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
SET GLOBAL BINLOG_FORMAT=ROW;
|
||||
@ -93,11 +112,18 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
SET GLOBAL BINLOG_FORMAT=STATEMENT;
|
||||
@ -125,10 +151,17 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=MIXED;
|
||||
SET GLOBAL BINLOG_FORMAT=MIXED;
|
||||
@ -156,10 +189,17 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
SET GLOBAL BINLOG_FORMAT=ROW;
|
||||
@ -188,9 +228,11 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=MyISAM
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
|
@ -4,6 +4,11 @@ reset master;
|
||||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
SET GLOBAL BINLOG_FORMAT=STATEMENT;
|
||||
@ -31,12 +36,19 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=MIXED;
|
||||
SET GLOBAL BINLOG_FORMAT=MIXED;
|
||||
@ -64,12 +76,19 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
SET GLOBAL BINLOG_FORMAT=ROW;
|
||||
@ -97,6 +116,7 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
@ -104,6 +124,12 @@ master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; TRUNCATE TABLE t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=STATEMENT;
|
||||
SET GLOBAL BINLOG_FORMAT=STATEMENT;
|
||||
@ -131,12 +157,19 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=MIXED;
|
||||
SET GLOBAL BINLOG_FORMAT=MIXED;
|
||||
@ -164,12 +197,19 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DELETE FROM t1
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
STOP SLAVE;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
RESET SLAVE;
|
||||
START SLAVE;
|
||||
**** On Master ****
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
SET GLOBAL BINLOG_FORMAT=ROW;
|
||||
@ -198,6 +238,7 @@ a b
|
||||
DROP TABLE t1;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE IF EXISTS t1
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG) ENGINE=InnoDB
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
@ -206,3 +247,4 @@ master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Delete_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Xid # # COMMIT /* XID */
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t1
|
||||
RESET MASTER;
|
||||
|
@ -11,7 +11,8 @@
|
||||
##############################################################################
|
||||
|
||||
rpl_ddl : BUG#26418 2007-03-01 mleich Slave out of sync after CREATE/DROP TEMPORARY TABLE + ROLLBACK on master
|
||||
rpl_invoked_features : BUG#29020 2007-06-21 Lars Non-deterministic test case
|
||||
rpl_auto_increment_11932 : Bug#29809 2007-07-16 ingo Slave SQL errors in warnings file
|
||||
rpl_extraColmaster_innodb : BUG#30854 : Tables name show as binary in slave err msg on vm-win2003-64-b and Solaris
|
||||
rpl_extraColmaster_myisam : BUG#30854
|
||||
rpl_stm_extraColmaster_ndb : WL#3915 : Statement-based replication not supported in ndb. Enable test when supported.
|
||||
rpl_innodb_bug28430 : Bug #32247 2007-11-27 mats Test reports wrong value of "AUTO_INCREMENT" (on a partitioned InnoDB table)
|
||||
rpl_view : Bug#32654: rpl_view.test fails randomly
|
||||
rpl_ndb_multi : Bug#30751: rpl_ndb_multi missing row in output
|
||||
rpl_log_pos : Bug#8693 Test 'rpl_log_pos' fails sometimes
|
||||
|
@ -1,3 +1,4 @@
|
||||
source include/master-slave.inc;
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/not_embedded.inc
|
||||
-- source include/have_binlog_format_mixed_or_statement.inc
|
||||
|
@ -114,4 +114,5 @@ SELECT * FROM visits_events;
|
||||
|
||||
# Cleanup
|
||||
DROP DATABASE track;
|
||||
sync_slave_with_master;
|
||||
--echo End of 5.1 tests
|
||||
|
@ -106,9 +106,3 @@ connection slave;
|
||||
sync_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
||||
# Cleanup
|
||||
# The A->B->A replication causes the master to start writing relay logs
|
||||
# in var/run, remove them
|
||||
remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.000001;
|
||||
remove_file $MYSQLTEST_VARDIR/run/master-relay-bin.index;
|
||||
|
256
mysql-test/suite/rpl/t/rpl_found_rows.test
Normal file
256
mysql-test/suite/rpl/t/rpl_found_rows.test
Normal file
@ -0,0 +1,256 @@
|
||||
source include/master-slave.inc;
|
||||
|
||||
# It is not possible to replicate FOUND_ROWS() using statement-based
|
||||
# replication, but there is a workaround that stores the result of
|
||||
# FOUND_ROWS() into a user variable and then replicates this instead.
|
||||
|
||||
# The purpose of this test case is to test that the workaround
|
||||
# function properly even when inside stored programs (i.e., stored
|
||||
# routines and triggers).
|
||||
|
||||
--echo ==== 0. Setting it all up ====
|
||||
|
||||
SET BINLOG_FORMAT=STATEMENT;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
CREATE TABLE t1 (a INT);
|
||||
CREATE TABLE logtbl (sect INT, test INT, count INT);
|
||||
|
||||
INSERT INTO t1 VALUES (1),(2),(3);
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
INSERT INTO t1 SELECT 2*a+3 FROM t1;
|
||||
|
||||
--echo #### 1. Using statement mode ####
|
||||
|
||||
--echo ==== 1.1. Simple test ====
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
|
||||
# Instead of
|
||||
# INSERT INTO logtbl VALUES(1, 1, FOUND_ROWS());
|
||||
# we write
|
||||
SELECT FOUND_ROWS() INTO @a;
|
||||
INSERT INTO logtbl VALUES(1,1,@a);
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
# Instead of
|
||||
# INSERT INTO logtbl VALUES(1, 2, FOUND_ROWS());
|
||||
# we write
|
||||
SELECT FOUND_ROWS() INTO @a;
|
||||
INSERT INTO logtbl VALUES(1,2,@a);
|
||||
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
|
||||
--echo ==== 1.2. Stored procedure ====
|
||||
|
||||
# Here we do both the calculation and the logging. We also do it twice
|
||||
# to make sure that there are no limitations on how many times it can
|
||||
# be used.
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
--delimiter $$
|
||||
CREATE PROCEDURE calc_and_log(sect INT, test INT) BEGIN
|
||||
DECLARE cnt INT;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
SELECT FOUND_ROWS() INTO cnt;
|
||||
INSERT INTO logtbl VALUES(sect,test,cnt);
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
SELECT FOUND_ROWS() INTO cnt;
|
||||
INSERT INTO logtbl VALUES(sect,test+1,cnt);
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
CALL calc_and_log(2,1);
|
||||
|
||||
--delimiter $$
|
||||
CREATE PROCEDURE just_log(sect INT, test INT, found_rows INT) BEGIN
|
||||
INSERT INTO logtbl VALUES (sect,test,found_rows);
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
SELECT FOUND_ROWS() INTO @found_rows;
|
||||
CALL just_log(2,3,@found_rows);
|
||||
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
|
||||
--echo ==== 1.3. Stored functions ====
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
--delimiter $$
|
||||
CREATE FUNCTION log_rows(sect INT, test INT, found_rows INT)
|
||||
RETURNS INT
|
||||
BEGIN
|
||||
INSERT INTO logtbl VALUES(sect,test,found_rows);
|
||||
RETURN found_rows;
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
SELECT FOUND_ROWS() INTO @found_rows;
|
||||
SELECT log_rows(3,1,@found_rows), log_rows(3,2,@found_rows);
|
||||
|
||||
SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM logtbl WHERE sect = 3 ORDER BY sect,test;
|
||||
|
||||
--echo ==== 1.9. Cleanup ====
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
DELETE FROM logtbl;
|
||||
DROP PROCEDURE just_log;
|
||||
DROP PROCEDURE calc_and_log;
|
||||
DROP FUNCTION log_rows;
|
||||
sync_slave_with_master;
|
||||
|
||||
source include/reset_master_and_slave.inc;
|
||||
|
||||
--echo #### 2. Using mixed mode ####
|
||||
|
||||
--echo ==== 2.1. Checking a procedure ====
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
SET BINLOG_FORMAT=MIXED;
|
||||
|
||||
# We will now check some stuff that will not work in statement-based
|
||||
# replication, but which should cause the binary log to switch to
|
||||
# row-based logging.
|
||||
|
||||
--delimiter $$
|
||||
CREATE PROCEDURE just_log(sect INT, test INT) BEGIN
|
||||
INSERT INTO logtbl VALUES (sect,test,FOUND_ROWS());
|
||||
END $$
|
||||
--delimiter ;
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo **** On Master 1 ****
|
||||
connection master1;
|
||||
SET BINLOG_FORMAT=MIXED;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
CALL just_log(1,1);
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
CALL just_log(1,2);
|
||||
|
||||
--echo **** On Master 1 ****
|
||||
|
||||
connection master1;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
CALL just_log(1,3);
|
||||
sync_slave_with_master;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
CALL just_log(1,4);
|
||||
sync_slave_with_master;
|
||||
|
||||
connection master;
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM logtbl WHERE sect = 1 ORDER BY sect,test;
|
||||
|
||||
--echo ==== 2.1. Checking a stored function ====
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
--delimiter $$
|
||||
CREATE FUNCTION log_rows(sect INT, test INT)
|
||||
RETURNS INT
|
||||
BEGIN
|
||||
DECLARE found_rows INT;
|
||||
SELECT FOUND_ROWS() INTO found_rows;
|
||||
INSERT INTO logtbl VALUES(sect,test,found_rows);
|
||||
RETURN found_rows;
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
SELECT log_rows(2,1), log_rows(2,2);
|
||||
|
||||
CREATE TABLE t2 (a INT, b INT);
|
||||
|
||||
# Trying with referencing FOUND_ROWS() directly in the trigger.
|
||||
|
||||
--delimiter $$
|
||||
CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
|
||||
BEGIN
|
||||
INSERT INTO logtbl VALUES (NEW.a, NEW.b, FOUND_ROWS());
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a < 5 ORDER BY a LIMIT 1;
|
||||
INSERT INTO t2 VALUES (2,3), (2,4);
|
||||
|
||||
# Referencing FOUND_ROWS() indirectly.
|
||||
|
||||
DROP TRIGGER t2_tr;
|
||||
|
||||
--delimiter $$
|
||||
CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
|
||||
BEGIN
|
||||
DECLARE dummy INT;
|
||||
SELECT log_rows(NEW.a, NEW.b) INTO dummy;
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
INSERT INTO t2 VALUES (2,5), (2,6);
|
||||
|
||||
# Putting FOUND_ROWS() even lower in the call chain.
|
||||
|
||||
connection master;
|
||||
DROP TRIGGER t2_tr;
|
||||
|
||||
--delimiter $$
|
||||
CREATE PROCEDURE log_me_inner(sect INT, test INT)
|
||||
BEGIN
|
||||
DECLARE dummy INT;
|
||||
SELECT log_rows(sect, test) INTO dummy;
|
||||
SELECT log_rows(sect, test+1) INTO dummy;
|
||||
END $$
|
||||
|
||||
CREATE PROCEDURE log_me(sect INT, test INT)
|
||||
BEGIN
|
||||
CALL log_me_inner(sect,test);
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
--delimiter $$
|
||||
CREATE TRIGGER t2_tr BEFORE INSERT ON t2 FOR EACH ROW
|
||||
BEGIN
|
||||
CALL log_me(NEW.a, NEW.b);
|
||||
END $$
|
||||
--delimiter ;
|
||||
|
||||
SELECT SQL_CALC_FOUND_ROWS * FROM t1 WHERE a > 5 ORDER BY a LIMIT 1;
|
||||
INSERT INTO t2 VALUES (2,5), (2,6);
|
||||
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM logtbl WHERE sect = 2 ORDER BY sect,test;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, logtbl;
|
||||
DROP PROCEDURE just_log;
|
||||
DROP PROCEDURE log_me;
|
||||
DROP PROCEDURE log_me_inner;
|
||||
DROP FUNCTION log_rows;
|
||||
sync_slave_with_master;
|
||||
|
79
mysql-test/suite/rpl/t/rpl_idempotency.test
Normal file
79
mysql-test/suite/rpl/t/rpl_idempotency.test
Normal file
@ -0,0 +1,79 @@
|
||||
# Testing various forms of idempotency for replication that should
|
||||
# work the same way under statement based as under row based.
|
||||
|
||||
source include/master-slave.inc;
|
||||
|
||||
connection master;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY);
|
||||
CREATE TABLE t2 (a INT);
|
||||
INSERT INTO t1 VALUES (-1),(-2),(-3);
|
||||
INSERT INTO t2 VALUES (-1),(-2),(-3);
|
||||
sync_slave_with_master;
|
||||
|
||||
# A delete for a row that does not exist, the statement is
|
||||
# deliberately written to be idempotent for statement-based
|
||||
# replication as well. We test this towards both a table with a
|
||||
# primary key and without a primary key.
|
||||
|
||||
connection slave;
|
||||
DELETE FROM t1 WHERE a = -2;
|
||||
DELETE FROM t2 WHERE a = -2;
|
||||
connection master;
|
||||
DELETE FROM t1 WHERE a = -2;
|
||||
DELETE FROM t2 WHERE a = -2;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
|
||||
disable_query_log;
|
||||
eval SELECT "$last_error" AS Last_SQL_Error;
|
||||
enable_query_log;
|
||||
|
||||
# An insert of a row that already exists. Since we are replacing the
|
||||
# row if it already exists, the most apropriate representation is
|
||||
# INSERT IGNORE. We only test this towards a table with a primary key,
|
||||
# since the other case does not make sense.
|
||||
|
||||
INSERT IGNORE INTO t1 VALUES (-2);
|
||||
connection master;
|
||||
INSERT IGNORE INTO t1 VALUES (-2);
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
|
||||
disable_query_log;
|
||||
eval SELECT "$last_error" AS Last_SQL_Error;
|
||||
enable_query_log;
|
||||
|
||||
# BUG#19958: RBR idempotency issue for UPDATE and DELETE
|
||||
|
||||
# Statement-based and row-based replication have different behaviour
|
||||
# when updating a row with an explicit WHERE-clause that matches
|
||||
# exactly one row (or no row at all). For statement-based replication,
|
||||
# the statement is idempotent since the first time it is executed, it
|
||||
# will update exactly one row, and the second time it will not update
|
||||
# any row at all. This was not the case for row-based replication, so
|
||||
# we test under both row-based and statement-based replication both
|
||||
# for tables with and without primary keys.
|
||||
|
||||
connection slave;
|
||||
UPDATE t1 SET a = 1 WHERE a = -1;
|
||||
UPDATE t2 SET a = 1 WHERE a = -1;
|
||||
connection master;
|
||||
UPDATE t1 SET a = 1 WHERE a = -1;
|
||||
UPDATE t2 SET a = 1 WHERE a = -1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
sync_slave_with_master;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno, 1);
|
||||
disable_query_log;
|
||||
eval SELECT "$last_error" AS Last_SQL_Error;
|
||||
enable_query_log;
|
||||
|
||||
connection master;
|
||||
DROP TABLE t1, t2;
|
||||
sync_slave_with_master;
|
@ -136,8 +136,7 @@ SELECT count(*) as "Master byrange" FROM test.byrange_tbl;
|
||||
--sync_slave_with_master
|
||||
connection slave;
|
||||
show create table test.byrange_tbl;
|
||||
--replace_column 4 MASTER_PORT 33 #
|
||||
show slave status;
|
||||
source include/show_slave_status.inc;
|
||||
SELECT count(*) "Slave norm" FROM test.regular_tbl;
|
||||
SELECT count(*) "Slave bykey" FROM test.bykey_tbl;
|
||||
SELECT count(*) "Slave byrange" FROM test.byrange_tbl;
|
||||
|
@ -8,10 +8,9 @@
|
||||
--source include/master-slave.inc
|
||||
--source include/have_innodb.inc
|
||||
|
||||
|
||||
#
|
||||
# Define variables used by test case
|
||||
#
|
||||
# --disable_warnings/--enable_warnings added before/after query
|
||||
# if one uses UUID() function because we need to avoid warnings
|
||||
# for STATEMENT binlog format
|
||||
|
||||
# Non-transactional engine
|
||||
--let $engine_type= myisam
|
||||
@ -45,20 +44,24 @@ DROP EVENT IF EXISTS e11;
|
||||
|
||||
--echo
|
||||
eval CREATE TABLE t1 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES (1,1,'1');
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES (2,2,UUID());
|
||||
eval CREATE TABLE t2 (a INT, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
||||
--enable_warnings
|
||||
eval CREATE TABLE t2 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type;
|
||||
INSERT INTO t2 VALUES (1,1,'1');
|
||||
--disable_warnings
|
||||
INSERT INTO t2 VALUES (2,2,UUID());
|
||||
--enable_warnings
|
||||
|
||||
eval CREATE TABLE t11 (a INT NOT NULL PRIMARY KEY, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
||||
--disable_warnings
|
||||
INSERT INTO t11 VALUES (1,1,'1');
|
||||
--disable_warnings
|
||||
INSERT INTO t11 VALUES (2,2,UUID());
|
||||
eval CREATE TABLE t12 (a INT, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
||||
--enable_warnings
|
||||
eval CREATE TABLE t12 (a INT UNIQUE, b INT, c VARCHAR(64)) ENGINE=$engine_type2;
|
||||
INSERT INTO t12 VALUES (1,1,'1');
|
||||
--disable_warnings
|
||||
INSERT INTO t12 VALUES (2,2,UUID());
|
||||
--enable_warnings
|
||||
|
||||
@ -96,22 +99,16 @@ BEGIN
|
||||
END|
|
||||
|
||||
# Create events which will run every 1 sec
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
||||
CREATE EVENT e1 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||
BEGIN
|
||||
DECLARE c INT;
|
||||
SELECT a INTO c FROM t1 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
||||
IF c = 7 THEN
|
||||
CALL p1(10, '');
|
||||
END IF;
|
||||
ALTER EVENT e1 DISABLE;
|
||||
CALL p1(10, '');
|
||||
END|
|
||||
|
||||
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND ENABLE DO
|
||||
CREATE EVENT e11 ON SCHEDULE EVERY 1 SECOND DISABLE DO
|
||||
BEGIN
|
||||
DECLARE c INT;
|
||||
SELECT a INTO c FROM t11 WHERE a < 11 ORDER BY a DESC LIMIT 1;
|
||||
IF c = 7 THEN
|
||||
CALL p11(10, '');
|
||||
END IF;
|
||||
ALTER EVENT e11 DISABLE;
|
||||
CALL p11(10, '');
|
||||
END|
|
||||
|
||||
# Create functions and procedures used for events
|
||||
@ -130,12 +127,12 @@ END|
|
||||
|
||||
CREATE PROCEDURE p1 (IN x INT, IN y VARCHAR(64))
|
||||
BEGIN
|
||||
INSERT INTO t1 VALUES (x,x,y);
|
||||
INSERT IGNORE INTO t1 VALUES (x,x,y);
|
||||
END|
|
||||
|
||||
CREATE PROCEDURE p11 (IN x INT, IN y VARCHAR(64))
|
||||
BEGIN
|
||||
INSERT INTO t11 VALUES (x,x,y);
|
||||
INSERT IGNORE INTO t11 VALUES (x,x,y);
|
||||
END|
|
||||
|
||||
DELIMITER ;|
|
||||
@ -147,17 +144,24 @@ DELIMITER ;|
|
||||
|
||||
# Do some actions for non-transactional tables
|
||||
--echo
|
||||
--disable_warnings
|
||||
CREATE TABLE t3 SELECT * FROM v1;
|
||||
INSERT INTO t1 VALUES (3,3,'');
|
||||
UPDATE t1 SET c='2' WHERE a = 1;
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES(4,4,f1(4));
|
||||
--enable_warnings
|
||||
INSERT INTO t1 VALUES (100,100,'');
|
||||
--disable_warnings
|
||||
CALL p1(5, UUID());
|
||||
--enable_warnings
|
||||
INSERT INTO t1 VALUES (101,101,'');
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES(6,6,f1(6));
|
||||
--enable_warnings
|
||||
INSERT INTO t1 VALUES (102,102,'');
|
||||
--disable_warnings
|
||||
INSERT INTO t1 VALUES(7,7,f2(7));
|
||||
--enable_warnings
|
||||
INSERT INTO t1 VALUES (103,103,'');
|
||||
|
||||
# Do some actions for transactional tables
|
||||
@ -165,21 +169,34 @@ INSERT INTO t1 VALUES (103,103,'');
|
||||
CREATE TABLE t13 SELECT * FROM v11;
|
||||
INSERT INTO t11 VALUES (3,3,'');
|
||||
UPDATE t11 SET c='2' WHERE a = 1;
|
||||
--disable_warnings
|
||||
INSERT INTO t11 VALUES(4,4,f1(4));
|
||||
INSERT INTO t11 VALUES (100,100,'');
|
||||
CALL p11(5, UUID());
|
||||
INSERT INTO t11 VALUES (101,101,'');
|
||||
INSERT INTO t11 VALUES(6,6,f1(6));
|
||||
INSERT INTO t11 VALUES (102,102,'');
|
||||
INSERT INTO t11 VALUES(7,7,f2(7));
|
||||
INSERT INTO t11 VALUES (103,103,'');
|
||||
--enable_warnings
|
||||
INSERT INTO t11 VALUES (100,100,'');
|
||||
--disable_warnings
|
||||
CALL p11(5, UUID());
|
||||
--enable_warnings
|
||||
INSERT INTO t11 VALUES (101,101,'');
|
||||
--disable_warnings
|
||||
INSERT INTO t11 VALUES(6,6,f1(6));
|
||||
--enable_warnings
|
||||
INSERT INTO t11 VALUES (102,102,'');
|
||||
--disable_warnings
|
||||
INSERT INTO t11 VALUES(7,7,f2(7));
|
||||
--enable_warnings
|
||||
INSERT INTO t11 VALUES (103,103,'');
|
||||
|
||||
# Scheduler is on
|
||||
--echo
|
||||
# Temporally events fire sequentally due Bug#29020.
|
||||
SET GLOBAL EVENT_SCHEDULER = on;
|
||||
# Wait 2 sec while events will executed
|
||||
--sleep 2
|
||||
# Wait while events will executed
|
||||
ALTER EVENT e1 ENABLE;
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM t1 WHERE t1.a = 10;
|
||||
--source include/wait_condition.inc
|
||||
ALTER EVENT e11 ENABLE;
|
||||
let $wait_condition= SELECT COUNT(*) = 1 FROM t11 WHERE t11.a = 10;
|
||||
--source include/wait_condition.inc
|
||||
SET GLOBAL EVENT_SCHEDULER = off;
|
||||
|
||||
# Check original objects
|
||||
@ -234,7 +251,7 @@ SELECT COUNT(*) FROM t13;
|
||||
SELECT a,b FROM t13 ORDER BY a;
|
||||
SELECT a,b FROM v11 ORDER BY a;
|
||||
|
||||
# Remove UUID() before comparing
|
||||
# Remove UUID() before comparing and sort tables
|
||||
|
||||
--connection master
|
||||
--echo
|
||||
@ -245,6 +262,9 @@ UPDATE t11 SET c='';
|
||||
UPDATE t12 SET c='';
|
||||
UPDATE t13 SET c='';
|
||||
|
||||
ALTER TABLE t3 ORDER BY a;
|
||||
ALTER TABLE t13 ORDER BY a;
|
||||
|
||||
--sync_slave_with_master slave
|
||||
|
||||
# Compare a data from master and slave
|
||||
@ -260,13 +280,12 @@ UPDATE t13 SET c='';
|
||||
|
||||
# Remove dumps
|
||||
--echo
|
||||
--exec rm $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql
|
||||
--exec rm $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_master.sql
|
||||
--remove_file $MYSQLTEST_VARDIR/tmp/rpl_invoked_features_slave.sql
|
||||
|
||||
# Remove tables,views,procedures,functions
|
||||
--connection master
|
||||
--echo
|
||||
--disable_warnings
|
||||
DROP VIEW IF EXISTS v1,v11;
|
||||
DROP TABLE IF EXISTS t1,t2,t3,t11,t12,t13;
|
||||
DROP PROCEDURE IF EXISTS p1;
|
||||
@ -275,7 +294,6 @@ DROP FUNCTION IF EXISTS f1;
|
||||
DROP FUNCTION IF EXISTS f2;
|
||||
DROP EVENT IF EXISTS e1;
|
||||
DROP EVENT IF EXISTS e11;
|
||||
--enable_warnings
|
||||
|
||||
--sync_slave_with_master slave
|
||||
|
||||
|
@ -66,16 +66,11 @@ CREATE TABLe `t1` (`f1` LONGTEXT) ENGINE=MyISAM;
|
||||
INSERT INTO `t1`(`f1`) VALUES ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa2048');
|
||||
|
||||
# The slave I/O thread must stop after trying to read the above event
|
||||
connection slave;
|
||||
sleep 2;
|
||||
--source include/wait_for_slave_io_to_stop.inc
|
||||
SHOW STATUS LIKE 'Slave_running';
|
||||
|
||||
# cleanup
|
||||
#connection master;
|
||||
#drop table t1;
|
||||
#connection slave;
|
||||
#drop table t1;
|
||||
|
||||
connection slave;
|
||||
--source include/wait_for_slave_io_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
# import is only the 11th column Slave_IO_Running
|
||||
--replace_column 1 # 7 # 8 # 9 # 12 # 22 # 23 # 33 #
|
||||
query_vertical show slave status;
|
||||
|
||||
# End of tests
|
||||
|
@ -223,3 +223,38 @@ connection master;
|
||||
drop table t1,t2;
|
||||
|
||||
sync_slave_with_master;
|
||||
|
||||
#
|
||||
# BUG#31702: Missing row on slave causes assertion failure under
|
||||
# row-based replication
|
||||
#
|
||||
|
||||
disable_query_log;
|
||||
source include/master-slave-reset.inc;
|
||||
enable_query_log;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
SET SESSION BINLOG_FORMAT=ROW;
|
||||
CREATE TABLE t1 (a INT PRIMARY KEY, b SET('master','slave'));
|
||||
INSERT INTO t1 VALUES (1,'master,slave'), (2,'master,slave');
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
UPDATE t1 SET a = 5, b = 'slave' WHERE a = 1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
UPDATE t1 SET a = 5, b = 'master' WHERE a = 1;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
--echo **** On Slave ****
|
||||
sync_slave_with_master;
|
||||
let $last_error = query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
|
||||
disable_query_log;
|
||||
eval SELECT "$last_error" AS Last_SQL_Error;
|
||||
enable_query_log;
|
||||
SELECT * FROM t1 ORDER BY a;
|
||||
DROP TABLE t1;
|
||||
|
||||
--echo **** On Master ****
|
||||
connection master;
|
||||
DROP TABLE t1;
|
||||
|
@ -4,6 +4,7 @@
|
||||
########################################################
|
||||
-- source include/not_ndb_default.inc
|
||||
-- source include/have_binlog_format_row.inc
|
||||
-- source include/have_innodb.inc
|
||||
-- source include/master-slave.inc
|
||||
let $engine_type=innodb;
|
||||
-- source extra/rpl_tests/rpl_row_charset.test
|
||||
|
@ -344,5 +344,6 @@ FLUSH LOGS;
|
||||
--exec rm $MYSQLTEST_VARDIR/tmp/local.sql
|
||||
|
||||
DROP TABLE IF EXISTS t1, t2, t3, t04, t05, t4, t5;
|
||||
sync_slave_with_master;
|
||||
|
||||
# End of 4.1 tests
|
||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user