mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
merge from 5.1 up to rev 3408
This commit is contained in:
commit
70dee54c03
325 changed files with 8824 additions and 12742 deletions
|
|
@ -13,12 +13,15 @@ funcs_1.ndb* # joro : NDB tests marked as experiment
|
|||
funcs_2.ndb_charset # joro : NDB tests marked as experimental as agreed with bochklin
|
||||
|
||||
main.ctype_gbk_binlog @solaris # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists
|
||||
main.func_str @solaris # joro: Bug#40928
|
||||
main.plugin_load @solaris # Bug#42144
|
||||
main.sp @solaris # joro : Bug#54138
|
||||
main.outfile_loaddata @solaris # joro : Bug #46895
|
||||
|
||||
ndb.* # joro : NDB tests marked as experimental as agreed with bochklin
|
||||
|
||||
rpl.rpl_innodb_bug28430* @solaris # Bug#46029
|
||||
rpl.rpl_row_sp011 @solaris # Joro : Bug #54138
|
||||
|
||||
rpl_ndb.* # joro : NDB tests marked as experimental as agreed with bochklin
|
||||
rpl_ndb.rpl_ndb_log # Bug#38998
|
||||
|
|
|
|||
|
|
@ -41,13 +41,10 @@ while ($1)
|
|||
--enable_query_log
|
||||
commit;
|
||||
drop table t1;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
|
||||
show binlog events in 'master-bin.000001' from 106;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/ /\/\* xid=.* \*\//\/* xid= *\//
|
||||
show binlog events in 'master-bin.000002' from 106;
|
||||
|
||||
--source include/show_binlog_events.inc
|
||||
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--source include/show_binlog_events.inc
|
||||
--let $binlog_file=
|
||||
|
||||
#
|
||||
# Bug#22540 - Incorrect value in column End_log_pos of
|
||||
|
|
@ -77,8 +74,7 @@ insert into t1 values (2);
|
|||
insert into t1 values (3);
|
||||
commit;
|
||||
drop table t1;
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
|
||||
show binlog events from 0;
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
# now show that nothing breaks if we need to read from the cache more
|
||||
# than once, resulting in split event-headers
|
||||
|
|
@ -100,8 +96,7 @@ while ($1)
|
|||
commit;
|
||||
enable_query_log;
|
||||
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
|
||||
show binlog events from 0;
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
drop table t1;
|
||||
|
||||
|
|
@ -122,8 +117,7 @@ set @b= 14632475938453979136;
|
|||
execute stmt using @a, @b;
|
||||
deallocate prepare stmt;
|
||||
drop table t1;
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /Server ver: [^,]*,/Server version,/
|
||||
show binlog events from 0;
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
|
||||
#
|
||||
|
|
@ -249,14 +243,15 @@ reset master;
|
|||
drop table if exists t3;
|
||||
--enable_warnings
|
||||
create table t3 (a int(11) NOT NULL AUTO_INCREMENT, b text, PRIMARY KEY (a) ) engine=innodb;
|
||||
show master status;
|
||||
source include/show_master_status.inc;
|
||||
let $it=4;
|
||||
while ($it)
|
||||
{
|
||||
insert into t3(b) values ('aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa');
|
||||
dec $it;
|
||||
}
|
||||
show master status /* must show new binlog index after rotating */;
|
||||
# must show new binlog index after rotating;
|
||||
source include/show_master_status.inc;
|
||||
drop table t3;
|
||||
|
||||
--echo #
|
||||
|
|
|
|||
|
|
@ -125,12 +125,7 @@ select * from t1;
|
|||
select * from t2;
|
||||
select * from t3;
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
--replace_regex /file_id=[0-9]+/file_id=#/
|
||||
show binlog events;
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
drop table t1,t2,t3;
|
||||
|
||||
|
|
@ -168,18 +163,21 @@ set autocommit=0;
|
|||
start transaction;
|
||||
insert into t1 values(1);
|
||||
commit;
|
||||
|
||||
let $master_log_pos_1= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
|
||||
start transaction;
|
||||
insert into t1 values(2);
|
||||
rollback;
|
||||
|
||||
let $master_log_pos_2= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
if (`SELECT $master_log_pos_2 <> $master_log_pos_1`)
|
||||
{
|
||||
echo $master_log_pos_1 $master_log_pos_2;
|
||||
die Rollbacked transaction has been binlogged;
|
||||
}
|
||||
|
||||
set autocommit=1;
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
--replace_regex /file_id=[0-9]+/file_id=#/
|
||||
show binlog events;
|
||||
|
||||
drop table if exists t1;
|
||||
|
||||
#
|
||||
|
|
|
|||
|
|
@ -61,7 +61,7 @@ sync_with_master;
|
|||
SELECT * FROM t1;
|
||||
SELECT * FROM t3;
|
||||
# Check that no error is reported
|
||||
--source include/show_slave_status2.inc
|
||||
source include/check_slave_is_running.inc;
|
||||
--echo
|
||||
|
||||
# 2) Test lock wait timeout
|
||||
|
|
@ -89,7 +89,7 @@ sync_with_master;
|
|||
SELECT * FROM t1;
|
||||
SELECT * FROM t3;
|
||||
# Check that no error is reported
|
||||
--source include/show_slave_status2.inc
|
||||
source include/check_slave_is_running.inc;
|
||||
--echo
|
||||
|
||||
# 3) Test lock wait timeout and purged relay log
|
||||
|
|
@ -103,6 +103,7 @@ SET global max_relay_log_size=0;
|
|||
--source include/stop_slave.inc
|
||||
DELETE FROM t2;
|
||||
# Set slave position to the BEGIN log event
|
||||
--replace_result $master_pos_begin MASTER_POS_BEGIN
|
||||
eval CHANGE MASTER TO MASTER_LOG_POS=$master_pos_begin;
|
||||
BEGIN;
|
||||
# Hold lock
|
||||
|
|
@ -119,7 +120,7 @@ sync_with_master;
|
|||
SELECT * FROM t1;
|
||||
SELECT * FROM t3;
|
||||
# Check that no error is reported
|
||||
--source include/show_slave_status2.inc
|
||||
source include/check_slave_is_running.inc;
|
||||
--echo
|
||||
|
||||
# Clean up
|
||||
|
|
|
|||
|
|
@ -146,12 +146,7 @@ SELECT COUNT(*) FROM t1;
|
|||
--echo
|
||||
SELECT * FROM t1 ORDER BY f3 LIMIT 20;
|
||||
|
||||
--echo
|
||||
--echo * Show Slave Status *
|
||||
--echo
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical show slave status;
|
||||
--echo
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
### Altering table def scenario
|
||||
--echo
|
||||
|
|
@ -431,16 +426,14 @@ connection master;
|
|||
delete from t4;
|
||||
delete from t31;
|
||||
|
||||
--echo
|
||||
--echo ** Check slave status **
|
||||
--echo
|
||||
#connection slave;
|
||||
sync_slave_with_master;
|
||||
select * from t31;
|
||||
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical show slave status;
|
||||
--echo
|
||||
--echo ** Check slave status **
|
||||
--echo
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
#### Clean Up ####
|
||||
|
||||
|
|
@ -493,16 +486,15 @@ INSERT INTO t10 () VALUES(1,@b1,DEFAULT,'Kyle',DEFAULT),
|
|||
|
||||
--echo
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1523 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
--echo
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
# 1535 = ER_BINLOG_ROW_WRONG_TABLE_DEF
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo
|
||||
--echo *** Drop t10 ***
|
||||
|
|
@ -550,16 +542,15 @@ INSERT INTO t11 () VALUES(1,@b1,'Testing is fun','Kyle',DEFAULT),
|
|||
|
||||
--echo
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1523 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
--echo
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
# 1535 = ER_BINLOG_ROW_WRONG_TABLE_DEF
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo
|
||||
--echo *** Drop t11 ***
|
||||
|
|
@ -697,10 +688,10 @@ SELECT c1,c3,hex(c4),c5,c6 FROM t14 ORDER BY c1;
|
|||
# Remove below once fixed
|
||||
#***************************
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
# 1091 = ER_CANT_DROP_FIELD_OR_KEY
|
||||
--let $slave_sql_errno= 1091
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
#***************************
|
||||
|
||||
STOP SLAVE;
|
||||
|
|
@ -763,10 +754,10 @@ SELECT c1,hex(c4),c5,c6,c7,c2 FROM t15 ORDER BY c1;
|
|||
--echo ********************************************
|
||||
--echo
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
# 1054 = ER_BAD_FIELD_ERROR
|
||||
--let $slave_sql_errno= 1054
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
|
|
@ -840,10 +831,10 @@ SELECT c1,hex(c4),c5,c6,c7 FROM t16 ORDER BY c1;
|
|||
--echo *****************
|
||||
--echo
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
# 1072 = ER_KEY_COLUMN_DOES_NOT_EXITS
|
||||
--let $slave_sql_errno= 1072
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
|
||||
|
|
|
|||
|
|
@ -96,10 +96,9 @@ SELECT * FROM t2 ORDER BY a;
|
|||
--echo *** Start Slave ***
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
STOP SLAVE;
|
||||
RESET SLAVE;
|
||||
SELECT * FROM t2 ORDER BY a;
|
||||
|
|
@ -146,15 +145,13 @@ set @b1 = concat(@b1,@b1);
|
|||
INSERT INTO t3 () VALUES(@b1,2,'Kyle, TEX'),(@b1,1,'JOE AUSTIN'),(@b1,4,'QA TESTING');
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Drop t3 ***
|
||||
connection master;
|
||||
|
|
@ -191,15 +188,13 @@ INSERT INTO t4 () VALUES(100.22,2,'Kyle, TEX'),(200.26,1,'JOE AUSTIN'),
|
|||
(30000.22,4,'QA TESTING');
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Drop t4 ***
|
||||
connection master;
|
||||
|
|
@ -236,15 +231,13 @@ INSERT INTO t5 () VALUES(1,'Kyle',200.23,1,'b1b1',23.00098),
|
|||
(2,'JOE',300.01,0,'b2b2',1.0000009);
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Drop t5 ***
|
||||
connection master;
|
||||
|
|
@ -282,13 +275,12 @@ INSERT INTO t6 () VALUES(1,'Kyle',200.23,1),
|
|||
(2,'JOE',300.01,0);
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=3;
|
||||
#START SLAVE;
|
||||
|
||||
|
|
@ -387,12 +379,10 @@ INSERT INTO t8 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
|||
### Uncomment once bug is fixed
|
||||
|
||||
#connection slave;
|
||||
#wait_for_slave_to_stop;
|
||||
#--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;
|
||||
#START SLAVE;
|
||||
#--let $slave_sql_errno= SOMETHING
|
||||
#--let $slave_skip_counter= 2
|
||||
#--let $show_slave_sql_error= 1
|
||||
#--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Drop t8 ***
|
||||
connection master;
|
||||
|
|
@ -451,12 +441,10 @@ if (`SELECT $engine_type != 'NDB'`)
|
|||
# todo: fix Bug #43992 slave sql thread can't tune own sql_mode ...
|
||||
# and add/restore waiting for stop test
|
||||
|
||||
#--source include/wait_for_slave_sql_to_stop.inc
|
||||
#--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;
|
||||
#START SLAVE;
|
||||
#--let $slave_sql_errno= SOMETHING
|
||||
#--let $slave_skip_counter= 2
|
||||
#--let $show_slave_sql_error= 1
|
||||
#--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
}
|
||||
|
||||
#--echo *** Drop t9 ***
|
||||
|
|
@ -491,15 +479,13 @@ set @b1 = concat(@b1,@b1);
|
|||
INSERT INTO t10 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Drop t10 ***
|
||||
connection master;
|
||||
|
|
@ -535,15 +521,13 @@ set @b1 = concat(@b1,@b1);
|
|||
INSERT INTO t11 () VALUES(1,@b1,'Kyle'),(2,@b1,'JOE'),(3,@b1,'QA');
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Drop t11 ***
|
||||
connection master;
|
||||
|
|
@ -810,12 +794,10 @@ ALTER TABLE t15 ADD COLUMN c6 INT AFTER c5;
|
|||
--echo *** Expect slave to fail with Error 1060 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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=1;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1060
|
||||
--let $slave_skip_counter= 1
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo *** Try to insert in master ****
|
||||
connection master;
|
||||
|
|
@ -918,15 +900,13 @@ connection master;
|
|||
INSERT INTO t17 () VALUES(9223372036854775807,2,'Kyle, TEX');
|
||||
|
||||
--echo ********************************************
|
||||
--echo *** Expect slave to fail with Error 1522 ***
|
||||
--echo *** Expect slave to fail with Error 1535 ***
|
||||
--echo ********************************************
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--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;
|
||||
START SLAVE;
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $slave_skip_counter= 2
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
--echo ** DROP table t17 ***
|
||||
connection master;
|
||||
|
|
|
|||
|
|
@ -20,19 +20,15 @@ rename table t1 to t5, t2 to t1;
|
|||
# first don't write it to the binlog, to test the NO_WRITE_TO_BINLOG keyword.
|
||||
flush no_write_to_binlog tables;
|
||||
# Check that it's not in the binlog.
|
||||
--replace_result $SERVER_VERSION SERVER_VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
eval SHOW BINLOG EVENTS FROM $rename_event_pos ;
|
||||
let $binlog_start= $rename_event_pos;
|
||||
source include/show_binlog_events.inc;
|
||||
# Check that the master is not confused.
|
||||
select * from t3;
|
||||
# This FLUSH should go into the binlog to not confuse the slave.
|
||||
flush tables;
|
||||
# Check that it's in the binlog.
|
||||
--replace_result $SERVER_VERSION SERVER_VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
eval SHOW BINLOG EVENTS FROM $rename_event_pos ;
|
||||
let $wait_binlog_event= flush tables;
|
||||
source include/wait_for_binlog_event.inc;
|
||||
|
||||
sync_slave_with_master;
|
||||
# Check that the slave is not confused.
|
||||
|
|
|
|||
|
|
@ -68,19 +68,15 @@ eval SET DEBUG_SYNC=$debug_sync_action;
|
|||
|
||||
# Show slave last IO errno
|
||||
connection slave;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
let $last_io_errno= query_get_value("show slave status", Last_IO_Errno, 1);
|
||||
--echo Check network error happened here
|
||||
if (`SELECT '$last_io_errno' = '2013' || # CR_SERVER_LOST
|
||||
'$last_io_errno' = '2003' || # CR_CONN_HOST_ERROR
|
||||
'$last_io_errno' = '2002' || # CR_CONNECTION_ERROR
|
||||
'$last_io_errno' = '2006' || # CR_SERVER_GONE_ERROR
|
||||
'$last_io_errno' = '1040' || # ER_CON_COUNT_ERROR
|
||||
'$last_io_errno' = '1053' # ER_SERVER_SHUTDOWN
|
||||
`)
|
||||
{
|
||||
--echo NETWORK ERROR
|
||||
}
|
||||
# '2013' CR_SERVER_LOST
|
||||
# '2003' CR_CONN_HOST_ERROR
|
||||
# '2002' CR_CONNECTION_ERROR
|
||||
# '2006' CR_SERVER_GONE_ERROR
|
||||
# '1040' ER_CON_COUNT_ERROR
|
||||
# '1053' ER_SERVER_SHUTDOWN
|
||||
let $slave_io_errno= 1040, 1053, 2002, 2003, 2006, 2013;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
|
||||
# deactivate the sync point of get_master_version_and_clock()
|
||||
# now to avoid restarting IO-thread to re-enter it.
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ connection master;
|
|||
# Bug #29571: INSERT DELAYED IGNORE written to binary log on the master but
|
||||
# on the slave
|
||||
#
|
||||
if (`SELECT @@global.binlog_format != 'ROW'`)
|
||||
if ($binlog_format_statement)
|
||||
{
|
||||
#flush the logs before the test
|
||||
connection slave;
|
||||
|
|
@ -103,22 +103,23 @@ CREATE TABLE t1(a int, UNIQUE(a));
|
|||
INSERT DELAYED IGNORE INTO t1 VALUES(1);
|
||||
INSERT DELAYED IGNORE INTO t1 VALUES(1);
|
||||
flush table t1; # to wait for INSERT DELAYED to be done
|
||||
|
||||
if (`SELECT @@global.binlog_format != 'ROW'`)
|
||||
if ($binlog_format_statement)
|
||||
{
|
||||
#must show two INSERT DELAYED
|
||||
--replace_column 1 x 2 x 3 x 4 x 5 x
|
||||
show binlog events in 'master-bin.000002' LIMIT 2,2;
|
||||
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--let $binlog_limit= 1,2
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
select * from t1;
|
||||
|
||||
sync_slave_with_master;
|
||||
echo On slave;
|
||||
if (`SELECT @@global.binlog_format != 'ROW'`)
|
||||
if ($binlog_format_statement)
|
||||
{
|
||||
#must show two INSERT DELAYED
|
||||
--replace_column 1 x 2 x 3 x 4 x 5 x
|
||||
show binlog events in 'slave-bin.000002' LIMIT 2,2;
|
||||
--let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1)
|
||||
--let $binlog_limit= 1,2
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
select * from t1;
|
||||
|
||||
|
|
|
|||
|
|
@ -11,11 +11,9 @@
|
|||
# (otherwise RESET MASTER may come too early).
|
||||
sync_slave_with_master;
|
||||
source include/stop_slave.inc;
|
||||
--source include/wait_for_slave_to_stop.inc
|
||||
reset master;
|
||||
reset slave;
|
||||
start slave;
|
||||
--source include/wait_for_slave_to_start.inc
|
||||
source include/start_slave.inc;
|
||||
|
||||
let $VERSION=`select version()`;
|
||||
|
||||
|
|
@ -31,19 +29,17 @@ eval create table t1 (word char(20) not null)ENGINE=$engine_type;
|
|||
--replace_result $LOAD_FILE LOAD_FILE
|
||||
eval load data infile '$LOAD_FILE' into table t1 ignore 1 lines;
|
||||
select count(*) from t1;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106 limit 1;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106 limit 2;
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106 limit 2,1;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
let $binlog_limit= 1;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
let $binlog_limit= 2;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
let $binlog_limit= 2,1;
|
||||
source include/show_binlog_events.inc;
|
||||
let $binlog_limit=;
|
||||
flush logs;
|
||||
|
||||
# We need an extra update before doing save_master_pos.
|
||||
|
|
@ -84,27 +80,24 @@ connection master;
|
|||
eval create table t2 (n int)ENGINE=$engine_type;
|
||||
insert into t2 values (1);
|
||||
source include/show_binlog_events.inc;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /infile '.+'/infile 'words.dat'/
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events in 'master-bin.000002';
|
||||
|
||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--replace_column 2 #
|
||||
show binary logs;
|
||||
sync_slave_with_master;
|
||||
--source include/wait_for_slave_to_start.inc
|
||||
--replace_column 2 #
|
||||
show binary logs;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /INFILE '.+'/INFILE 'words.dat'/
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events in 'slave-bin.000001' from 4;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
show binlog events in 'slave-bin.000002' from 4;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
let $binlog_file=;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
let $binlog_file= query_get_value(SHOW MASTER STATUS, File, 1);
|
||||
source include/show_binlog_events.inc;
|
||||
let $binlog_file=;
|
||||
|
||||
source include/check_slave_is_running.inc;
|
||||
|
||||
# Need to recode the following
|
||||
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ set global max_relay_log_size=8192-1; # mapped to 4096
|
|||
select @@global.max_relay_log_size;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
--echo #
|
||||
--echo # Test 2
|
||||
|
|
@ -55,7 +55,7 @@ set global max_relay_log_size=(5*4096);
|
|||
query_vertical select @@global.max_relay_log_size;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
--echo #
|
||||
--echo # Test 3: max_relay_log_size = 0
|
||||
|
|
@ -67,7 +67,7 @@ set global max_relay_log_size=0;
|
|||
query_vertical select @@global.max_relay_log_size;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
--echo #
|
||||
--echo # Test 4: Tests below are mainly to ensure that we have not coded with wrong assumptions
|
||||
|
|
@ -78,7 +78,6 @@ reset slave;
|
|||
# test of relay log rotation when the slave is stopped
|
||||
# (to make sure it does not crash).
|
||||
flush logs;
|
||||
source include/show_slave_status2.inc;
|
||||
|
||||
--echo #
|
||||
--echo # Test 5
|
||||
|
|
@ -93,10 +92,8 @@ flush logs;
|
|||
# log we just closed. But a trick to achieve this is do an update on the master.
|
||||
connection master;
|
||||
create table t1 (a int);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
sync_slave_with_master;
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
--echo #
|
||||
--echo # Test 6: one more rotation, to be sure Relay_Log_Space is correctly updated
|
||||
|
|
@ -105,10 +102,8 @@ source include/show_slave_status2.inc;
|
|||
flush logs;
|
||||
connection master;
|
||||
drop table t1;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
sync_slave_with_master;
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
connection master;
|
||||
# test that the absence of relay logs does not make a master crash
|
||||
|
|
|
|||
|
|
@ -56,24 +56,23 @@ connection master;
|
|||
--echo # since insert is done with transactional engine, expect a BEGIN
|
||||
--echo # at <start_pos>
|
||||
--echo
|
||||
--replace_result $start_pos <start_pos>
|
||||
--replace_column 5 #
|
||||
--eval show binlog events from $start_pos limit 1
|
||||
--let $binlog_start= $start_pos
|
||||
--let $binlog_limit= 1
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--echo
|
||||
--echo # Now the insert, one step after
|
||||
--echo
|
||||
--replace_result $start_pos <start_pos>
|
||||
--replace_column 2 # 5 #
|
||||
--eval show binlog events from $start_pos limit 1,1
|
||||
--let $binlog_start= $start_pos
|
||||
--let $binlog_limit= 1,1
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--echo
|
||||
--echo # and the COMMIT should be at <end_pos>
|
||||
--echo
|
||||
--replace_result $start_pos <start_pos> $end_pos <end_pos>
|
||||
--replace_column 2 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
--eval show binlog events from $start_pos limit 2,1
|
||||
--let $binlog_start= $start_pos
|
||||
--let $binlog_limit= 2,1
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--echo
|
||||
|
||||
|
|
@ -89,18 +88,17 @@ commit;
|
|||
--source include/select_ndb_apply_status.inc
|
||||
|
||||
connection master;
|
||||
--replace_result $start_pos <start_pos>
|
||||
--replace_column 5 #
|
||||
--eval show binlog events from $start_pos limit 1
|
||||
--let $binlog_start= $start_pos
|
||||
--let $binlog_limit= 1
|
||||
--source include/show_binlog_events.inc
|
||||
--echo
|
||||
--replace_result $start_pos <start_pos>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--eval show binlog events from $start_pos limit 1,2
|
||||
--let $binlog_start= $start_pos
|
||||
--let $binlog_limit= 1,2
|
||||
--source include/show_binlog_events.inc
|
||||
--echo
|
||||
--replace_result $start_pos <start_pos> $end_pos <end_pos>
|
||||
--replace_column 2 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/
|
||||
--eval show binlog events from $start_pos limit 3,1
|
||||
--let $binlog_start= $start_pos
|
||||
--let $binlog_limit= 3,1
|
||||
--source include/show_binlog_events.inc
|
||||
|
||||
--echo
|
||||
|
||||
|
|
|
|||
|
|
@ -9,36 +9,32 @@
|
|||
# RESET SLAVE.
|
||||
|
||||
-- source include/master-slave.inc
|
||||
connection master;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
sync_slave_with_master;
|
||||
let $status_items= Master_User, Master_Host;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
stop slave;
|
||||
source include/stop_slave.inc;
|
||||
change master to master_user='test';
|
||||
source include/show_slave_status2.inc;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
reset slave;
|
||||
source include/show_slave_status2.inc;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
start slave;
|
||||
source include/start_slave.inc;
|
||||
sync_with_master;
|
||||
source include/show_slave_status2.inc;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
# test of crash with temp tables & RESET SLAVE
|
||||
# (test to see if RESET SLAVE clears temp tables in memory and disk)
|
||||
stop slave;
|
||||
source include/stop_slave.inc;
|
||||
reset slave;
|
||||
start slave;
|
||||
source include/start_slave.inc;
|
||||
connection master;
|
||||
create temporary table t1 (a int);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
stop slave;
|
||||
sync_slave_with_master;
|
||||
source include/stop_slave.inc;
|
||||
reset slave;
|
||||
start slave;
|
||||
source include/start_slave.inc;
|
||||
sync_with_master;
|
||||
show status like 'slave_open_temp_tables';
|
||||
|
||||
|
|
@ -47,10 +43,9 @@ show status like 'slave_open_temp_tables';
|
|||
#
|
||||
|
||||
# clearing the status
|
||||
stop slave;
|
||||
source include/stop_slave.inc;
|
||||
reset slave;
|
||||
let $last_io_errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
||||
echo *** errno must be zero: $last_io_errno ***;
|
||||
source include/check_slave_no_error.inc;
|
||||
|
||||
#
|
||||
# verifying start slave resets Last_IO_Error and Last_IO_Errno.
|
||||
|
|
@ -58,19 +53,13 @@ echo *** errno must be zero: $last_io_errno ***;
|
|||
|
||||
change master to master_user='impossible_user_name';
|
||||
start slave;
|
||||
let $slave_io_errno= 1045;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
let $last_io_errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
||||
--disable_query_log
|
||||
eval SELECT $last_io_errno > 0 as ONE;
|
||||
--enable_query_log
|
||||
|
||||
source include/stop_slave.inc;
|
||||
change master to master_user='root';
|
||||
source include/start_slave.inc;
|
||||
let $last_io_errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
||||
let $last_io_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
||||
--echo *** last errno must be zero: $last_io_errno ***
|
||||
--echo *** last error must be blank: $last_io_error ***
|
||||
source include/check_slave_no_error.inc;
|
||||
|
||||
#
|
||||
# verifying reset slave resets Last_{IO,SQL}_Err{or,no}
|
||||
|
|
@ -79,19 +68,9 @@ let $last_io_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
|||
source include/stop_slave.inc;
|
||||
change master to master_user='impossible_user_name';
|
||||
start slave;
|
||||
let $slave_io_errno= 1045;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
let $last_io_errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
||||
--disable_query_log
|
||||
eval SELECT $last_io_errno > 0 as ONE;
|
||||
--enable_query_log
|
||||
|
||||
source include/stop_slave.inc;
|
||||
reset slave;
|
||||
let $last_io_errno= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
||||
let $last_io_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Error, 1);
|
||||
let $last_sql_errno= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||
let $last_sql_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Error, 1);
|
||||
--echo *** io last errno must be zero: $last_io_errno ***
|
||||
--echo *** io last error must be blank: $last_io_error ***
|
||||
--echo *** sql last errno must be zero: $last_sql_errno ***
|
||||
--echo *** sql last error must be blank: $last_sql_error ***
|
||||
source include/check_slave_no_error.inc;
|
||||
|
|
|
|||
|
|
@ -259,10 +259,7 @@ DELETE FROM t1;
|
|||
query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
sync_slave_with_master;
|
||||
set @@global.slave_exec_mode= default;
|
||||
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;
|
||||
source include/check_slave_is_running.inc;
|
||||
query_vertical SELECT COUNT(*) FROM t1 ORDER BY c1,c2;
|
||||
|
||||
# BUG#37076: TIMESTAMP/DATETIME values are not replicated correctly
|
||||
|
|
@ -376,11 +373,10 @@ INSERT INTO t3 VALUES (1, "", 1);
|
|||
INSERT INTO t3 VALUES (2, repeat(_utf8'a', 128), 2);
|
||||
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
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;
|
||||
# 1535 = ER_BINLOG_ROW_WRONG_TABLE_DEF
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
connection slave;
|
||||
|
|
@ -405,11 +401,10 @@ INSERT INTO t5 VALUES (1, "", 1);
|
|||
INSERT INTO t5 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
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;
|
||||
# 1535 = ER_BINLOG_ROW_WRONG_TABLE_DEF
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
connection slave;
|
||||
|
|
@ -424,11 +419,10 @@ INSERT INTO t6 VALUES (1, "", 1);
|
|||
INSERT INTO t6 VALUES (2, repeat(_utf8'a', 255), 2);
|
||||
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_to_stop.inc;
|
||||
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;
|
||||
# 1535 = ER_BINLOG_ROW_WRONG_TABLE_DEF
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
connection master;
|
||||
RESET MASTER;
|
||||
connection slave;
|
||||
|
|
|
|||
|
|
@ -138,9 +138,7 @@ SELECT * FROM t2;
|
|||
sync_slave_with_master;
|
||||
--echo **** On Slave ****
|
||||
SELECT * FROM t2;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 35 <Last_IO_Errno> 36 <Last_IO_Error> 38 <Last_SQL_Error>
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (4);
|
||||
|
|
@ -149,12 +147,10 @@ sync_slave_with_master;
|
|||
connection master;
|
||||
INSERT INTO t4 VALUES (4);
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 35 <Last_IO_Errno> 36 <Last_IO_Error> 38 <Last_SQL_Error>
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
--let $slave_skip_counter= 2
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (5);
|
||||
|
|
@ -163,12 +159,10 @@ sync_slave_with_master;
|
|||
connection master;
|
||||
INSERT INTO t5 VALUES (5,10,25);
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 35 <Last_IO_Errno> 36 <Last_IO_Error> 38 <Last_SQL_Error>
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
--let $slave_skip_counter= 2
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (6);
|
||||
|
|
@ -177,19 +171,15 @@ sync_slave_with_master;
|
|||
connection master;
|
||||
INSERT INTO t6 VALUES (6,12,36);
|
||||
connection slave;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 35 <Last_IO_Errno> 36 <Last_IO_Error> 38 <Last_SQL_Error>
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=2;
|
||||
START SLAVE;
|
||||
--let $slave_skip_counter= 2
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error_and_skip.inc
|
||||
|
||||
connection master;
|
||||
INSERT INTO t9 VALUES (6);
|
||||
sync_slave_with_master;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 20 <Last_Error> 22 # 23 # 33 # 35 <Last_IO_Errno> 36 <Last_IO_Error> 38 <Last_SQL_Error>
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
--source include/check_slave_is_running.inc
|
||||
|
||||
# Testing some tables extra field that can be null and cannot be null
|
||||
# (but have default values)
|
||||
|
|
|
|||
96
mysql-test/include/check_concurrent_insert.inc
Normal file
96
mysql-test/include/check_concurrent_insert.inc
Normal file
|
|
@ -0,0 +1,96 @@
|
|||
#
|
||||
# SUMMARY
|
||||
# Check if statement reading table '$table' allows concurrent
|
||||
# inserts in it.
|
||||
#
|
||||
# PARAMETERS
|
||||
# $table Table in which concurrent inserts should be allowed.
|
||||
# $con_aux1 Name of the first auxiliary connection to be used by this
|
||||
# script.
|
||||
# $con_aux2 Name of the second auxiliary connection to be used by this
|
||||
# script.
|
||||
# $statement Statement to be checked.
|
||||
# $restore_table Table which might be modified by statement to be checked
|
||||
# and thus needs backing up before its execution and
|
||||
# restoring after it (can be empty).
|
||||
#
|
||||
# EXAMPLE
|
||||
# lock_sync.test
|
||||
#
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
# Reset DEBUG_SYNC facility for safety.
|
||||
set debug_sync= "RESET";
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
{
|
||||
--eval create temporary table t_backup select * from $restore_table;
|
||||
}
|
||||
|
||||
connection $con_aux1;
|
||||
set debug_sync='after_lock_tables_takes_lock SIGNAL parked WAIT_FOR go';
|
||||
--send_eval $statement;
|
||||
|
||||
connection $con_aux2;
|
||||
set debug_sync='now WAIT_FOR parked';
|
||||
--send_eval insert into $table (i) values (0);
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
connection default;
|
||||
# Wait until concurrent insert is successfully executed while
|
||||
# statement being checked has its tables locked.
|
||||
# We use wait_condition.inc instead of simply reaping
|
||||
# concurrent insert here in order to avoid deadlocks if test
|
||||
# fails and to time out gracefully instead.
|
||||
let $wait_condition=
|
||||
select count(*) = 0 from information_schema.processlist
|
||||
where info = "insert into $table (i) values (0)";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
if ($success)
|
||||
{
|
||||
# Apparently concurrent insert was successfully executed.
|
||||
# To be safe against wait_condition.inc succeeding due to
|
||||
# races let us first reap concurrent insert to ensure that
|
||||
# it has really been successfully executed.
|
||||
connection $con_aux2;
|
||||
--reap
|
||||
connection default;
|
||||
set debug_sync= 'now SIGNAL go';
|
||||
connection $con_aux1;
|
||||
--reap
|
||||
connection default;
|
||||
--echo Success: '$statement' allows concurrent inserts into '$table'.
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
# Waiting has timed out. Apparently concurrent insert was blocked.
|
||||
# So to be able to continue we need to end our statement first.
|
||||
set debug_sync= 'now SIGNAL go';
|
||||
connection $con_aux1;
|
||||
--reap
|
||||
connection $con_aux2;
|
||||
--reap
|
||||
connection default;
|
||||
--echo Error: '$statement' doesn't allow concurrent inserts into '$table'!
|
||||
}
|
||||
|
||||
--eval delete from $table where i = 0;
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
{
|
||||
--eval truncate table $restore_table;
|
||||
--eval insert into $restore_table select * from t_backup;
|
||||
drop temporary table t_backup;
|
||||
}
|
||||
|
||||
# Clean-up. Reset DEBUG_SYNC facility after use.
|
||||
set debug_sync= "RESET";
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
81
mysql-test/include/check_no_concurrent_insert.inc
Normal file
81
mysql-test/include/check_no_concurrent_insert.inc
Normal file
|
|
@ -0,0 +1,81 @@
|
|||
#
|
||||
# SUMMARY
|
||||
# Check that statement reading table '$table' doesn't allow concurrent
|
||||
# inserts in it.
|
||||
#
|
||||
# PARAMETERS
|
||||
# $table Table in which concurrent inserts should be disallowed.
|
||||
# $con_aux1 Name of the first auxiliary connection to be used by this
|
||||
# script.
|
||||
# $con_aux2 Name of the second auxiliary connection to be used by this
|
||||
# script.
|
||||
# $statement Statement to be checked.
|
||||
# $restore_table Table which might be modified by statement to be checked
|
||||
# and thus needs backing up before its execution and
|
||||
# restoring after it (can be empty).
|
||||
#
|
||||
# EXAMPLE
|
||||
# lock_sync.test
|
||||
#
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
# Reset DEBUG_SYNC facility for safety.
|
||||
set debug_sync= "RESET";
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
{
|
||||
--eval create temporary table t_backup select * from $restore_table;
|
||||
}
|
||||
|
||||
connection $con_aux1;
|
||||
set debug_sync='after_lock_tables_takes_lock SIGNAL parked WAIT_FOR go';
|
||||
--send_eval $statement;
|
||||
|
||||
connection $con_aux2;
|
||||
set debug_sync='now WAIT_FOR parked';
|
||||
--send_eval insert into $table (i) values (0);
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
connection default;
|
||||
# Wait until concurrent insert is successfully blocked because
|
||||
# of our statement.
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state = "Locked" and info = "insert into $table (i) values (0)";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
set debug_sync= 'now SIGNAL go';
|
||||
connection $con_aux1;
|
||||
--reap
|
||||
connection $con_aux2;
|
||||
--reap
|
||||
connection default;
|
||||
|
||||
if ($success)
|
||||
{
|
||||
--echo Success: '$statement' doesn't allow concurrent inserts into '$table'.
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
--echo Error: '$statement' allows concurrent inserts into '$table'!
|
||||
}
|
||||
|
||||
--eval delete from $table where i = 0;
|
||||
|
||||
if (`SELECT '$restore_table' <> ''`)
|
||||
{
|
||||
--eval truncate table $restore_table;
|
||||
--eval insert into $restore_table select * from t_backup;
|
||||
drop temporary table t_backup;
|
||||
}
|
||||
|
||||
# Clean-up. Reset DEBUG_SYNC facility after use.
|
||||
set debug_sync= "RESET";
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
71
mysql-test/include/check_no_row_lock.inc
Normal file
71
mysql-test/include/check_no_row_lock.inc
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
#
|
||||
# SUMMARY
|
||||
# Check if statement affecting or reading table '$table' doesn't
|
||||
# take any kind of locks on its rows.
|
||||
#
|
||||
# PARAMETERS
|
||||
# $table Table for which presence of row locks should be checked.
|
||||
# $con_aux Name of auxiliary connection to be used by this script.
|
||||
# $statement Statement to be checked.
|
||||
#
|
||||
# EXAMPLE
|
||||
# innodb_mysql_lock2.test
|
||||
#
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
connection default;
|
||||
begin;
|
||||
--eval select * from $table for update;
|
||||
|
||||
connection $con_aux;
|
||||
begin;
|
||||
--send_eval $statement;
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
connection default;
|
||||
# Wait until statement is successfully executed while
|
||||
# all rows in table are X-locked. This means that it
|
||||
# does not acquire any row locks.
|
||||
# We use wait_condition.inc instead of simply reaping
|
||||
# statement here in order to avoid deadlocks if test
|
||||
# fails and to time out gracefully instead.
|
||||
let $wait_condition=
|
||||
select count(*) = 0 from information_schema.processlist
|
||||
where info = "$statement";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
if ($success)
|
||||
{
|
||||
# Apparently statement was successfully executed and thus it
|
||||
# has not required any row locks.
|
||||
# To be safe against wait_condition.inc succeeding due to
|
||||
# races let us first reap the statement being checked to
|
||||
# ensure that it has been successfully executed.
|
||||
connection $con_aux;
|
||||
--reap
|
||||
rollback;
|
||||
connection default;
|
||||
rollback;
|
||||
--echo Success: '$statement' doesn't take row locks on '$table'.
|
||||
}
|
||||
if (!$success)
|
||||
{
|
||||
# Waiting has timed out. Apparently statement was blocked on
|
||||
# some row lock. So to be able to continue we need to unlock
|
||||
# rows first.
|
||||
rollback;
|
||||
connection $con_aux;
|
||||
--reap
|
||||
rollback;
|
||||
connection default;
|
||||
--echo Error: '$statement' takes some row locks on '$table'!
|
||||
}
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
61
mysql-test/include/check_shared_row_lock.inc
Normal file
61
mysql-test/include/check_shared_row_lock.inc
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
#
|
||||
# SUMMARY
|
||||
# Check if statement reading table '$table' takes shared locks
|
||||
# on some of its rows.
|
||||
#
|
||||
# PARAMETERS
|
||||
# $table Table for which presence of row locks should be checked.
|
||||
# $con_aux Name of auxiliary connection to be used by this script.
|
||||
# $statement Statement to be checked.
|
||||
# $wait_statement Sub-statement which is supposed to acquire locks (should
|
||||
# be the same as $statement for ordinary statements).
|
||||
#
|
||||
# EXAMPLE
|
||||
# innodb_mysql_lock2.test
|
||||
#
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
connection default;
|
||||
begin;
|
||||
--eval select * from $table for update;
|
||||
|
||||
connection $con_aux;
|
||||
begin;
|
||||
--send_eval $statement;
|
||||
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
connection default;
|
||||
# Wait until statement is successfully blocked because
|
||||
# all rows in table are X-locked. This means that at
|
||||
# least it acquires S-locks on some of rows.
|
||||
let $wait_condition=
|
||||
select count(*) = 1 from information_schema.processlist
|
||||
where state in ("Sending data","statistics", "preparing") and
|
||||
info = "$wait_statement";
|
||||
--source include/wait_condition.inc
|
||||
|
||||
--disable_result_log
|
||||
--disable_query_log
|
||||
|
||||
rollback;
|
||||
|
||||
connection $con_aux;
|
||||
--reap
|
||||
rollback;
|
||||
|
||||
connection default;
|
||||
--enable_result_log
|
||||
--enable_query_log
|
||||
|
||||
if ($success)
|
||||
{
|
||||
--echo Success: '$statement' takes shared row locks on '$table'.
|
||||
}
|
||||
|
||||
if (!$success)
|
||||
{
|
||||
--echo Error: '$statement' hasn't taken shared row locks on '$table'!
|
||||
}
|
||||
18
mysql-test/include/check_slave_is_running.inc
Normal file
18
mysql-test/include/check_slave_is_running.inc
Normal file
|
|
@ -0,0 +1,18 @@
|
|||
# ==== Purpose ====
|
||||
#
|
||||
# Assert that the slave threads are running and don't have any errors.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# --source include/check_slave_running.inc
|
||||
|
||||
--echo Checking that both slave threads are running.
|
||||
|
||||
--let $slave_sql_running = query_get_value(SHOW SLAVE STATUS, Slave_SQL_Running, 1)
|
||||
--let $slave_io_running = query_get_value(SHOW SLAVE STATUS, Slave_IO_Running, 1)
|
||||
|
||||
if (`SELECT '$slave_sql_running' != 'Yes' OR '$slave_io_running' != 'Yes'`) {
|
||||
--echo Slave not running: Slave_SQL_Running = $slave_sql_running Slave_IO_Running = $slave_io_running
|
||||
--source include/show_rpl_debug_info.inc
|
||||
--die Expected slave to be running, but it was not running.
|
||||
}
|
||||
17
mysql-test/include/check_slave_no_error.inc
Normal file
17
mysql-test/include/check_slave_no_error.inc
Normal file
|
|
@ -0,0 +1,17 @@
|
|||
# ==== Purpose ====
|
||||
#
|
||||
# Assert that Slave_SQL_Error and Slave_IO_Error are empty.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# --let $slave_param= Exec_Master_Log_Pos
|
||||
# --let $slave_param_value= 4711
|
||||
# --source include/check_slave_running.inc
|
||||
|
||||
--let $slave_param= Last_SQL_Errno
|
||||
--let $slave_param_value= 0
|
||||
--source include/check_slave_param.inc
|
||||
|
||||
--let $slave_param= Last_IO_Errno
|
||||
--let $slave_param_value= 0
|
||||
--source include/check_slave_param.inc
|
||||
16
mysql-test/include/check_slave_param.inc
Normal file
16
mysql-test/include/check_slave_param.inc
Normal file
|
|
@ -0,0 +1,16 @@
|
|||
# ==== Purpose ====
|
||||
#
|
||||
# Assert that a given column in SHOW SLAVE STATUS has a given value.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# --let $slave_param= Exec_Master_Log_Pos
|
||||
# --let $slave_param_value= 4711
|
||||
# --source include/check_slave_param.inc
|
||||
|
||||
--let $_param_value= query_get_value(SHOW SLAVE STATUS, $slave_param, 1)
|
||||
if (`SELECT '$_param_value' != '$slave_param_value'`) {
|
||||
--echo Wrong value for $slave_param. Expected '$slave_param_value', got '$_param_value'
|
||||
--source include/show_rpl_debug_info.inc
|
||||
--die Wrong value for slave parameter
|
||||
}
|
||||
70
mysql-test/include/get_relay_log_pos.inc
Normal file
70
mysql-test/include/get_relay_log_pos.inc
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
# For a given event which is at position $master_log_pos in the the master's
|
||||
# binary log, returns its position in the slave's relay log file
|
||||
# $relay_log_file.
|
||||
# The position is stored in the variable $relay_log_pos.
|
||||
|
||||
# Usage:
|
||||
# let $relay_log_file= 'relay-log-bin.000001';
|
||||
# let $master_log_pos= 106;
|
||||
# source include/get_relay_log_pos.inc;
|
||||
# # at this point, get_relay_log_pos.inc sets $relay_log_pos. echo position
|
||||
# # in $relay_log_file: $relay_log_pos.
|
||||
|
||||
if (`SELECT '$relay_log_file' = ''`)
|
||||
{
|
||||
--die 'variable $relay_log_file is null'
|
||||
}
|
||||
|
||||
if (`SELECT '$master_log_pos' = ''`)
|
||||
{
|
||||
--die 'variable $master_log_pos is null'
|
||||
}
|
||||
|
||||
let $MYSQLD_DATADIR= `select @@datadir`;
|
||||
let $_suffix= `SELECT UUID()`;
|
||||
let $_tmp_file= $MYSQLTEST_VARDIR/tmp/mysqlbinlog.$_suffix;
|
||||
--exec $MYSQL_BINLOG $MYSQLD_DATADIR/$relay_log_file > $_tmp_file
|
||||
|
||||
# All queries in this file should not be logged.
|
||||
--disable_query_log
|
||||
|
||||
--disable_warnings
|
||||
DROP TEMPORARY TABLE IF EXISTS mysqlbinlog_events;
|
||||
DROP TEMPORARY TABLE IF EXISTS events_at;
|
||||
DROP TEMPORARY TABLE IF EXISTS events_pos;
|
||||
CREATE TEMPORARY TABLE mysqlbinlog_events(c1 INT AUTO_INCREMENT KEY, c2 varchar(256));
|
||||
|
||||
# Event position is in the comments output by mysqlbinlog, we load this
|
||||
# comments into the table
|
||||
# '# at 106'
|
||||
# '# .... end_log_pos 46'
|
||||
eval LOAD DATA LOCAL INFILE '$_tmp_file' INTO TABLE mysqlbinlog_events
|
||||
LINES STARTING BY '#' (c2) SET c1 = NULL;
|
||||
--enable_warnings
|
||||
|
||||
# Event pos in relay log file is inserted into table events_at
|
||||
CREATE TEMPORARY TABLE events_at(c1 INT AUTO_INCREMENT KEY, c2 varchar(256))
|
||||
SELECT c2 FROM mysqlbinlog_events WHERE c2 LIKE ' at%' ORDER BY c1;
|
||||
|
||||
# Event pos in master log file is inserted into table events_pos
|
||||
CREATE TEMPORARY TABLE events_pos(c1 INT AUTO_INCREMENT KEY, c2 varchar(256))
|
||||
SELECT c2 FROM mysqlbinlog_events WHERE c2 LIKE '% end_log_pos %' ORDER BY c1;
|
||||
|
||||
# events_at events_pos
|
||||
# c1------c2-------------------------- c1------c2------------------------
|
||||
# 1 ev1's begin pos in relay log 1 ev1's end pos in master log
|
||||
# 2 ev2's begin pos in relay log 2 ev2's end pos in master log
|
||||
# 3 ev3's begin pos in relay log 3 ev3's end pos in master log
|
||||
# events always keep the same sequence.
|
||||
# Because event[N]'s end pos is equal to event[N+1]'s begin pos we want to
|
||||
# find event's end pos in relay log, we can find the right relay_log_pos
|
||||
# using the relationship that 'events_pos.c1 = events_at.c1 + 1'
|
||||
#
|
||||
# There is a fault that we can't get the relay log position of the last event,
|
||||
# as it is not output by mysqlbinlog
|
||||
let $relay_log_pos= `SELECT SUBSTRING(a.c2, 5)
|
||||
FROM events_at a, events_pos b
|
||||
WHERE a.c1=b.c1+1 and b.c2 LIKE '% $master_log_pos%'`;
|
||||
DROP TEMPORARY TABLE mysqlbinlog_events, events_at, events_pos;
|
||||
--remove_file $_tmp_file
|
||||
--enable_query_log
|
||||
|
|
@ -80,9 +80,8 @@ eval INSERT INTO t1 SET f1= $MAX + 1;
|
|||
SELECT MAX(f1) FROM t1;
|
||||
if ($show_binlog)
|
||||
{
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
||||
--let $binlog_file= master-bin.$_log_num_s
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
sync_slave_with_master;
|
||||
|
||||
|
|
@ -93,9 +92,8 @@ connection slave;
|
|||
SELECT MAX(f1) FROM t1;
|
||||
if ($show_binlog)
|
||||
{
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||
--let $binlog_file= slave-bin.$_log_num_s
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
|
||||
###############################################################
|
||||
|
|
@ -111,9 +109,8 @@ let $my_stmt= ERROR: YOU FORGOT TO FILL IN THE STATEMENT;
|
|||
SELECT MAX(f1) FROM t1;
|
||||
if ($show_binlog)
|
||||
{
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
||||
--let $binlog_file= master-bin.$_log_num_s
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
sync_slave_with_master;
|
||||
|
||||
|
|
@ -124,9 +121,8 @@ connection slave;
|
|||
SELECT MAX(f1) FROM t1;
|
||||
if ($show_binlog)
|
||||
{
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||
--let $binlog_file= slave-bin.$_log_num_s
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
|
||||
###############################################################
|
||||
|
|
@ -150,9 +146,8 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: MASTER: The INSERT is ',
|
|||
--enable_query_log
|
||||
if ($show_binlog)
|
||||
{
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS IN 'master-bin.$_log_num_s';
|
||||
--let $binlog_file= master-bin.$_log_num_s
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
sync_slave_with_master;
|
||||
|
||||
|
|
@ -171,9 +166,8 @@ eval SELECT CONCAT(CONCAT('TEST-INFO: SLAVE: The INSERT is ',
|
|||
--enable_query_log
|
||||
if ($show_binlog)
|
||||
{
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
eval SHOW BINLOG EVENTS IN 'slave-bin.$_log_num_s';
|
||||
--let $binlog_file= slave-bin.$_log_num_s
|
||||
--source include/show_binlog_events.inc
|
||||
}
|
||||
|
||||
###############################################################
|
||||
|
|
|
|||
|
|
@ -1,10 +1,45 @@
|
|||
# $binlog_start can be set by caller or take a default value
|
||||
##############################################################################
|
||||
# Show binary log events
|
||||
#
|
||||
# Useage:
|
||||
# let $binlog_file= master-bin.000002;
|
||||
# let $binlog_start= 106;
|
||||
# let $binlog_limit= 1, 3;
|
||||
# source include/show_binlog_events.inc;
|
||||
#
|
||||
# It shows the first binary log file if $binlog_file is not given.
|
||||
#
|
||||
# It shows events from the end position of the description event if
|
||||
# $binlog_start is not given.
|
||||
#
|
||||
# It shows all of the events if $binlog_limit is not given.
|
||||
# $binlog_format has the same semantic with 'LIMIT' option.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
if (!$binlog_start)
|
||||
{
|
||||
let $binlog_start=106;
|
||||
# If $binlog_start is not set, we will set it as the second event's position.
|
||||
# The first event(Description Event) is always ignored. For description
|
||||
# event's length might be changed because of adding new events, 'SHOW BINLOG
|
||||
# EVENTS LIMIT 1' is used to get the right value.
|
||||
--let $binlog_start= query_get_value(SHOW BINLOG EVENTS LIMIT 1, End_log_pos, 1)
|
||||
}
|
||||
|
||||
--let $_statement=show binlog events
|
||||
if (`SELECT '$binlog_file' <> ''`)
|
||||
{
|
||||
--let $_statement= $_statement in '$binlog_file'
|
||||
}
|
||||
|
||||
--let $_statement= $_statement from $binlog_start
|
||||
|
||||
if (`SELECT '$binlog_limit' <> ''`)
|
||||
{
|
||||
--let $_statement= $_statement limit $binlog_limit
|
||||
}
|
||||
|
||||
--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR $binlog_start <binlog_start>
|
||||
--replace_column 2 # 4 # 5 #
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /table_id: [0-9]+/table_id: #/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/
|
||||
--eval show binlog events from $binlog_start
|
||||
--eval $_statement
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@ let $_con= $CURRENT_CONNECTION;
|
|||
--echo
|
||||
--echo [on $_con]
|
||||
--echo
|
||||
SELECT NOW();
|
||||
--echo **** SHOW SLAVE STATUS on $_con ****
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
--echo
|
||||
|
|
@ -70,6 +71,7 @@ if (`SELECT '$_master_con' != ''`)
|
|||
--echo [on $_master_con]
|
||||
connection $_master_con;
|
||||
--echo
|
||||
SELECT NOW();
|
||||
--echo **** SHOW MASTER STATUS on $_master_con ****
|
||||
query_vertical SHOW MASTER STATUS;
|
||||
--echo
|
||||
|
|
|
|||
|
|
@ -1,6 +1,25 @@
|
|||
# Include file to show the slave status, masking out some information
|
||||
# that varies depending on where the test is executed.
|
||||
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 # 35 # 36 #
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
--let $_items=$status_items
|
||||
if (`SELECT "XX$status_items" = "XX"`)
|
||||
{
|
||||
--die 'Variable status_items is NULL'
|
||||
}
|
||||
|
||||
--disable_query_log
|
||||
--vertical_results
|
||||
|
||||
while (`SELECT "XX$_items" <> "XX"`)
|
||||
{
|
||||
--let $_name= `SELECT SUBSTRING_INDEX('$_items', ',', 1)`
|
||||
--let $_items= `SELECT LTRIM(SUBSTRING('$_items', LENGTH('$_name') + 2))`
|
||||
|
||||
--let $_value= query_get_value(SHOW SLAVE STATUS, $_name, 1)
|
||||
|
||||
--replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
|
||||
--eval SELECT "$_value" AS $_name
|
||||
}
|
||||
|
||||
--horizontal_results
|
||||
--enable_query_log
|
||||
|
|
|
|||
|
|
@ -1,8 +0,0 @@
|
|||
# Include file to show the slave status, masking out some information
|
||||
# that varies depending on where the test is executed.
|
||||
|
||||
# masked out log positions
|
||||
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
query_vertical SHOW SLAVE STATUS;
|
||||
|
|
@ -22,10 +22,9 @@ eval $test_insert;
|
|||
|
||||
connection slave;
|
||||
START SLAVE;
|
||||
--source include/wait_for_slave_sql_to_stop.inc
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 4 # 7 # 8 # 9 # 16 # 22 # 23 # 33 # 35 # 36 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
--let $slave_sql_errno= 1535
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
|
||||
# The following should be 0
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ while (`SELECT INSTR("$_last_event","$wait_binlog_event") = 0`)
|
|||
dec $_loop_count;
|
||||
if (!$_loop_count)
|
||||
{
|
||||
SHOW BINLOG EVENTS;
|
||||
--source include/show_rpl_debug_info.inc
|
||||
--die ERROR: failed while waiting for $wait_binlog_event in binlog
|
||||
}
|
||||
real_sleep 0.1;
|
||||
|
|
|
|||
|
|
@ -1,23 +1,59 @@
|
|||
# ==== Purpose ====
|
||||
#
|
||||
# Waits until the IO thread of the current connection has got an
|
||||
# error, or until a timeout is reached.
|
||||
# error, or until a timeout is reached. Also waits until the IO
|
||||
# thread has completely stopped.
|
||||
#
|
||||
# ==== Usage ====
|
||||
#
|
||||
# # Wait several errors.
|
||||
# let $slave_io_errno= 1, 2, 3;
|
||||
# source include/wait_for_slave_io_error.inc;
|
||||
#
|
||||
# Parameters to this macro are $slave_timeout and
|
||||
# $slave_keep_connection. See wait_for_slave_param.inc for
|
||||
# descriptions.
|
||||
# # Print error message
|
||||
# let $slave_io_errno= 1;
|
||||
# let $show_slave_io_error= 1;
|
||||
# source include/wait_for_slave_io_error.inc;
|
||||
#
|
||||
# Parameters:
|
||||
#
|
||||
# $slave_io_errno
|
||||
# The expected IO error numbers. This is required.
|
||||
# (After BUG#41956 has been fixed, this will be required to be a
|
||||
# symbolic name instead of a numbers.)
|
||||
#
|
||||
# $show_slave_io_error
|
||||
# If set, will print the error to the query log.
|
||||
#
|
||||
# $slave_timeout
|
||||
# See wait_for_slave_param.inc for description.
|
||||
#
|
||||
# $master_connection
|
||||
# See wait_for_slave_param.inc for description.
|
||||
|
||||
if (`SELECT '$slave_io_errno' = ''`) {
|
||||
--die !!!ERROR IN TEST: you must set \$slave_io_errno before sourcing wait_for_slave_io_error.inc
|
||||
}
|
||||
|
||||
let $old_slave_param_comparison= $slave_param_comparison;
|
||||
|
||||
let $slave_param= Last_IO_Errno;
|
||||
let $slave_param_comparison= !=;
|
||||
let $slave_param_value= 0;
|
||||
let $slave_error_message= Failed while waiting for slave to produce an error in its sql thread;
|
||||
source include/wait_for_slave_param.inc;
|
||||
let $slave_error_message= ;
|
||||
|
||||
let $slave_param_comparison= $old_slave_param_comparison;
|
||||
|
||||
let $_error= query_get_value(SHOW SLAVE STATUS, Last_IO_Errno, 1);
|
||||
if (`SELECT $_error NOT IN ($slave_io_errno)`) {
|
||||
--echo **** Slave stopped with wrong error code: $_error (expected $slave_io_errno) ****
|
||||
source include/show_rpl_debug_info.inc;
|
||||
--echo **** Slave stopped with wrong error code: $_error (expected $slave_io_errno) ****
|
||||
--die Slave stopped with wrong error code
|
||||
}
|
||||
|
||||
if ($show_slave_io_error)
|
||||
{
|
||||
let $error= query_get_value("SHOW SLAVE STATUS", Last_IO_Error, 1);
|
||||
echo Last_IO_Error = $error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -78,5 +78,5 @@ if (!$_slave_timeout_counter)
|
|||
--echo Current connection is '$CURRENT_CONNECTION'
|
||||
echo Note: the following output may have changed since the failure was detected;
|
||||
source include/show_rpl_debug_info.inc;
|
||||
exit;
|
||||
die;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,6 +14,9 @@
|
|||
# The expected SQL error number. This is required.
|
||||
# (After BUG#41956 has been fixed, this will be required to be a
|
||||
# symbolic name instead of a number.)
|
||||
#
|
||||
# $show_slave_sql_error
|
||||
# If set, will print the error to the query log.
|
||||
#
|
||||
# $slave_timeout
|
||||
# See wait_for_slave_param.inc for description.
|
||||
|
|
@ -22,8 +25,7 @@
|
|||
# See wait_for_slave_param.inc for description.
|
||||
|
||||
if (`SELECT '$slave_sql_errno' = ''`) {
|
||||
--echo !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_fro_slave_sql_error.inc
|
||||
exit;
|
||||
--die !!!ERROR IN TEST: you must set \$slave_sql_errno before sourcing wait_for_slave_sql_error.inc
|
||||
}
|
||||
|
||||
let $slave_param= Slave_SQL_Running;
|
||||
|
|
@ -33,7 +35,14 @@ source include/wait_for_slave_param.inc;
|
|||
|
||||
let $_error= query_get_value(SHOW SLAVE STATUS, Last_SQL_Errno, 1);
|
||||
if (`SELECT '$_error' != '$slave_sql_errno'`) {
|
||||
--echo Slave stopped with wrong error code: $_error (expected $slave_sql_errno)
|
||||
--echo **** Slave stopped with wrong error code: $_error (expected $slave_sql_errno) ****
|
||||
source include/show_rpl_debug_info.inc;
|
||||
exit;
|
||||
--echo **** Slave stopped with wrong error code: $_error (expected $slave_sql_errno) ****
|
||||
--die Slave stopped with wrong error code
|
||||
}
|
||||
|
||||
if ($show_slave_sql_error)
|
||||
{
|
||||
let $error= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
|
||||
echo Last_SQL_Error = $error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -22,17 +22,30 @@
|
|||
#
|
||||
# $master_connection
|
||||
# See wait_for_slave_param.inc for description.
|
||||
#
|
||||
# $slave_skip_counter
|
||||
# If set, skip this number of events. If not set, skip one event.
|
||||
#
|
||||
# $not_switch_connection If set, don't switch to slave and don't switch back
|
||||
# master.
|
||||
#
|
||||
|
||||
echo --source include/wait_for_slave_sql_error_and_skip.inc;
|
||||
connection slave;
|
||||
source include/wait_for_slave_sql_error.inc;
|
||||
if ($show_sql_error)
|
||||
if (!$not_switch_connection)
|
||||
{
|
||||
let $error= query_get_value("SHOW SLAVE STATUS", Last_SQL_Error, 1);
|
||||
echo Last_SQL_Error = $error;
|
||||
connection slave;
|
||||
}
|
||||
source include/wait_for_slave_sql_error.inc;
|
||||
|
||||
# skip the erroneous statement
|
||||
set global sql_slave_skip_counter=1;
|
||||
if ($slave_skip_counter) {
|
||||
eval SET GLOBAL SQL_SLAVE_SKIP_COUNTER= $slave_skip_counter;
|
||||
}
|
||||
if (!$slave_skip_counter) {
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
}
|
||||
source include/start_slave.inc;
|
||||
connection master;
|
||||
if (!$not_switch_connection)
|
||||
{
|
||||
connection master;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
if (`SELECT STRCMP('$status_type', '') * STRCMP(UPPER('$status_type'), 'SESSION') * STRCMP(UPPER('$status_type'), 'GLOBAL')`)
|
||||
{
|
||||
--echo **** ERROR: Unknown type of variable status_type: allowed values are: SESSION or GLOBAL ****
|
||||
exit;
|
||||
die;
|
||||
}
|
||||
|
||||
let $_status_timeout_counter= $status_timeout;
|
||||
|
|
@ -60,7 +60,7 @@ while (`SELECT NOT('$_show_status_value' $_status_var_comparsion '$status_var_va
|
|||
--echo **** Showing STATUS, PROCESSLIST ****
|
||||
eval SHOW $status_type STATUS LIKE '$status_var';
|
||||
SHOW PROCESSLIST;
|
||||
exit;
|
||||
die;
|
||||
}
|
||||
dec $_status_timeout_counter;
|
||||
sleep 0.1;
|
||||
|
|
|
|||
|
|
@ -122,5 +122,6 @@ if (!$success)
|
|||
--echo # Timeout in wait_until_count_sessions.inc
|
||||
--echo # Number of sessions expected: <= $count_sessions found: $current_sessions
|
||||
SHOW PROCESSLIST;
|
||||
--die Timeout in wait_until_count_sessions.inc
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -12,11 +12,11 @@ alter table t1 enable keys;;
|
|||
insert into t2 values (1);
|
||||
insert into t1 values (1, 1, 1);
|
||||
set session debug="-d,sleep_alter_enable_indexes";
|
||||
show binlog events in 'master-bin.000001' 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`; insert into t2 values (1)
|
||||
master-bin.000001 # Query 1 # use `test`; alter table t1 enable keys
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values (1, 1, 1)
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (1)
|
||||
master-bin.000001 # Query # # use `test`; alter table t1 enable keys
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values (1, 1, 1)
|
||||
drop tables t1, t2;
|
||||
End of 5.0 tests
|
||||
drop table if exists t1, t2, t3;
|
||||
|
|
@ -41,17 +41,17 @@ alter table t2 change c vc varchar(100) default 'Test2', rename to t1;;
|
|||
rename table t1 to t3;
|
||||
drop table t3;
|
||||
set session debug="-d,sleep_alter_before_main_binlog";
|
||||
show binlog events in 'master-bin.000001' 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`; alter table t1 change i c char(10) default 'Test1'
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t1 values ()
|
||||
master-bin.000001 # Query 1 # use `test`; alter table t1 change c vc varchar(100) default 'Test2'
|
||||
master-bin.000001 # Query 1 # use `test`; rename table t1 to t2
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query 1 # use `test`; create table t1 (i int)
|
||||
master-bin.000001 # Query 1 # use `test`; alter table t1 change i c char(10) default 'Test3', rename to t2
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t2 values ()
|
||||
master-bin.000001 # Query 1 # use `test`; alter table t2 change c vc varchar(100) default 'Test2', rename to t1
|
||||
master-bin.000001 # Query 1 # use `test`; rename table t1 to t3
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t3
|
||||
master-bin.000001 # Query # # use `test`; alter table t1 change i c char(10) default 'Test1'
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values ()
|
||||
master-bin.000001 # Query # # use `test`; alter table t1 change c vc varchar(100) default 'Test2'
|
||||
master-bin.000001 # Query # # use `test`; rename table t1 to t2
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t1 (i int)
|
||||
master-bin.000001 # Query # # use `test`; alter table t1 change i c char(10) default 'Test3', rename to t2
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values ()
|
||||
master-bin.000001 # Query # # use `test`; alter table t2 change c vc varchar(100) default 'Test2', rename to t1
|
||||
master-bin.000001 # Query # # use `test`; rename table t1 to t3
|
||||
master-bin.000001 # Query # # use `test`; drop table t3
|
||||
End of 5.1 tests
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ INSERT INTO t2 VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
|
|||
START TRANSACTION;
|
||||
# in thread2
|
||||
REPLACE INTO t2 VALUES (-17);
|
||||
SELECT d FROM t2,t1 WHERE d=(SELECT MAX(a) FROM t1 WHERE t1.a > t2.d);
|
||||
SELECT d FROM t2,t1 WHERE d=(SELECT MAX(a) FROM t1 WHERE t1.a > t2.d) LOCK IN SHARE MODE;
|
||||
d
|
||||
# in thread1
|
||||
REPLACE INTO t1(a,b) VALUES (67,20);
|
||||
|
|
@ -21,10 +21,10 @@ COMMIT;
|
|||
START TRANSACTION;
|
||||
REPLACE INTO t1(a,b) VALUES (65,-50);
|
||||
REPLACE INTO t2 VALUES (-91);
|
||||
SELECT d FROM t2,t1 WHERE d=(SELECT MAX(a) FROM t1 WHERE t1.a > t2.d);
|
||||
SELECT d FROM t2,t1 WHERE d=(SELECT MAX(a) FROM t1 WHERE t1.a > t2.d) LOCK IN SHARE MODE;
|
||||
# in thread1
|
||||
# should not crash
|
||||
SELECT d FROM t2,t1 WHERE d=(SELECT MAX(a) FROM t1 WHERE t1.a > t2.d);
|
||||
SELECT d FROM t2,t1 WHERE d=(SELECT MAX(a) FROM t1 WHERE t1.a > t2.d) LOCK IN SHARE MODE;
|
||||
ERROR 40001: Deadlock found when trying to get lock; try restarting transaction
|
||||
# in thread2
|
||||
d
|
||||
|
|
|
|||
|
|
@ -175,12 +175,12 @@ t2 CREATE TABLE `t2` (
|
|||
`i` int(11) DEFAULT NULL
|
||||
) ENGINE=MyISAM DEFAULT CHARSET=latin1
|
||||
drop table t2;
|
||||
show binlog events in 'master-bin.000001' 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`; insert into t1 values (1)
|
||||
master-bin.000001 # Query 1 # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values (1)
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
create table t1 (i int);
|
||||
set session debug="-d,sleep_create_like_before_check_if_exists:+d,sleep_create_like_before_copy";
|
||||
create table t2 like t1;;
|
||||
|
|
@ -197,11 +197,11 @@ reset master;
|
|||
create table t2 like t1;;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
show binlog events in 'master-bin.000001' 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`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
create table t1 (i int);
|
||||
set session debug="-d,sleep_create_like_before_copy:+d,sleep_create_like_before_ha_create";
|
||||
reset master;
|
||||
|
|
@ -213,16 +213,16 @@ drop table t2;
|
|||
create table t2 like t1;;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
show binlog events in 'master-bin.000001' 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`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t2 values (1)
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query 1 # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query 1 # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (1)
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
create table t1 (i int);
|
||||
set session debug="-d,sleep_create_like_before_ha_create:+d,sleep_create_like_before_binlogging";
|
||||
reset master;
|
||||
|
|
@ -234,14 +234,14 @@ drop table t2;
|
|||
create table t2 like t1;;
|
||||
drop table t1;
|
||||
drop table t2;
|
||||
show binlog events in 'master-bin.000001' 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`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; insert into t2 values (1)
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query 1 # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query 1 # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t1
|
||||
master-bin.000001 # Query 1 # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; insert into t2 values (1)
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
master-bin.000001 # Query # # use `test`; create table t2 like t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t1
|
||||
master-bin.000001 # Query # # use `test`; drop table t2
|
||||
set session debug="-d,sleep_create_like_before_binlogging";
|
||||
|
|
|
|||
|
|
@ -29,20 +29,20 @@ HEX(s1) HEX(s2) d
|
|||
466F6F2773206120426172 ED40ED41ED42 47.93
|
||||
DROP PROCEDURE bug18293|
|
||||
DROP TABLE t4|
|
||||
SHOW BINLOG EVENTS FROM 370|
|
||||
show binlog events from <binlog_start>|
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 370 Query 1 536 use `test`; CREATE TABLE t4 (s1 CHAR(50) CHARACTER SET latin1,
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t4 (s1 CHAR(50) CHARACTER SET latin1,
|
||||
s2 CHAR(50) CHARACTER SET cp932,
|
||||
d DECIMAL(10,2))
|
||||
master-bin.000001 536 Query 1 785 use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `bug18293`(IN ins1 CHAR(50),
|
||||
master-bin.000001 # Query # # use `test`; CREATE DEFINER=`root`@`localhost` PROCEDURE `bug18293`(IN ins1 CHAR(50),
|
||||
IN ins2 CHAR(50) CHARACTER SET cp932,
|
||||
IN ind DECIMAL(10,2))
|
||||
BEGIN
|
||||
INSERT INTO t4 VALUES (ins1, ins2, ind);
|
||||
END
|
||||
master-bin.000001 785 Query 1 1049 use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172 COLLATE 'latin1_swedish_ci'), NAME_CONST('ins2',_cp932 0xED40ED41ED42 COLLATE 'cp932_japanese_ci'), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 1049 Query 1 1138 use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 1138 Query 1 1217 use `test`; DROP TABLE t4
|
||||
master-bin.000001 # Query # # use `test`; INSERT INTO t4 VALUES ( NAME_CONST('ins1',_latin1 0x466F6F2773206120426172 COLLATE 'latin1_swedish_ci'), NAME_CONST('ins2',_cp932 0xED40ED41ED42 COLLATE 'cp932_japanese_ci'), NAME_CONST('ind',47.93))
|
||||
master-bin.000001 # Query # # use `test`; DROP PROCEDURE bug18293
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE t4
|
||||
End of 5.0 tests
|
||||
SHOW BINLOG EVENTS FROM 365;
|
||||
ERROR HY000: Error when executing command SHOW BINLOG EVENTS: Wrong offset or I/O error
|
||||
|
|
|
|||
|
|
@ -7,15 +7,13 @@ SET AUTOCOMMIT=0;
|
|||
INSERT t1 VALUES (1);
|
||||
# Switch to connection con2
|
||||
FLUSH TABLES WITH READ LOCK;
|
||||
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
|
||||
# Switch to connection con1
|
||||
COMMIT;
|
||||
# Switch to connection con2
|
||||
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
|
||||
UNLOCK TABLES;
|
||||
# Switch to connection con1
|
||||
DROP TABLE t1;
|
||||
|
|
|
|||
|
|
@ -2408,4 +2408,13 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 SIMPLE t1 const PRIMARY NULL NULL NULL 1 Impossible ON condition
|
||||
1 SIMPLE t2 ALL NULL NULL NULL NULL 3 Using where
|
||||
DROP TABLE t1,t2;
|
||||
#
|
||||
# Bug #53830: !table || (!table->read_set || bitmap_is_set(table->read_set, field_index))
|
||||
#
|
||||
CREATE TABLE t1 (a INT, b INT, c INT, d INT,
|
||||
PRIMARY KEY(a,b,c), KEY(b,d))
|
||||
ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES (0, 77, 1, 3);
|
||||
UPDATE t1 SET d = 0 WHERE b = 77 AND c = 25;
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
|||
601
mysql-test/r/innodb_mysql_lock2.result
Normal file
601
mysql-test/r/innodb_mysql_lock2.result
Normal file
|
|
@ -0,0 +1,601 @@
|
|||
#
|
||||
# Test how do we handle locking in various cases when
|
||||
# we read data from InnoDB tables.
|
||||
#
|
||||
# In fact by performing this test we check two things:
|
||||
# 1) That SQL-layer correctly determine type of thr_lock.c
|
||||
# lock to be acquired/passed to InnoDB engine.
|
||||
# 2) That InnoDB engine correctly interprets this lock
|
||||
# type and takes necessary row locks or does not
|
||||
# take them if they are not necessary.
|
||||
#
|
||||
# This test makes sense only in REPEATABLE-READ mode as
|
||||
# in SERIALIZABLE mode all statements that read data take
|
||||
# shared lock on them to enforce its semantics.
|
||||
select @@session.tx_isolation;
|
||||
@@session.tx_isolation
|
||||
REPEATABLE-READ
|
||||
# Prepare playground by creating tables, views,
|
||||
# routines and triggers used in tests.
|
||||
drop table if exists t0, t1, t2, t3, t4, t5, te;
|
||||
drop view if exists v1, v2;
|
||||
drop procedure if exists p1;
|
||||
drop procedure if exists p2;
|
||||
drop function if exists f1;
|
||||
drop function if exists f2;
|
||||
drop function if exists f3;
|
||||
drop function if exists f4;
|
||||
drop function if exists f5;
|
||||
drop function if exists f6;
|
||||
drop function if exists f7;
|
||||
drop function if exists f8;
|
||||
drop function if exists f9;
|
||||
drop function if exists f10;
|
||||
drop function if exists f11;
|
||||
drop function if exists f12;
|
||||
drop function if exists f13;
|
||||
drop function if exists f14;
|
||||
drop function if exists f15;
|
||||
create table t1 (i int primary key) engine=innodb;
|
||||
insert into t1 values (1), (2), (3), (4), (5);
|
||||
create table t2 (j int primary key) engine=innodb;
|
||||
insert into t2 values (1), (2), (3), (4), (5);
|
||||
create table t3 (k int primary key) engine=innodb;
|
||||
insert into t3 values (1), (2), (3);
|
||||
create table t4 (l int primary key) engine=innodb;
|
||||
insert into t4 values (1);
|
||||
create table t5 (l int primary key) engine=innodb;
|
||||
insert into t5 values (1);
|
||||
create table te(e int primary key);
|
||||
insert into te values (1);
|
||||
create view v1 as select i from t1;
|
||||
create view v2 as select j from t2 where j in (select i from t1);
|
||||
create procedure p1(k int) insert into t2 values (k);
|
||||
create function f1() returns int
|
||||
begin
|
||||
declare j int;
|
||||
select i from t1 where i = 1 into j;
|
||||
return j;
|
||||
end|
|
||||
create function f2() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select i from t1 where i = 1 into k;
|
||||
insert into t2 values (k + 5);
|
||||
return 0;
|
||||
end|
|
||||
create function f3() returns int
|
||||
begin
|
||||
return (select i from t1 where i = 3);
|
||||
end|
|
||||
create function f4() returns int
|
||||
begin
|
||||
if (select i from t1 where i = 3) then
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
end if;
|
||||
end|
|
||||
create function f5() returns int
|
||||
begin
|
||||
insert into t2 values ((select i from t1 where i = 1) + 5);
|
||||
return 0;
|
||||
end|
|
||||
create function f6() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select i from v1 where i = 1 into k;
|
||||
return k;
|
||||
end|
|
||||
create function f7() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select j from v2 where j = 1 into k;
|
||||
return k;
|
||||
end|
|
||||
create function f8() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select i from v1 where i = 1 into k;
|
||||
insert into t2 values (k+5);
|
||||
return k;
|
||||
end|
|
||||
create function f9() returns int
|
||||
begin
|
||||
update v2 set j=j+10 where j=1;
|
||||
return 1;
|
||||
end|
|
||||
create function f10() returns int
|
||||
begin
|
||||
return f1();
|
||||
end|
|
||||
create function f11() returns int
|
||||
begin
|
||||
declare k int;
|
||||
set k= f1();
|
||||
insert into t2 values (k+5);
|
||||
return k;
|
||||
end|
|
||||
create function f12(p int) returns int
|
||||
begin
|
||||
insert into t2 values (p);
|
||||
return p;
|
||||
end|
|
||||
create function f13(p int) returns int
|
||||
begin
|
||||
return p;
|
||||
end|
|
||||
create procedure p2(inout p int)
|
||||
begin
|
||||
select i from t1 where i = 1 into p;
|
||||
end|
|
||||
create function f14() returns int
|
||||
begin
|
||||
declare k int;
|
||||
call p2(k);
|
||||
insert into t2 values (k+5);
|
||||
return k;
|
||||
end|
|
||||
create function f15() returns int
|
||||
begin
|
||||
declare k int;
|
||||
call p2(k);
|
||||
return k;
|
||||
end|
|
||||
create trigger t4_bi before insert on t4 for each row
|
||||
begin
|
||||
declare k int;
|
||||
select i from t1 where i=1 into k;
|
||||
set new.l= k+1;
|
||||
end|
|
||||
create trigger t4_bu before update on t4 for each row
|
||||
begin
|
||||
if (select i from t1 where i=1) then
|
||||
set new.l= 2;
|
||||
end if;
|
||||
end|
|
||||
# Trigger below uses insertion of duplicate key in 'te'
|
||||
# table as a way to abort delete operation.
|
||||
create trigger t4_bd before delete on t4 for each row
|
||||
begin
|
||||
if !(select i from v1 where i=1) then
|
||||
insert into te values (1);
|
||||
end if;
|
||||
end|
|
||||
create trigger t5_bi before insert on t5 for each row
|
||||
begin
|
||||
set new.l= f1()+1;
|
||||
end|
|
||||
create trigger t5_bu before update on t5 for each row
|
||||
begin
|
||||
declare j int;
|
||||
call p2(j);
|
||||
set new.l= j + 1;
|
||||
end|
|
||||
#
|
||||
# Set common variables to be used by scripts called below.
|
||||
#
|
||||
#
|
||||
# 1. Statements that read tables and do not use subqueries.
|
||||
#
|
||||
#
|
||||
# 1.1 Simple SELECT statement.
|
||||
#
|
||||
# No locks are necessary as this statement won't be written
|
||||
# to the binary log and InnoDB supports snapshots.
|
||||
Success: 'select * from t1' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 1.2 Multi-UPDATE statement.
|
||||
#
|
||||
# Has to take shared locks on rows in the table being read as this
|
||||
# statement will be written to the binary log and therefore should
|
||||
# be serialized with concurrent statements.
|
||||
Success: 'update t2, t1 set j= j - 1 where i = j' takes shared row locks on 't1'.
|
||||
#
|
||||
# 1.3 Multi-DELETE statement.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'delete t2 from t1, t2 where i = j' takes shared row locks on 't1'.
|
||||
#
|
||||
# 1.4 DESCRIBE statement.
|
||||
#
|
||||
# This statement does not really read data from the
|
||||
# target table and thus does not take any lock on it.
|
||||
# We check this for completeness of coverage.
|
||||
Success: 'describe t1' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 1.5 SHOW statements.
|
||||
#
|
||||
# The above is true for SHOW statements as well.
|
||||
Success: 'show create table t1' doesn't take row locks on 't1'.
|
||||
Success: 'show keys from t1' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 2. Statements which read tables through subqueries.
|
||||
#
|
||||
#
|
||||
# 2.1 CALL with a subquery.
|
||||
#
|
||||
# A strong lock is not necessary as this statement is not
|
||||
# written to the binary log as a whole (it is written
|
||||
# statement-by-statement) and thanks to MVCC we can always get
|
||||
# versions of rows prior to the update that has locked them.
|
||||
# But in practice InnoDB does locking reads for all statements
|
||||
# other than SELECT (unless it is a READ-COMITTED mode or
|
||||
# innodb_locks_unsafe_for_binlog is ON).
|
||||
Success: 'call p1((select i + 5 from t1 where i = 1))' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.2 CREATE TABLE with a subquery.
|
||||
#
|
||||
# Has to take shared locks on rows in the table being read as
|
||||
# this statement is written to the binary log and therefore
|
||||
# should be serialized with concurrent statements.
|
||||
Success: 'create table t0 engine=innodb select * from t1' takes shared row locks on 't1'.
|
||||
drop table t0;
|
||||
Success: 'create table t0 engine=innodb select j from t2 where j in (select i from t1)' takes shared row locks on 't1'.
|
||||
drop table t0;
|
||||
#
|
||||
# 2.3 DELETE with a subquery.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'delete from t2 where j in (select i from t1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.4 MULTI-DELETE with a subquery.
|
||||
#
|
||||
# Same is true for this statement as well.
|
||||
Success: 'delete t2 from t3, t2 where k = j and j in (select i from t1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.5 DO with a subquery.
|
||||
#
|
||||
# In theory should not take row locks as it is not logged.
|
||||
# In practice InnoDB takes shared row locks.
|
||||
Success: 'do (select i from t1 where i = 1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.6 INSERT with a subquery.
|
||||
#
|
||||
# Has to take shared locks on rows in the table being read as
|
||||
# this statement is written to the binary log and therefore
|
||||
# should be serialized with concurrent statements.
|
||||
Success: 'insert into t2 select i+5 from t1' takes shared row locks on 't1'.
|
||||
Success: 'insert into t2 values ((select i+5 from t1 where i = 4))' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.7 LOAD DATA with a subquery.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'load data infile '../../std_data/rpl_loaddata.dat' into table t2 (@a, @b) set j= @b + (select i from t1 where i = 1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.8 REPLACE with a subquery.
|
||||
#
|
||||
# Same is true for this statement as well.
|
||||
Success: 'replace into t2 select i+5 from t1' takes shared row locks on 't1'.
|
||||
Success: 'replace into t2 values ((select i+5 from t1 where i = 4))' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.9 SELECT with a subquery.
|
||||
#
|
||||
# Locks are not necessary as this statement is not written
|
||||
# to the binary log and thanks to MVCC we can always get
|
||||
# versions of rows prior to the update that has locked them.
|
||||
#
|
||||
# Also serves as a test case for bug #46947 "Embedded SELECT
|
||||
# without FOR UPDATE is causing a lock".
|
||||
Success: 'select * from t2 where j in (select i from t1)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 2.10 SET with a subquery.
|
||||
#
|
||||
# In theory should not require locking as it is not written
|
||||
# to the binary log. In practice InnoDB acquires shared row
|
||||
# locks.
|
||||
Success: 'set @a:= (select i from t1 where i = 1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.11 SHOW with a subquery.
|
||||
#
|
||||
# Similarly to the previous case, in theory should not require locking
|
||||
# as it is not written to the binary log. In practice InnoDB
|
||||
# acquires shared row locks.
|
||||
Success: 'show tables from test where Tables_in_test = 't2' and (select i from t1 where i = 1)' takes shared row locks on 't1'.
|
||||
Success: 'show columns from t2 where (select i from t1 where i = 1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.12 UPDATE with a subquery.
|
||||
#
|
||||
# Has to take shared locks on rows in the table being read as
|
||||
# this statement is written to the binary log and therefore
|
||||
# should be serialized with concurrent statements.
|
||||
Success: 'update t2 set j= j-10 where j in (select i from t1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 2.13 MULTI-UPDATE with a subquery.
|
||||
#
|
||||
# Same is true for this statement as well.
|
||||
Success: 'update t2, t3 set j= j -10 where j=k and j in (select i from t1)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 3. Statements which read tables through a view.
|
||||
#
|
||||
#
|
||||
# 3.1 SELECT statement which uses some table through a view.
|
||||
#
|
||||
# Since this statement is not written to the binary log
|
||||
# and old version of rows are accessible thanks to MVCC,
|
||||
# no locking is necessary.
|
||||
Success: 'select * from v1' doesn't take row locks on 't1'.
|
||||
Success: 'select * from v2' doesn't take row locks on 't1'.
|
||||
Success: 'select * from t2 where j in (select i from v1)' doesn't take row locks on 't1'.
|
||||
Success: 'select * from t3 where k in (select j from v2)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 3.2 Statements which modify a table and use views.
|
||||
#
|
||||
# Since such statements are going to be written to the binary
|
||||
# log they need to be serialized against concurrent statements
|
||||
# and therefore should take shared row locks on data read.
|
||||
Success: 'update t2 set j= j-10 where j in (select i from v1)' takes shared row locks on 't1'.
|
||||
Success: 'update t3 set k= k-10 where k in (select j from v2)' takes shared row locks on 't1'.
|
||||
Success: 'update t2, v1 set j= j-10 where j = i' takes shared row locks on 't1'.
|
||||
Success: 'update v2 set j= j-10 where j = 3' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4. Statements which read tables through stored functions.
|
||||
#
|
||||
#
|
||||
# 4.1 SELECT/SET with a stored function which does not
|
||||
# modify data and uses SELECT in its turn.
|
||||
#
|
||||
# Calls to such functions won't get into the binary log and
|
||||
# thus don't need to acquire strong locks.
|
||||
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
|
||||
# used stored functions may lead to broken SBR" strong locks
|
||||
# are taken (we accepted it as a trade-off for this fix).
|
||||
Success: 'select f1()' doesn't take row locks on 't1'.
|
||||
Success: 'set @a:= f1()' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 4.2 INSERT (or other statement which modifies data) with
|
||||
# a stored function which does not modify data and uses
|
||||
# SELECT.
|
||||
#
|
||||
# Since such statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting the data
|
||||
# it uses. Therefore it should take row locks on the data
|
||||
# it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'insert into t2 values (f1() + 5)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 4.3 SELECT/SET with a stored function which
|
||||
# reads and modifies data.
|
||||
#
|
||||
# Since a call to such function is written to the binary log,
|
||||
# it should be serialized with concurrent statements affecting
|
||||
# the data it uses. Hence, row locks on the data read
|
||||
# should be taken.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'select f2()' doesn't take row locks on 't1'.
|
||||
Success: 'set @a:= f2()' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 4.4. SELECT/SET with a stored function which does not
|
||||
# modify data and reads a table through subselect
|
||||
# in a control construct.
|
||||
#
|
||||
# Again, in theory a call to this function won't get to the
|
||||
# binary log and thus no locking is needed. But in practice
|
||||
# we don't detect this fact early enough (get_lock_type_for_table())
|
||||
# to avoid taking row locks.
|
||||
Success: 'select f3()' takes shared row locks on 't1'.
|
||||
Success: 'set @a:= f3()' takes shared row locks on 't1'.
|
||||
Success: 'select f4()' takes shared row locks on 't1'.
|
||||
Success: 'set @a:= f4()' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.5. INSERT (or other statement which modifies data) with
|
||||
# a stored function which does not modify data and reads
|
||||
# the table through a subselect in one of its control
|
||||
# constructs.
|
||||
#
|
||||
# Since such statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting data it
|
||||
# uses. Therefore it should take row locks on the data
|
||||
# it reads.
|
||||
Success: 'insert into t2 values (f3() + 5)' takes shared row locks on 't1'.
|
||||
Success: 'insert into t2 values (f4() + 6)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.6 SELECT/SET which uses a stored function with
|
||||
# DML which reads a table via a subquery.
|
||||
#
|
||||
# Since call to such function is written to the binary log
|
||||
# it should be serialized with concurrent statements.
|
||||
# Hence reads should take row locks.
|
||||
Success: 'select f5()' takes shared row locks on 't1'.
|
||||
Success: 'set @a:= f5()' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.7 SELECT/SET which uses a stored function which
|
||||
# doesn't modify data and reads tables through
|
||||
# a view.
|
||||
#
|
||||
# Once again, in theory, calls to such functions won't
|
||||
# get into the binary log and thus don't need row
|
||||
# locks. In practice this fact is discovered
|
||||
# too late to have any effect.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken
|
||||
# in case of simple SELECT.
|
||||
Success: 'select f6()' doesn't take row locks on 't1'.
|
||||
Success: 'set @a:= f6()' doesn't take row locks on 't1'.
|
||||
Success: 'select f7()' takes shared row locks on 't1'.
|
||||
Success: 'set @a:= f7()' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.8 INSERT which uses stored function which
|
||||
# doesn't modify data and reads a table
|
||||
# through a view.
|
||||
#
|
||||
# Since such statement is written to the binary log and
|
||||
# should be serialized with concurrent statements affecting
|
||||
# the data it uses. Therefore it should take row locks on
|
||||
# the rows it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken
|
||||
# in case of simple SELECT.
|
||||
Success: 'insert into t3 values (f6() + 5)' doesn't take row locks on 't1'.
|
||||
Success: 'insert into t3 values (f7() + 5)' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.9 SELECT which uses a stored function which
|
||||
# modifies data and reads tables through a view.
|
||||
#
|
||||
# Since a call to such function is written to the binary log
|
||||
# it should be serialized with concurrent statements.
|
||||
# Hence, reads should take row locks.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken
|
||||
# in case of simple SELECT.
|
||||
Success: 'select f8()' doesn't take row locks on 't1'.
|
||||
Success: 'select f9()' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.10 SELECT which uses stored function which doesn't modify
|
||||
# data and reads a table indirectly, by calling another
|
||||
# function.
|
||||
#
|
||||
# Calls to such functions won't get into the binary log and
|
||||
# thus don't need to acquire strong locks.
|
||||
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
|
||||
# used stored functions may lead to broken SBR" strong locks
|
||||
# are taken (we accepted it as a trade-off for this fix).
|
||||
Success: 'select f10()' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 4.11 INSERT which uses a stored function which doesn't modify
|
||||
# data and reads a table indirectly, by calling another
|
||||
# function.
|
||||
#
|
||||
# Since such statement is written to the binary log, it should
|
||||
# be serialized with concurrent statements affecting the data it
|
||||
# uses. Therefore it should take row locks on data it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'insert into t2 values (f10() + 5)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 4.12 SELECT which uses a stored function which modifies
|
||||
# data and reads a table indirectly, by calling another
|
||||
# function.
|
||||
#
|
||||
# Since a call to such function is written to the binary log
|
||||
# it should be serialized from concurrent statements.
|
||||
# Hence, reads should take row locks.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'select f11()' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 4.13 SELECT that reads a table through a subquery passed
|
||||
# as a parameter to a stored function which modifies
|
||||
# data.
|
||||
#
|
||||
# Even though a call to this function is written to the
|
||||
# binary log, values of its parameters are written as literals.
|
||||
# So there is no need to acquire row locks on rows used in
|
||||
# the subquery.
|
||||
# But due to the fact that in 5.1 for prelocked statements
|
||||
# THD::in_lock_tables is set to TRUE we acquire strong locks
|
||||
# (see also bug#44613 "SELECT statement inside FUNCTION takes
|
||||
# a shared lock" [sic!!!]).
|
||||
Success: 'select f12((select i+10 from t1 where i=1))' takes shared row locks on 't1'.
|
||||
#
|
||||
# 4.14 INSERT that reads a table via a subquery passed
|
||||
# as a parameter to a stored function which doesn't
|
||||
# modify data.
|
||||
#
|
||||
# Since this statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting the data it
|
||||
# uses. Therefore it should take row locks on the data it reads.
|
||||
Success: 'insert into t2 values (f13((select i+10 from t1 where i=1)))' takes shared row locks on 't1'.
|
||||
#
|
||||
# 5. Statements that read tables through stored procedures.
|
||||
#
|
||||
#
|
||||
# 5.1 CALL statement which reads a table via SELECT.
|
||||
#
|
||||
# Since neither this statement nor its components are
|
||||
# written to the binary log, there is no need to take
|
||||
# row locks on the data it reads.
|
||||
Success: 'call p2(@a)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 5.2 Function that modifies data and uses CALL,
|
||||
# which reads a table through SELECT.
|
||||
#
|
||||
# Since a call to such function is written to the binary
|
||||
# log, it should be serialized with concurrent statements.
|
||||
# Hence, in this case reads should take row locks on data.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'select f14()' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 5.3 SELECT that calls a function that doesn't modify data and
|
||||
# uses a CALL statement that reads a table via SELECT.
|
||||
#
|
||||
# Calls to such functions won't get into the binary log and
|
||||
# thus don't need to acquire strong locks.
|
||||
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
|
||||
# used stored functions may lead to broken SBR" strong locks
|
||||
# are taken (we accepted it as a trade-off for this fix).
|
||||
Success: 'select f15()' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 5.4 INSERT which calls function which doesn't modify data and
|
||||
# uses CALL statement which reads table through SELECT.
|
||||
#
|
||||
# Since such statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting data it
|
||||
# uses. Therefore it should take row locks on data it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'insert into t2 values (f15()+5)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 6. Statements that use triggers.
|
||||
#
|
||||
#
|
||||
# 6.1 Statement invoking a trigger that reads table via SELECT.
|
||||
#
|
||||
# Since this statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting the data
|
||||
# it uses. Therefore, it should take row locks on the data
|
||||
# it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'insert into t4 values (2)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 6.2 Statement invoking a trigger that reads table through
|
||||
# a subquery in a control construct.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'update t4 set l= 2 where l = 1' takes shared row locks on 't1'.
|
||||
#
|
||||
# 6.3 Statement invoking a trigger that reads a table through
|
||||
# a view.
|
||||
#
|
||||
# And for this statement.
|
||||
Success: 'delete from t4 where l = 1' takes shared row locks on 't1'.
|
||||
#
|
||||
# 6.4 Statement invoking a trigger that reads a table through
|
||||
# a stored function.
|
||||
#
|
||||
# And for this statement.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'insert into t5 values (2)' doesn't take row locks on 't1'.
|
||||
#
|
||||
# 6.5 Statement invoking a trigger that reads a table through
|
||||
# stored procedure.
|
||||
#
|
||||
# And for this statement.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" no lock is taken.
|
||||
Success: 'update t5 set l= 2 where l = 1' doesn't take row locks on 't1'.
|
||||
# Clean-up.
|
||||
drop function f1;
|
||||
drop function f2;
|
||||
drop function f3;
|
||||
drop function f4;
|
||||
drop function f5;
|
||||
drop function f6;
|
||||
drop function f7;
|
||||
drop function f8;
|
||||
drop function f9;
|
||||
drop function f10;
|
||||
drop function f11;
|
||||
drop function f12;
|
||||
drop function f13;
|
||||
drop function f14;
|
||||
drop function f15;
|
||||
drop view v1, v2;
|
||||
drop procedure p1;
|
||||
drop procedure p2;
|
||||
drop table t1, t2, t3, t4, t5, te;
|
||||
|
|
@ -1338,4 +1338,63 @@ id select_type table type possible_keys key key_len ref rows Extra
|
|||
1 SIMPLE tt9 ALL NULL NULL NULL NULL 2 Using join buffer
|
||||
SET optimizer_search_depth = DEFAULT;
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#46091 STRAIGHT_JOIN + RIGHT JOIN returns different result
|
||||
#
|
||||
CREATE TABLE t1 (f1 INT NOT NULL);
|
||||
INSERT INTO t1 VALUES (9),(0);
|
||||
CREATE TABLE t2 (f1 INT NOT NULL);
|
||||
INSERT INTO t2 VALUES
|
||||
(5),(3),(0),(3),(1),(0),(1),(7),(1),(0),(0),(8),(4),(9),(0),(2),(0),(8),(5),(1);
|
||||
SELECT STRAIGHT_JOIN COUNT(*) FROM t1 TA1
|
||||
RIGHT JOIN t2 TA2 JOIN t2 TA3 ON TA2.f1 ON TA3.f1;
|
||||
COUNT(*)
|
||||
476
|
||||
EXPLAIN SELECT STRAIGHT_JOIN COUNT(*) FROM t1 TA1
|
||||
RIGHT JOIN t2 TA2 JOIN t2 TA3 ON TA2.f1 ON TA3.f1;
|
||||
id select_type table type possible_keys key key_len ref rows Extra
|
||||
1 SIMPLE TA2 ALL NULL NULL NULL NULL 20 Using where
|
||||
1 SIMPLE TA3 ALL NULL NULL NULL NULL 20 Using join buffer
|
||||
1 SIMPLE TA1 ALL NULL NULL NULL NULL 2
|
||||
DROP TABLE t1, t2;
|
||||
#
|
||||
# Bug#48971 Segfault in add_found_match_trig_cond () at sql_select.cc:5990
|
||||
#
|
||||
CREATE TABLE t1(f1 INT, PRIMARY KEY (f1));
|
||||
INSERT INTO t1 VALUES (1),(2);
|
||||
EXPLAIN EXTENDED SELECT STRAIGHT_JOIN jt1.f1 FROM t1 AS jt1
|
||||
LEFT JOIN t1 AS jt2
|
||||
RIGHT JOIN t1 AS jt3
|
||||
JOIN t1 AS jt4 ON 1
|
||||
LEFT JOIN t1 AS jt5 ON 1
|
||||
ON 1
|
||||
RIGHT JOIN t1 AS jt6 ON jt6.f1
|
||||
ON 1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE jt1 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt6 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt3 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt4 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt5 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt2 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select straight_join `test`.`jt1`.`f1` AS `f1` from `test`.`t1` `jt1` left join (`test`.`t1` `jt6` left join (`test`.`t1` `jt3` join `test`.`t1` `jt4` left join `test`.`t1` `jt5` on(1) left join `test`.`t1` `jt2` on(1)) on((`test`.`jt6`.`f1` and 1))) on(1) where 1
|
||||
EXPLAIN EXTENDED SELECT STRAIGHT_JOIN jt1.f1 FROM t1 AS jt1
|
||||
RIGHT JOIN t1 AS jt2
|
||||
RIGHT JOIN t1 AS jt3
|
||||
JOIN t1 AS jt4 ON 1
|
||||
LEFT JOIN t1 AS jt5 ON 1
|
||||
ON 1
|
||||
RIGHT JOIN t1 AS jt6 ON jt6.f1
|
||||
ON 1;
|
||||
id select_type table type possible_keys key key_len ref rows filtered Extra
|
||||
1 SIMPLE jt6 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt3 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt4 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt5 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt2 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
1 SIMPLE jt1 index NULL PRIMARY 4 NULL 2 100.00 Using index
|
||||
Warnings:
|
||||
Note 1003 select straight_join `test`.`jt1`.`f1` AS `f1` from `test`.`t1` `jt6` left join (`test`.`t1` `jt3` join `test`.`t1` `jt4` left join `test`.`t1` `jt5` on(1) left join `test`.`t1` `jt2` on(1)) on((`test`.`jt6`.`f1` and 1)) left join `test`.`t1` `jt1` on(1) where 1
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
|||
631
mysql-test/r/lock_sync.result
Normal file
631
mysql-test/r/lock_sync.result
Normal file
|
|
@ -0,0 +1,631 @@
|
|||
#
|
||||
# Test how we handle locking in various cases when
|
||||
# we read data from MyISAM tables.
|
||||
#
|
||||
# In this test we mostly check that the SQL-layer correctly
|
||||
# determines the type of thr_lock.c lock for a table being
|
||||
# read.
|
||||
# I.e. that it disallows concurrent inserts when the statement
|
||||
# is going to be written to the binary log and therefore
|
||||
# should be serialized, and allows concurrent inserts when
|
||||
# such serialization is not necessary (e.g. when
|
||||
# the statement is not written to binary log).
|
||||
#
|
||||
# Force concurrent inserts to be performed even if the table
|
||||
# has gaps. This allows to simplify clean up in scripts
|
||||
# used below (instead of backing up table being inserted
|
||||
# into and then restoring it from backup at the end of the
|
||||
# script we can simply delete rows which were inserted).
|
||||
set @old_concurrent_insert= @@global.concurrent_insert;
|
||||
set @@global.concurrent_insert= 2;
|
||||
select @@global.concurrent_insert;
|
||||
@@global.concurrent_insert
|
||||
2
|
||||
# Prepare playground by creating tables, views,
|
||||
# routines and triggers used in tests.
|
||||
drop table if exists t0, t1, t2, t3, t4, t5, te;
|
||||
drop view if exists v1, v2;
|
||||
drop procedure if exists p1;
|
||||
drop procedure if exists p2;
|
||||
drop function if exists f1;
|
||||
drop function if exists f2;
|
||||
drop function if exists f3;
|
||||
drop function if exists f4;
|
||||
drop function if exists f5;
|
||||
drop function if exists f6;
|
||||
drop function if exists f7;
|
||||
drop function if exists f8;
|
||||
drop function if exists f9;
|
||||
drop function if exists f10;
|
||||
drop function if exists f11;
|
||||
drop function if exists f12;
|
||||
drop function if exists f13;
|
||||
drop function if exists f14;
|
||||
drop function if exists f15;
|
||||
create table t1 (i int primary key);
|
||||
insert into t1 values (1), (2), (3), (4), (5);
|
||||
create table t2 (j int primary key);
|
||||
insert into t2 values (1), (2), (3), (4), (5);
|
||||
create table t3 (k int primary key);
|
||||
insert into t3 values (1), (2), (3);
|
||||
create table t4 (l int primary key);
|
||||
insert into t4 values (1);
|
||||
create table t5 (l int primary key);
|
||||
insert into t5 values (1);
|
||||
create table te(e int primary key);
|
||||
insert into te values (1);
|
||||
create view v1 as select i from t1;
|
||||
create view v2 as select j from t2 where j in (select i from t1);
|
||||
create procedure p1(k int) insert into t2 values (k);
|
||||
create function f1() returns int
|
||||
begin
|
||||
declare j int;
|
||||
select i from t1 where i = 1 into j;
|
||||
return j;
|
||||
end|
|
||||
create function f2() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select i from t1 where i = 1 into k;
|
||||
insert into t2 values (k + 5);
|
||||
return 0;
|
||||
end|
|
||||
create function f3() returns int
|
||||
begin
|
||||
return (select i from t1 where i = 3);
|
||||
end|
|
||||
create function f4() returns int
|
||||
begin
|
||||
if (select i from t1 where i = 3) then
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
end if;
|
||||
end|
|
||||
create function f5() returns int
|
||||
begin
|
||||
insert into t2 values ((select i from t1 where i = 1) + 5);
|
||||
return 0;
|
||||
end|
|
||||
create function f6() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select i from v1 where i = 1 into k;
|
||||
return k;
|
||||
end|
|
||||
create function f7() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select j from v2 where j = 1 into k;
|
||||
return k;
|
||||
end|
|
||||
create function f8() returns int
|
||||
begin
|
||||
declare k int;
|
||||
select i from v1 where i = 1 into k;
|
||||
insert into t2 values (k+5);
|
||||
return k;
|
||||
end|
|
||||
create function f9() returns int
|
||||
begin
|
||||
update v2 set j=j+10 where j=1;
|
||||
return 1;
|
||||
end|
|
||||
create function f10() returns int
|
||||
begin
|
||||
return f1();
|
||||
end|
|
||||
create function f11() returns int
|
||||
begin
|
||||
declare k int;
|
||||
set k= f1();
|
||||
insert into t2 values (k+5);
|
||||
return k;
|
||||
end|
|
||||
create function f12(p int) returns int
|
||||
begin
|
||||
insert into t2 values (p);
|
||||
return p;
|
||||
end|
|
||||
create function f13(p int) returns int
|
||||
begin
|
||||
return p;
|
||||
end|
|
||||
create procedure p2(inout p int)
|
||||
begin
|
||||
select i from t1 where i = 1 into p;
|
||||
end|
|
||||
create function f14() returns int
|
||||
begin
|
||||
declare k int;
|
||||
call p2(k);
|
||||
insert into t2 values (k+5);
|
||||
return k;
|
||||
end|
|
||||
create function f15() returns int
|
||||
begin
|
||||
declare k int;
|
||||
call p2(k);
|
||||
return k;
|
||||
end|
|
||||
create trigger t4_bi before insert on t4 for each row
|
||||
begin
|
||||
declare k int;
|
||||
select i from t1 where i=1 into k;
|
||||
set new.l= k+1;
|
||||
end|
|
||||
create trigger t4_bu before update on t4 for each row
|
||||
begin
|
||||
if (select i from t1 where i=1) then
|
||||
set new.l= 2;
|
||||
end if;
|
||||
end|
|
||||
# Trigger below uses insertion of duplicate key in 'te'
|
||||
# table as a way to abort delete operation.
|
||||
create trigger t4_bd before delete on t4 for each row
|
||||
begin
|
||||
if !(select i from v1 where i=1) then
|
||||
insert into te values (1);
|
||||
end if;
|
||||
end|
|
||||
create trigger t5_bi before insert on t5 for each row
|
||||
begin
|
||||
set new.l= f1()+1;
|
||||
end|
|
||||
create trigger t5_bu before update on t5 for each row
|
||||
begin
|
||||
declare j int;
|
||||
call p2(j);
|
||||
set new.l= j + 1;
|
||||
end|
|
||||
#
|
||||
# Set common variables to be used by the scripts
|
||||
# called below.
|
||||
#
|
||||
# Switch to connection 'con1'.
|
||||
# Cache all functions used in the tests below so statements
|
||||
# calling them won't need to open and lock mysql.proc table
|
||||
# and we can assume that each statement locks its tables
|
||||
# once during its execution.
|
||||
show create procedure p1;
|
||||
show create procedure p2;
|
||||
show create function f1;
|
||||
show create function f2;
|
||||
show create function f3;
|
||||
show create function f4;
|
||||
show create function f5;
|
||||
show create function f6;
|
||||
show create function f7;
|
||||
show create function f8;
|
||||
show create function f9;
|
||||
show create function f10;
|
||||
show create function f11;
|
||||
show create function f12;
|
||||
show create function f13;
|
||||
show create function f14;
|
||||
show create function f15;
|
||||
# Switch back to connection 'default'.
|
||||
#
|
||||
# 1. Statements that read tables and do not use subqueries.
|
||||
#
|
||||
#
|
||||
# 1.1 Simple SELECT statement.
|
||||
#
|
||||
# No locks are necessary as this statement won't be written
|
||||
# to the binary log and thanks to how MyISAM works SELECT
|
||||
# will see version of the table prior to concurrent insert.
|
||||
Success: 'select * from t1' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 1.2 Multi-UPDATE statement.
|
||||
#
|
||||
# Has to take shared locks on rows in the table being read as this
|
||||
# statement will be written to the binary log and therefore should
|
||||
# be serialized with concurrent statements.
|
||||
Success: 'update t2, t1 set j= j - 1 where i = j' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 1.3 Multi-DELETE statement.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'delete t2 from t1, t2 where i = j' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 1.4 DESCRIBE statement.
|
||||
#
|
||||
# This statement does not really read data from the
|
||||
# target table and thus does not take any lock on it.
|
||||
# We check this for completeness of coverage.
|
||||
lock table t1 write;
|
||||
# Switching to connection 'con1'.
|
||||
# This statement should not be blocked.
|
||||
describe t1;
|
||||
# Switching to connection 'default'.
|
||||
unlock tables;
|
||||
#
|
||||
# 1.5 SHOW statements.
|
||||
#
|
||||
# The above is true for SHOW statements as well.
|
||||
lock table t1 write;
|
||||
# Switching to connection 'con1'.
|
||||
# These statements should not be blocked.
|
||||
show keys from t1;
|
||||
# Switching to connection 'default'.
|
||||
unlock tables;
|
||||
#
|
||||
# 2. Statements which read tables through subqueries.
|
||||
#
|
||||
#
|
||||
# 2.1 CALL with a subquery.
|
||||
#
|
||||
# In theory strong lock is not necessary as this statement
|
||||
# is not written to the binary log as a whole (it is written
|
||||
# statement-by-statement). But in practice in 5.1 for
|
||||
# almost everything except SELECT we take strong lock.
|
||||
Success: 'call p1((select i + 5 from t1 where i = 1))' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.2 CREATE TABLE with a subquery.
|
||||
#
|
||||
# Has to take a strong lock on the table being read as
|
||||
# this statement is written to the binary log and therefore
|
||||
# should be serialized with concurrent statements.
|
||||
Success: 'create table t0 select * from t1' doesn't allow concurrent inserts into 't1'.
|
||||
drop table t0;
|
||||
Success: 'create table t0 select j from t2 where j in (select i from t1)' doesn't allow concurrent inserts into 't1'.
|
||||
drop table t0;
|
||||
#
|
||||
# 2.3 DELETE with a subquery.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'delete from t2 where j in (select i from t1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.4 MULTI-DELETE with a subquery.
|
||||
#
|
||||
# Same is true for this statement as well.
|
||||
Success: 'delete t2 from t3, t2 where k = j and j in (select i from t1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.5 DO with a subquery.
|
||||
#
|
||||
# In theory strong lock is not necessary as it is not logged.
|
||||
# But in practice in 5.1 for almost everything except SELECT
|
||||
# we take strong lock.
|
||||
Success: 'do (select i from t1 where i = 1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.6 INSERT with a subquery.
|
||||
#
|
||||
# Has to take a strong lock on the table being read as
|
||||
# this statement is written to the binary log and therefore
|
||||
# should be serialized with concurrent inserts.
|
||||
Success: 'insert into t2 select i+5 from t1' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'insert into t2 values ((select i+5 from t1 where i = 4))' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.7 LOAD DATA with a subquery.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'load data infile '../../std_data/rpl_loaddata.dat' into table t2 (@a, @b) set j= @b + (select i from t1 where i = 1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.8 REPLACE with a subquery.
|
||||
#
|
||||
# Same is true for this statement as well.
|
||||
Success: 'replace into t2 select i+5 from t1' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'replace into t2 values ((select i+5 from t1 where i = 4))' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.9 SELECT with a subquery.
|
||||
#
|
||||
# Strong locks are not necessary as this statement is not written
|
||||
# to the binary log and thanks to how MyISAM works this statement
|
||||
# sees a version of the table prior to the concurrent insert.
|
||||
Success: 'select * from t2 where j in (select i from t1)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.10 SET with a subquery.
|
||||
#
|
||||
# In theory the same is true for this statement as well.
|
||||
# But in practice in 5.1 we acquire strong lock in this
|
||||
# case as well.
|
||||
Success: 'set @a:= (select i from t1 where i = 1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.11 SHOW with a subquery.
|
||||
#
|
||||
# The same is true for this statement too.
|
||||
Success: 'show tables from test where Tables_in_test = 't2' and (select i from t1 where i = 1)' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'show columns from t2 where (select i from t1 where i = 1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.12 UPDATE with a subquery.
|
||||
#
|
||||
# Has to take a strong lock on the table being read as
|
||||
# this statement is written to the binary log and therefore
|
||||
# should be serialized with concurrent inserts.
|
||||
Success: 'update t2 set j= j-10 where j in (select i from t1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 2.13 MULTI-UPDATE with a subquery.
|
||||
#
|
||||
# Same is true for this statement as well.
|
||||
Success: 'update t2, t3 set j= j -10 where j=k and j in (select i from t1)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 3. Statements which read tables through a view.
|
||||
#
|
||||
#
|
||||
# 3.1 SELECT statement which uses some table through a view.
|
||||
#
|
||||
# Since this statement is not written to the binary log and
|
||||
# an old version of the table is accessible thanks to how MyISAM
|
||||
# handles concurrent insert, no locking is necessary.
|
||||
Success: 'select * from v1' allows concurrent inserts into 't1'.
|
||||
Success: 'select * from v2' allows concurrent inserts into 't1'.
|
||||
Success: 'select * from t2 where j in (select i from v1)' allows concurrent inserts into 't1'.
|
||||
Success: 'select * from t3 where k in (select j from v2)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 3.2 Statements which modify a table and use views.
|
||||
#
|
||||
# Since such statements are going to be written to the binary
|
||||
# log they need to be serialized against concurrent statements
|
||||
# and therefore should take strong locks on the data read.
|
||||
Success: 'update t2 set j= j-10 where j in (select i from v1)' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'update t3 set k= k-10 where k in (select j from v2)' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'update t2, v1 set j= j-10 where j = i' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'update v2 set j= j-10 where j = 3' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4. Statements which read tables through stored functions.
|
||||
#
|
||||
#
|
||||
# 4.1 SELECT/SET with a stored function which does not
|
||||
# modify data and uses SELECT in its turn.
|
||||
#
|
||||
# Calls to such functions won't get into the binary log and
|
||||
# thus don't need to acquire strong locks.
|
||||
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
|
||||
# used stored functions may lead to broken SBR" strong locks
|
||||
# are taken (we accepted it as a trade-off for this fix).
|
||||
Success: 'select f1()' allows concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f1()' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.2 INSERT (or other statement which modifies data) with
|
||||
# a stored function which does not modify data and uses
|
||||
# SELECT.
|
||||
#
|
||||
# Since such statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting the data
|
||||
# it uses. Therefore it should take strong lock on the data
|
||||
# it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'insert into t2 values (f1() + 5)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.3 SELECT/SET with a stored function which
|
||||
# reads and modifies data.
|
||||
#
|
||||
# Since a call to such function is written to the binary log,
|
||||
# it should be serialized with concurrent statements affecting
|
||||
# the data it uses. Hence, a strong lock on the data read
|
||||
# should be taken.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'select f2()' allows concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f2()' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.4. SELECT/SET with a stored function which does not
|
||||
# modify data and reads a table through subselect
|
||||
# in a control construct.
|
||||
#
|
||||
# Again, in theory a call to this function won't get to the
|
||||
# binary log and thus no strong lock is needed. But in practice
|
||||
# we don't detect this fact early enough (get_lock_type_for_table())
|
||||
# to avoid taking a strong lock.
|
||||
Success: 'select f3()' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f3()' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'select f4()' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f4()' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.5. INSERT (or other statement which modifies data) with
|
||||
# a stored function which does not modify data and reads
|
||||
# the table through a subselect in one of its control
|
||||
# constructs.
|
||||
#
|
||||
# Since such statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting data it
|
||||
# uses. Therefore it should take a strong lock on the data
|
||||
# it reads.
|
||||
Success: 'insert into t2 values (f3() + 5)' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'insert into t2 values (f4() + 6)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.6 SELECT/SET which uses a stored function with
|
||||
# DML which reads a table via a subquery.
|
||||
#
|
||||
# Since call to such function is written to the binary log
|
||||
# it should be serialized with concurrent statements.
|
||||
# Hence reads should take a strong lock.
|
||||
Success: 'select f5()' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f5()' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.7 SELECT/SET which uses a stored function which
|
||||
# doesn't modify data and reads tables through
|
||||
# a view.
|
||||
#
|
||||
# Once again, in theory, calls to such functions won't
|
||||
# get into the binary log and thus don't need strong
|
||||
# locks. In practice this fact is discovered
|
||||
# too late to have any effect.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken
|
||||
# in case when simple SELECT is used.
|
||||
Success: 'select f6()' allows concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f6()' allows concurrent inserts into 't1'.
|
||||
Success: 'select f7()' doesn't allow concurrent inserts into 't1'.
|
||||
Success: 'set @a:= f7()' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.8 INSERT which uses stored function which
|
||||
# doesn't modify data and reads a table
|
||||
# through a view.
|
||||
#
|
||||
# Since such statement is written to the binary log and
|
||||
# should be serialized with concurrent statements affecting
|
||||
# the data it uses. Therefore it should take a strong lock on
|
||||
# the table it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken
|
||||
# in case when simple SELECT is used.
|
||||
Success: 'insert into t3 values (f6() + 5)' allows concurrent inserts into 't1'.
|
||||
Success: 'insert into t3 values (f7() + 5)' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.9 SELECT which uses a stored function which
|
||||
# modifies data and reads tables through a view.
|
||||
#
|
||||
# Since a call to such function is written to the binary log
|
||||
# it should be serialized with concurrent statements.
|
||||
# Hence, reads should take strong locks.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken
|
||||
# in case when simple SELECT is used.
|
||||
Success: 'select f8()' allows concurrent inserts into 't1'.
|
||||
Success: 'select f9()' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.10 SELECT which uses a stored function which doesn't modify
|
||||
# data and reads a table indirectly, by calling another
|
||||
# function.
|
||||
#
|
||||
# Calls to such functions won't get into the binary log and
|
||||
# thus don't need to acquire strong locks.
|
||||
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
|
||||
# used stored functions may lead to broken SBR" strong locks
|
||||
# are taken (we accepted it as a trade-off for this fix).
|
||||
Success: 'select f10()' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.11 INSERT which uses a stored function which doesn't modify
|
||||
# data and reads a table indirectly, by calling another
|
||||
# function.
|
||||
#
|
||||
# Since such statement is written to the binary log, it should
|
||||
# be serialized with concurrent statements affecting the data it
|
||||
# uses. Therefore it should take strong locks on data it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'insert into t2 values (f10() + 5)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.12 SELECT which uses a stored function which modifies
|
||||
# data and reads a table indirectly, by calling another
|
||||
# function.
|
||||
#
|
||||
# Since a call to such function is written to the binary log
|
||||
# it should be serialized from concurrent statements.
|
||||
# Hence, read should take a strong lock.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'select f11()' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.13 SELECT that reads a table through a subquery passed
|
||||
# as a parameter to a stored function which modifies
|
||||
# data.
|
||||
#
|
||||
# Even though a call to this function is written to the
|
||||
# binary log, values of its parameters are written as literals.
|
||||
# So there is no need to acquire strong locks for tables used in
|
||||
# the subquery.
|
||||
Success: 'select f12((select i+10 from t1 where i=1))' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 4.14 INSERT that reads a table via a subquery passed
|
||||
# as a parameter to a stored function which doesn't
|
||||
# modify data.
|
||||
#
|
||||
# Since this statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting the data it
|
||||
# uses. Therefore it should take strong locks on the data it reads.
|
||||
Success: 'insert into t2 values (f13((select i+10 from t1 where i=1)))' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 5. Statements that read tables through stored procedures.
|
||||
#
|
||||
#
|
||||
# 5.1 CALL statement which reads a table via SELECT.
|
||||
#
|
||||
# Since neither this statement nor its components are
|
||||
# written to the binary log, there is no need to take
|
||||
# strong locks on the data it reads.
|
||||
Success: 'call p2(@a)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 5.2 Function that modifies data and uses CALL,
|
||||
# which reads a table through SELECT.
|
||||
#
|
||||
# Since a call to such function is written to the binary
|
||||
# log, it should be serialized with concurrent statements.
|
||||
# Hence, in this case reads should take strong locks on data.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'select f14()' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 5.3 SELECT that calls a function that doesn't modify data and
|
||||
# uses a CALL statement that reads a table via SELECT.
|
||||
#
|
||||
# Calls to such functions won't get into the binary log and
|
||||
# thus don't need to acquire strong locks.
|
||||
# In 5.5 due to fix for bug #53921 "Wrong locks for SELECTs
|
||||
# used stored functions may lead to broken SBR" strong locks
|
||||
# are taken (we accepted it as a trade-off for this fix).
|
||||
Success: 'select f15()' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 5.4 INSERT which calls function which doesn't modify data and
|
||||
# uses CALL statement which reads table through SELECT.
|
||||
#
|
||||
# Since such statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting data it
|
||||
# uses. Therefore it should take strong locks on data it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'insert into t2 values (f15()+5)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 6. Statements that use triggers.
|
||||
#
|
||||
#
|
||||
# 6.1 Statement invoking a trigger that reads table via SELECT.
|
||||
#
|
||||
# Since this statement is written to the binary log it should
|
||||
# be serialized with concurrent statements affecting the data
|
||||
# it uses. Therefore, it should take strong locks on the data
|
||||
# it reads.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'insert into t4 values (2)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 6.2 Statement invoking a trigger that reads table through
|
||||
# a subquery in a control construct.
|
||||
#
|
||||
# The above is true for this statement as well.
|
||||
Success: 'update t4 set l= 2 where l = 1' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 6.3 Statement invoking a trigger that reads a table through
|
||||
# a view.
|
||||
#
|
||||
# And for this statement.
|
||||
Success: 'delete from t4 where l = 1' doesn't allow concurrent inserts into 't1'.
|
||||
#
|
||||
# 6.4 Statement invoking a trigger that reads a table through
|
||||
# a stored function.
|
||||
#
|
||||
# And for this statement.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'insert into t5 values (2)' allows concurrent inserts into 't1'.
|
||||
#
|
||||
# 6.5 Statement invoking a trigger that reads a table through
|
||||
# stored procedure.
|
||||
#
|
||||
# And for this statement.
|
||||
# But due to bug #53921 "Wrong locks for SELECTs used stored
|
||||
# functions may lead to broken SBR" weak locks are taken.
|
||||
Success: 'update t5 set l= 2 where l = 1' allows concurrent inserts into 't1'.
|
||||
# Clean-up.
|
||||
drop function f1;
|
||||
drop function f2;
|
||||
drop function f3;
|
||||
drop function f4;
|
||||
drop function f5;
|
||||
drop function f6;
|
||||
drop function f7;
|
||||
drop function f8;
|
||||
drop function f9;
|
||||
drop function f10;
|
||||
drop function f11;
|
||||
drop function f12;
|
||||
drop function f13;
|
||||
drop function f14;
|
||||
drop function f15;
|
||||
drop view v1, v2;
|
||||
drop procedure p1;
|
||||
drop procedure p2;
|
||||
drop table t1, t2, t3, t4, t5, te;
|
||||
set @@global.concurrent_insert= @old_concurrent_insert;
|
||||
|
|
@ -602,9 +602,6 @@ select * from t2 /* must be (3,1), (4,4) */;
|
|||
a b
|
||||
3 1
|
||||
4 4
|
||||
show master status /* there must be the UPDATE query event */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 206
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,2),(3,4),(4,4);
|
||||
|
|
@ -612,9 +609,6 @@ insert into t2 values (1,2),(3,4),(4,4);
|
|||
reset master;
|
||||
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 221
|
||||
drop table t1, t2;
|
||||
set @@session.binlog_format= @sav_binlog_format;
|
||||
drop table if exists t1, t2, t3;
|
||||
|
|
|
|||
|
|
@ -1,5 +1,29 @@
|
|||
drop table if exists t1;
|
||||
#
|
||||
# Bug#49161: Out of memory; restart server and try again (needed 2 bytes)
|
||||
#
|
||||
CREATE TABLE t1 (a INT) PARTITION BY HASH (a);
|
||||
FLUSH TABLES;
|
||||
CHECK TABLE t1;
|
||||
Table Op Msg_type Msg_text
|
||||
test.t1 check Error Failed to read from the .par file
|
||||
test.t1 check Error Incorrect information in file: './test/t1.frm'
|
||||
test.t1 check error Corrupt
|
||||
SELECT * FROM t1;
|
||||
ERROR HY000: Failed to read from the .par file
|
||||
# Note that it is currently impossible to drop a partitioned table
|
||||
# without the .par file
|
||||
DROP TABLE t1;
|
||||
ERROR 42S02: Unknown table 't1'
|
||||
#
|
||||
# Bug#49477: Assertion `0' failed in ha_partition.cc:5530
|
||||
# with temporary table and partitions
|
||||
#
|
||||
CREATE TABLE t1 (a INT) PARTITION BY HASH(a);
|
||||
CREATE TEMPORARY TABLE tmp_t1 LIKE t1;
|
||||
ERROR HY000: Cannot create temporary table with partitions
|
||||
DROP TABLE t1;
|
||||
#
|
||||
# Bug#50392: insert_id is not reset for partitioned tables
|
||||
# auto_increment on duplicate entry
|
||||
CREATE TABLE t1 (a INT AUTO_INCREMENT PRIMARY KEY);
|
||||
|
|
|
|||
|
|
@ -7,6 +7,6 @@ ERROR HY000: Incorrect usage of ALTER DATABASE UPGRADE DATA DIRECTORY NAME and n
|
|||
ALTER DATABASE `#mysql51#not-yet` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR HY000: Incorrect usage of ALTER DATABASE UPGRADE DATA DIRECTORY NAME and name
|
||||
ALTER DATABASE `#mysql50#` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR HY000: Incorrect usage of ALTER DATABASE UPGRADE DATA DIRECTORY NAME and name
|
||||
ERROR 42000: Incorrect database name '#mysql50#'
|
||||
ALTER DATABASE `#mysql50#upgrade-me` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Unknown database '#mysql50#upgrade-me'
|
||||
|
|
|
|||
|
|
@ -14,13 +14,13 @@ end|
|
|||
reset master|
|
||||
insert into t2 values (bug23333(),1)|
|
||||
ERROR 23000: Duplicate entry '1' for key 'PRIMARY'
|
||||
show binlog events from 106 /* with fixes for #23333 will show there is the query */|
|
||||
show binlog events from <binlog_start>|
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Query 1 # #
|
||||
master-bin.000001 # Table_map 1 # #
|
||||
master-bin.000001 # Table_map 1 # #
|
||||
master-bin.000001 # Write_rows 1 # #
|
||||
master-bin.000001 # Query 1 # #
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t2)
|
||||
master-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
master-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
master-bin.000001 # Query # # ROLLBACK
|
||||
select count(*),@a from t1 /* must be 1,1 */|
|
||||
count(*) @a
|
||||
1 1
|
||||
|
|
|
|||
|
|
@ -138,3 +138,13 @@ CAST(c AS TIME)
|
|||
00:00:00
|
||||
DROP TABLE t1;
|
||||
End of 5.0 tests
|
||||
#
|
||||
# Bug#53942 valgrind warnings with timestamp() function and incomplete datetime values
|
||||
#
|
||||
CREATE TABLE t1(f1 TIME);
|
||||
INSERT INTO t1 VALUES ('23:38:57');
|
||||
SELECT TIMESTAMP(f1,'1') FROM t1;
|
||||
TIMESTAMP(f1,'1')
|
||||
NULL
|
||||
DROP TABLE t1;
|
||||
End of 5.1 tests
|
||||
|
|
|
|||
|
|
@ -112,3 +112,31 @@ select * from `a-b-c`.v1;
|
|||
f1
|
||||
drop database `a-b-c`;
|
||||
use test;
|
||||
# End of 5.0 tests
|
||||
#
|
||||
# Bug #53804: serious flaws in the alter database .. upgrade data
|
||||
# directory name command
|
||||
#
|
||||
ALTER DATABASE `#mysql50#:` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Unknown database '#mysql50#:'
|
||||
ALTER DATABASE `#mysql50#.` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#.'
|
||||
ALTER DATABASE `#mysql50#../` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#../'
|
||||
ALTER DATABASE `#mysql50#../..` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#../..'
|
||||
ALTER DATABASE `#mysql50#../../` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#../../'
|
||||
ALTER DATABASE `#mysql50#./blablabla` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#./blablabla'
|
||||
ALTER DATABASE `#mysql50#../blablabla` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#../blablabla'
|
||||
ALTER DATABASE `#mysql50#/` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#/'
|
||||
ALTER DATABASE `#mysql50#/.` UPGRADE DATA DIRECTORY NAME;
|
||||
ERROR 42000: Incorrect database name '#mysql50#/.'
|
||||
USE `#mysql50#.`;
|
||||
ERROR 42000: Incorrect database name '#mysql50#.'
|
||||
USE `#mysql50#../blablabla`;
|
||||
ERROR 42000: Incorrect database name '#mysql50#../blablabla'
|
||||
# End of 5.1 tests
|
||||
|
|
|
|||
|
|
@ -156,9 +156,9 @@ select * from t2 /* must be (3,1), (4,4) */;
|
|||
a b
|
||||
1 1
|
||||
4 4
|
||||
show master status /* there must no UPDATE in binlog */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
# There must no UPDATE in binlog;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
delete from t1;
|
||||
delete from t2;
|
||||
insert into t1 values (1,2),(3,4),(4,4);
|
||||
|
|
@ -166,8 +166,8 @@ insert into t2 values (1,2),(3,4),(4,4);
|
|||
reset master;
|
||||
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 no UPDATE query event */;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106
|
||||
# There must be no UPDATE query event;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
drop table t1, t2;
|
||||
End of tests
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
File diff suppressed because it is too large
Load diff
|
|
@ -104,9 +104,8 @@ select * from t2;
|
|||
a
|
||||
select * from t3;
|
||||
a
|
||||
show binlog events;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Format_desc # # Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 # Query # # use `test`; drop table t1,t2
|
||||
master-bin.000001 # Query # # use `test`; create table t1 (a int) engine=blackhole
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
|
|
@ -126,7 +125,7 @@ master-bin.000001 # Query # # use `test`; replace into t1 values(100)
|
|||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # use `test`; create table t2 (a varchar(200)) engine=blackhole
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=581
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE '../../std_data/words.dat' INTO TABLE `t2` FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`a`) ;file_id=#
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
master-bin.000001 # Query # # use `test`; alter table t1 add b int
|
||||
|
|
@ -163,13 +162,6 @@ start transaction;
|
|||
insert into t1 values(2);
|
||||
rollback;
|
||||
set autocommit=1;
|
||||
show binlog events;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Format_desc # # Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 # Query # # use `test`; create table t1 (a int) engine=blackhole
|
||||
master-bin.000001 # Query # # BEGIN
|
||||
master-bin.000001 # Query # # use `test`; insert into t1 values(1)
|
||||
master-bin.000001 # Query # # COMMIT
|
||||
drop table if exists t1;
|
||||
reset master;
|
||||
create table t1 (a int auto_increment, primary key (a)) engine=blackhole;
|
||||
|
|
|
|||
|
|
@ -155,7 +155,8 @@ reset master;
|
|||
UPDATE t2,t1 SET t2.a=t1.a+2;
|
||||
# check
|
||||
select * from t2 /* must be (3,1), (4,4) */;
|
||||
show master status /* there must no UPDATE in binlog */;
|
||||
--echo # There must no UPDATE in binlog;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
# B. testing multi_update::send_error() execution branch
|
||||
delete from t1;
|
||||
|
|
@ -165,7 +166,8 @@ insert into t2 values (1,2),(3,4),(4,4);
|
|||
reset master;
|
||||
--error ER_DUP_ENTRY
|
||||
UPDATE t2,t1 SET t2.a=t2.b where t2.a=t1.a;
|
||||
show master status /* there must be no UPDATE query event */;
|
||||
--echo # There must be no UPDATE query event;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
# cleanup bug#27716
|
||||
drop table t1, t2;
|
||||
|
|
|
|||
|
|
@ -202,7 +202,7 @@ eval kill query $ID;
|
|||
rollback;
|
||||
|
||||
connection con2;
|
||||
--error 0,ER_QUERY_INTERRUPTED,ER_LOCK_WAIT_TIMEOUT
|
||||
--error 0,ER_QUERY_INTERRUPTED
|
||||
reap;
|
||||
# todo 1,2 above
|
||||
rollback;
|
||||
|
|
|
|||
|
|
@ -5,8 +5,7 @@ create table t1 (a int, b int) engine=innodb;
|
|||
begin;
|
||||
insert into t1 values (1,2);
|
||||
commit;
|
||||
--replace_regex /\/\* xid=.* \*\//\/* XID *\// /Server ver: .*, Binlog ver: .*/Server ver: #, Binlog ver: #/ /table_id: [0-9]+/table_id: #/
|
||||
show binlog events;
|
||||
source include/show_binlog_events.inc;
|
||||
drop table t1;
|
||||
|
||||
# This is a wrapper for binlog.test so that the same test case can be used
|
||||
|
|
|
|||
|
|
@ -16,12 +16,11 @@ LOAD DATA INFILE FILENAME
|
|||
SELECT COUNT(*) FROM t1;
|
||||
COUNT(*)
|
||||
3
|
||||
SHOW BINLOG EVENTS;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 # Format_desc 1 # Server ver: #
|
||||
master-bin.000001 # Query 1 # use `test`; CREATE TABLE t1 (b CHAR(10))
|
||||
master-bin.000001 # Begin_load_query 1 # ;file_id=#;block_len=#
|
||||
master-bin.000001 # Execute_load_query 1 # use `test`; LOAD DATA INFILE FILENAME ;file_id=#
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (b CHAR(10))
|
||||
master-bin.000001 # Begin_load_query # # ;file_id=#;block_len=#
|
||||
master-bin.000001 # Execute_load_query # # use `test`; LOAD DATA INFILE 'MYSQLTEST_VARDIR/tmp/rpl_bug12691.dat' INTO TABLE `t1` FIELDS TERMINATED BY '|' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '\n' (`b`) ;file_id=#
|
||||
|
||||
**** On Slave ****
|
||||
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
|
||||
|
|
|
|||
|
|
@ -13,5 +13,6 @@ Tables_in_test
|
|||
t1
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 278
|
||||
master-bin.000001 # <Binlog_Do_DB> <Binlog_Ignore_DB>
|
||||
flush logs;
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -28,9 +28,7 @@ STOP SLAVE;
|
|||
|
||||
SELECT COUNT(*) FROM t1;
|
||||
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /Server ver: .+/Server ver: #/ /table_id: [0-9]+/table_id: #/ /COMMIT.+xid=[0-9]+.+/#/ /file_id=[0-9]+/file_id=#/ /block_len=[0-9]+/block_len=#/ /'.+'/FILENAME/
|
||||
SHOW BINLOG EVENTS;
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
--save_master_pos
|
||||
|
||||
|
|
|
|||
|
|
@ -21,8 +21,10 @@ create table t1(id int);
|
|||
|
||||
show tables;
|
||||
|
||||
show master status;
|
||||
--source include/show_master_status.inc
|
||||
|
||||
flush logs;
|
||||
|
||||
--exec $MYSQL_BINLOG $MYSQL_TEST_DIR/var/log/master-bin.000001 | $MYSQL test
|
||||
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -10,166 +10,25 @@ File Position Binlog_Do_DB Binlog_Ignore_DB
|
|||
master-bin.000001 106
|
||||
stop slave;
|
||||
reset slave;
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry #
|
||||
Master_Log_File
|
||||
Read_Master_Log_Pos 4
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 0
|
||||
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
|
||||
change master to master_host='127.0.0.1';
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry #
|
||||
Master_Log_File
|
||||
Read_Master_Log_Pos 4
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 0
|
||||
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
|
||||
change master to master_host='127.0.0.1',master_user='root',
|
||||
master_password='',master_port=MASTER_PORT;
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port MASTER_PORT
|
||||
Connect_Retry #
|
||||
Master_Log_File
|
||||
Read_Master_Log_Pos 4
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 0
|
||||
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
|
||||
start slave;
|
||||
show slave status;
|
||||
Slave_IO_State Waiting for master to send event
|
||||
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 106
|
||||
Relay_Log_File slave-relay-bin.000002
|
||||
Relay_Log_Pos 252
|
||||
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 407
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
drop table if exists t1;
|
||||
create table t1 (n int, PRIMARY KEY(n));
|
||||
insert into t1 values (10),(45),(90);
|
||||
|
|
|
|||
|
|
@ -4,8 +4,7 @@ reset master;
|
|||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
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
|
||||
SHOW SLAVE STATUS;;
|
||||
SHOW SLAVE HOSTS;
|
||||
Server_id Host Port Rpl_recovery_rank Master_id
|
||||
2 127.0.0.1 SLAVE_PORT 0 1
|
||||
|
|
|
|||
|
|
@ -11,13 +11,7 @@ stop slave sql_thread;
|
|||
insert into t1 values(1);
|
||||
insert into t1 values(2);
|
||||
stop slave;
|
||||
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_MYPORT 1 master-bin.000001 # # # master-bin.000001 No No 0 0 191 # None 0 No # No 0 0
|
||||
change master to master_user='root';
|
||||
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_MYPORT 1 master-bin.000001 # # # master-bin.000001 No No 0 0 191 # None 0 No # No 0 0
|
||||
start slave;
|
||||
select * from t1;
|
||||
n
|
||||
|
|
|
|||
|
|
@ -4,8 +4,6 @@ reset master;
|
|||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
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
|
||||
load table t1 from master;
|
||||
ERROR 08S01: Error connecting to master: Master is not configured
|
||||
load table t1 from master;
|
||||
|
|
|
|||
|
|
@ -17,43 +17,6 @@ let $result_pattern= '%127.0.0.1%root%slave-bin.000001%slave-bin.000001%Yes%Yes%
|
|||
|
||||
--source include/wait_slave_status.inc
|
||||
flush logs;
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User root
|
||||
Master_Port SLAVE_PORT
|
||||
Connect_Retry 60
|
||||
Master_Log_File slave-bin.000001
|
||||
Read_Master_Log_Pos 106
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File slave-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 #
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno 0
|
||||
Last_IO_Error
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
Relay_Log_File mysqld-relay-bin.000003
|
||||
Checking that both slave threads are running.
|
||||
STOP SLAVE;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,6 @@ load data infile '../../std_data/rpl_loaddata.dat' into table test.t1;
|
|||
select count(*) from test.t1;
|
||||
count(*)
|
||||
2
|
||||
show binlog events from 106;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
drop table test.t1;
|
||||
|
|
|
|||
|
|
@ -4,39 +4,23 @@ reset master;
|
|||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106 <Binlog_Ignore_DB>
|
||||
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 106 # # master-bin.000001 Yes Yes 0 0 106 # None 0 No # No 0 0
|
||||
stop slave;
|
||||
change master to master_log_pos=106;
|
||||
change master to master_log_pos=MASTER_LOG_POS;
|
||||
start slave;
|
||||
stop slave;
|
||||
change master to master_log_pos=106;
|
||||
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 106 # # master-bin.000001 No No 0 0 106 # None 0 No # No 0 0
|
||||
change master to master_log_pos=MASTER_LOG_POS;
|
||||
start slave;
|
||||
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 106 # # master-bin.000001 Yes Yes 0 0 106 # None 0 No # No 0 0
|
||||
stop slave;
|
||||
change master to master_log_pos=177;
|
||||
# impossible position leads to an error
|
||||
change master to master_log_pos=MASTER_LOG_POS;
|
||||
start slave;
|
||||
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 177 # # master-bin.000001 No Yes 0 0 177 # None 0 No # No 1236 Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position' 0
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
master-bin.000001 106 <Binlog_Ignore_DB>
|
||||
Last_IO_Error = Got fatal error 1236 from master when reading data from binary log: 'Client requested master to start replication from impossible position'
|
||||
create table if not exists t1 (n int);
|
||||
drop table if exists t1;
|
||||
create table t1 (n int);
|
||||
insert into t1 values (1),(2),(3);
|
||||
stop slave;
|
||||
change master to master_log_pos=206;
|
||||
change master to master_log_pos=MASTER_LOG_POS;
|
||||
start slave;
|
||||
select * from t1 ORDER BY n;
|
||||
n
|
||||
|
|
|
|||
|
|
@ -14,47 +14,16 @@ MIXED MIXED
|
|||
CREATE TABLE t1 (a INT, b LONG);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||
INSERT INTO t1 VALUES (3,UUID()), (4,UUID());
|
||||
SHOW BINLOG EVENTS;
|
||||
show binlog events from <binlog_start>;
|
||||
**** On Slave ****
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
SHOW BINLOG EVENTS;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
slave-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a INT, b LONG)
|
||||
slave-bin.000001 # Query # # use `test`; INSERT INTO t1 VALUES (1,1), (2,2)
|
||||
slave-bin.000001 # Query # # BEGIN
|
||||
slave-bin.000001 # Table_map # # table_id: # (test.t1)
|
||||
slave-bin.000001 # Write_rows # # table_id: # flags: STMT_END_F
|
||||
slave-bin.000001 # Query # # COMMIT
|
||||
show binlog events from <binlog_start>;
|
||||
DROP TABLE IF EXISTS t1;
|
||||
SET GLOBAL BINLOG_FORMAT=@saved_binlog_format;
|
||||
|
|
|
|||
|
|
@ -41,12 +41,11 @@ t1
|
|||
t2
|
||||
**** On Master ****
|
||||
DROP TABLE t1,t2;
|
||||
SHOW BINLOG EVENTS;
|
||||
show binlog events from <binlog_start>;
|
||||
Log_name Pos Event_type Server_id End_log_pos Info
|
||||
master-bin.000001 4 Format_desc 1 106 Server ver: VERSION, Binlog ver: 4
|
||||
master-bin.000001 106 Query 1 192 use `test`; CREATE TABLE t1 (a int)
|
||||
master-bin.000001 192 Query 1 278 use `test`; CREATE TABLE t2 (a int)
|
||||
master-bin.000001 278 Query 1 382 use `test`; DROP TABLE `t1` /* generated by server */
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t1 (a int)
|
||||
master-bin.000001 # Query # # use `test`; CREATE TABLE t2 (a int)
|
||||
master-bin.000001 # Query # # use `test`; DROP TABLE `t1` /* generated by server */
|
||||
SHOW TABLES;
|
||||
Tables_in_test
|
||||
t2
|
||||
|
|
|
|||
|
|
@ -17,43 +17,5 @@ a
|
|||
0
|
||||
drop table t1;
|
||||
insert into t1 values (1);
|
||||
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 Yes
|
||||
Slave_SQL_Running No
|
||||
Replicate_Do_DB
|
||||
Replicate_Ignore_DB
|
||||
Replicate_Do_Table
|
||||
Replicate_Ignore_Table test.t2
|
||||
Replicate_Wild_Do_Table
|
||||
Replicate_Wild_Ignore_Table
|
||||
Last_Errno 1146
|
||||
Last_Error Error 'Table 'test.t1' doesn't exist' on opening tables
|
||||
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 1146
|
||||
Last_SQL_Error Error 'Table 'test.t1' doesn't exist' on opening tables
|
||||
Last_SQL_Error = Error 'Table 'test.t1' doesn't exist' on opening tables
|
||||
drop table t1, t2;
|
||||
|
|
|
|||
|
|
@ -24,45 +24,7 @@ select @@global.max_relay_log_size;
|
|||
@@global.max_relay_log_size
|
||||
4096
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 2
|
||||
#
|
||||
|
|
@ -72,45 +34,7 @@ set global max_relay_log_size=(5*4096);
|
|||
select @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size 20480
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 3: max_relay_log_size = 0
|
||||
#
|
||||
|
|
@ -120,90 +44,13 @@ set global max_relay_log_size=0;
|
|||
select @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size 0
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 4: Tests below are mainly to ensure that we have not coded with wrong assumptions
|
||||
#
|
||||
stop slave;
|
||||
reset slave;
|
||||
flush logs;
|
||||
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
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
#
|
||||
# Test 5
|
||||
#
|
||||
|
|
@ -211,89 +58,13 @@ reset slave;
|
|||
start slave;
|
||||
flush logs;
|
||||
create table t1 (a int);
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 6: one more rotation, to be sure Relay_Log_Space is correctly updated
|
||||
#
|
||||
flush logs;
|
||||
drop table t1;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
flush logs;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
|
|
|
|||
|
|
@ -4,196 +4,37 @@ reset master;
|
|||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
stop slave;
|
||||
Master_Host 127.0.0.1
|
||||
include/stop_slave.inc
|
||||
change master to master_user='test';
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User test
|
||||
Master_Port MASTER_PORT
|
||||
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 No
|
||||
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 #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
reset slave;
|
||||
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
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
stop slave;
|
||||
reset slave;
|
||||
start slave;
|
||||
Master_User root
|
||||
Master_Host 127.0.0.1
|
||||
include/start_slave.inc
|
||||
Master_User root
|
||||
Master_Host 127.0.0.1
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
include/start_slave.inc
|
||||
create temporary table t1 (a int);
|
||||
stop slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
start slave;
|
||||
include/start_slave.inc
|
||||
show status like 'slave_open_temp_tables';
|
||||
Variable_name Value
|
||||
Slave_open_temp_tables 0
|
||||
stop slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
*** errno must be zero: 0 ***
|
||||
change master to master_user='impossible_user_name';
|
||||
start slave;
|
||||
ONE
|
||||
1
|
||||
include/stop_slave.inc
|
||||
change master to master_user='root';
|
||||
include/start_slave.inc
|
||||
*** last errno must be zero: 0 ***
|
||||
*** last error must be blank: ***
|
||||
include/stop_slave.inc
|
||||
change master to master_user='impossible_user_name';
|
||||
start slave;
|
||||
ONE
|
||||
1
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
*** io last errno must be zero: 0 ***
|
||||
*** io last error must be blank: ***
|
||||
*** sql last errno must be zero: 0 ***
|
||||
*** sql last error must be blank: ***
|
||||
|
|
|
|||
|
|
@ -12,193 +12,39 @@ create table t2(n int not null auto_increment primary key);
|
|||
insert into t2 values (1),(2);
|
||||
insert into t2 values (3),(4);
|
||||
drop table t2;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=311;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_LOG_POS;
|
||||
select * from t1;
|
||||
n
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
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 slave-relay-bin.000004
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running #
|
||||
Slave_SQL_Running No
|
||||
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 Master
|
||||
Until_Log_File master-bin.000001
|
||||
Until_Log_Pos 311
|
||||
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
|
||||
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
|
||||
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=MASTER_LOG_POS;
|
||||
select * from t1;
|
||||
n 1
|
||||
n 2
|
||||
n 3
|
||||
n 4
|
||||
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 slave-relay-bin.000004
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running #
|
||||
Slave_SQL_Running No
|
||||
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 Master
|
||||
Until_Log_File master-no-such-bin.000001
|
||||
Until_Log_Pos 291
|
||||
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
|
||||
start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=728;
|
||||
n
|
||||
1
|
||||
2
|
||||
3
|
||||
4
|
||||
start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=RELAY_LOG_POS;
|
||||
select * from t2;
|
||||
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 slave-relay-bin.000004
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running #
|
||||
Slave_SQL_Running No
|
||||
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 Relay
|
||||
Until_Log_File slave-relay-bin.000004
|
||||
Until_Log_Pos 728
|
||||
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
|
||||
n
|
||||
1
|
||||
2
|
||||
start slave;
|
||||
stop slave;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=740;
|
||||
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 slave-relay-bin.000004
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File master-bin.000001
|
||||
Slave_IO_Running Yes
|
||||
Slave_SQL_Running No
|
||||
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 Master
|
||||
Until_Log_File master-bin.000001
|
||||
Until_Log_Pos 740
|
||||
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
|
||||
start slave until master_log_file='master-bin', master_log_pos=561;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_LOG_POS;
|
||||
start slave until master_log_file='master-bin', master_log_pos=MASTER_LOG_POS;
|
||||
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_LOG_POS, relay_log_pos=RELAY_LOG_POS;
|
||||
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
|
||||
start slave until master_log_file='master-bin.000001';
|
||||
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
|
||||
start slave until relay_log_file='slave-relay-bin.000002';
|
||||
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
|
||||
start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
|
||||
start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=MASTER_LOG_POS;
|
||||
ERROR HY000: Incorrect parameter or combination of parameters for START SLAVE UNTIL
|
||||
start slave sql_thread;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=740;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=MASTER_LOG_POS;
|
||||
Warnings:
|
||||
Level Note
|
||||
Code 1254
|
||||
Message Slave is already running
|
||||
Note 1254 Slave is already running
|
||||
|
|
|
|||
|
|
@ -8,10 +8,8 @@ create table t1 (n int);
|
|||
reset master;
|
||||
stop slave;
|
||||
change master to master_port=SLAVE_PORT;
|
||||
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 SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # # 0 0 0 106 None 0 No NULL No 0 0
|
||||
start slave;
|
||||
Last_IO_Error = Fatal error: The slave I/O thread stops because master and slave have equal MySQL server ids; these ids must be different for replication to work (or the --replicate-same-server-id option must be used on slave but this does not always make sense; please check the manual before using it).
|
||||
insert into t1 values (1);
|
||||
show status like "slave_running";
|
||||
Variable_name Value
|
||||
|
|
|
|||
|
|
@ -8,9 +8,6 @@ create table t1 (n int);
|
|||
reset master;
|
||||
stop slave;
|
||||
change master to master_port=SLAVE_PORT;
|
||||
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 SLAVE_PORT 1 4 slave-relay-bin.000001 4 No No # 0 0 0 106 None 0 No NULL No 0 0
|
||||
start slave;
|
||||
insert into t1 values (1);
|
||||
select * from t1;
|
||||
|
|
|
|||
|
|
@ -18,44 +18,5 @@ drop user rpl@127.0.0.1;
|
|||
flush privileges;
|
||||
stop slave;
|
||||
start slave;
|
||||
show slave status;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User rpl
|
||||
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 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 #
|
||||
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 NULL
|
||||
Master_SSL_Verify_Server_Cert No
|
||||
Last_IO_Errno #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
drop table t1;
|
||||
drop table t1;
|
||||
|
|
|
|||
|
|
@ -21,45 +21,7 @@ select @@global.max_relay_log_size;
|
|||
@@global.max_relay_log_size
|
||||
4096
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 2
|
||||
#
|
||||
|
|
@ -69,45 +31,7 @@ set global max_relay_log_size=(5*4096);
|
|||
select @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size 20480
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 3: max_relay_log_size = 0
|
||||
#
|
||||
|
|
@ -117,90 +41,13 @@ set global max_relay_log_size=0;
|
|||
select @@global.max_relay_log_size;
|
||||
@@global.max_relay_log_size 0
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 4: Tests below are mainly to ensure that we have not coded with wrong assumptions
|
||||
#
|
||||
stop slave;
|
||||
reset slave;
|
||||
flush logs;
|
||||
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
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
#
|
||||
# Test 5
|
||||
#
|
||||
|
|
@ -208,89 +55,13 @@ reset slave;
|
|||
start slave;
|
||||
flush logs;
|
||||
create table t1 (a int);
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
#
|
||||
# Test 6: one more rotation, to be sure Relay_Log_Space is correctly updated
|
||||
#
|
||||
flush logs;
|
||||
drop table t1;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
Checking that both slave threads are running.
|
||||
flush logs;
|
||||
show master status;
|
||||
File Position Binlog_Do_DB Binlog_Ignore_DB
|
||||
|
|
|
|||
|
|
@ -4,196 +4,37 @@ reset master;
|
|||
reset slave;
|
||||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
stop slave;
|
||||
Master_Host 127.0.0.1
|
||||
include/stop_slave.inc
|
||||
change master to master_user='test';
|
||||
SHOW SLAVE STATUS;
|
||||
Slave_IO_State #
|
||||
Master_Host 127.0.0.1
|
||||
Master_User test
|
||||
Master_Port MASTER_PORT
|
||||
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 No
|
||||
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 #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
reset slave;
|
||||
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
|
||||
Read_Master_Log_Pos #
|
||||
Relay_Log_File #
|
||||
Relay_Log_Pos #
|
||||
Relay_Master_Log_File
|
||||
Slave_IO_Running No
|
||||
Slave_SQL_Running No
|
||||
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 #
|
||||
Last_IO_Error #
|
||||
Last_SQL_Errno 0
|
||||
Last_SQL_Error
|
||||
start slave;
|
||||
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 #
|
||||
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 #
|
||||
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
|
||||
stop slave;
|
||||
reset slave;
|
||||
start slave;
|
||||
Master_User root
|
||||
Master_Host 127.0.0.1
|
||||
include/start_slave.inc
|
||||
Master_User root
|
||||
Master_Host 127.0.0.1
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
include/start_slave.inc
|
||||
create temporary table t1 (a int);
|
||||
stop slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
start slave;
|
||||
include/start_slave.inc
|
||||
show status like 'slave_open_temp_tables';
|
||||
Variable_name Value
|
||||
Slave_open_temp_tables 1
|
||||
stop slave;
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
*** errno must be zero: 0 ***
|
||||
change master to master_user='impossible_user_name';
|
||||
start slave;
|
||||
ONE
|
||||
1
|
||||
include/stop_slave.inc
|
||||
change master to master_user='root';
|
||||
include/start_slave.inc
|
||||
*** last errno must be zero: 0 ***
|
||||
*** last error must be blank: ***
|
||||
include/stop_slave.inc
|
||||
change master to master_user='impossible_user_name';
|
||||
start slave;
|
||||
ONE
|
||||
1
|
||||
include/stop_slave.inc
|
||||
reset slave;
|
||||
*** io last errno must be zero: 0 ***
|
||||
*** io last error must be blank: ***
|
||||
*** sql last errno must be zero: 0 ***
|
||||
*** sql last error must be blank: ***
|
||||
|
|
|
|||
|
|
@ -376,7 +376,7 @@ CREATE TABLE t12 (data LONG);
|
|||
LOCK TABLES t12 WRITE;
|
||||
INSERT INTO t12 VALUES(UUID());
|
||||
UNLOCK TABLES;
|
||||
show binlog events;
|
||||
show binlog events;
|
||||
show binlog events from <binlog_start>;
|
||||
show binlog events from <binlog_start>;
|
||||
drop database mysqltest1;
|
||||
set global binlog_format= @saved_binlog_format;
|
||||
|
|
|
|||
|
|
@ -11,31 +11,25 @@ save_master_pos;
|
|||
connection slave;
|
||||
stop slave;
|
||||
reset slave;
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 5 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
let $status_items= Master_Log_File, Read_Master_Log_Pos, Relay_Master_Log_File, Exec_Master_Log_Pos;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
change master to master_host='127.0.0.1';
|
||||
# The following needs to be cleaned up when change master is fixed
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 5 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
eval change master to master_host='127.0.0.1',master_user='root',
|
||||
master_password='',master_port=$MASTER_MYPORT;
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 5 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
source include/show_slave_status.inc;
|
||||
|
||||
start slave;
|
||||
sync_with_master;
|
||||
let $status_items= Master_Log_File, Relay_Master_Log_File;
|
||||
source include/show_slave_status.inc;
|
||||
source include/check_slave_is_running.inc;
|
||||
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 5 # 8 # 9 # 23 # 33 #
|
||||
--replace_column 33 #
|
||||
show slave status;
|
||||
connection master;
|
||||
--disable_warnings
|
||||
drop table if exists t1;
|
||||
|
|
|
|||
|
|
@ -7,15 +7,11 @@ source include/master-slave.inc;
|
|||
--disable_ps_protocol
|
||||
|
||||
#first, make sure the slave has had enough time to register
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
sync_slave_with_master;
|
||||
|
||||
#discover slaves
|
||||
connection master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
SHOW SLAVE STATUS;
|
||||
--query_vertical SHOW SLAVE STATUS;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
SHOW SLAVE HOSTS;
|
||||
rpl_probe;
|
||||
|
|
@ -25,9 +21,7 @@ enable_rpl_parse;
|
|||
create table t1 ( n int);
|
||||
insert into t1 values (1),(2),(3),(4);
|
||||
disable_rpl_parse;
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
sync_slave_with_master;
|
||||
insert into t1 values(5);
|
||||
connection master;
|
||||
enable_rpl_parse;
|
||||
|
|
|
|||
|
|
@ -18,13 +18,26 @@ save_master_pos;
|
|||
connection slave;
|
||||
--real_sleep 3 # wait for I/O thread to have read updates
|
||||
stop slave;
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
source include/wait_for_slave_to_stop.inc;
|
||||
|
||||
let $read_pos= query_get_value(SHOW SLAVE STATUS, Read_Master_Log_Pos, 1);
|
||||
let $exec_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1);
|
||||
if (`SELECT $read_pos = $exec_pos`)
|
||||
{
|
||||
source include/show_rpl_debug_info.inc;
|
||||
echo 'Read_Master_Log_Pos: $read_pos' == 'Exec_Master_Log_Pos: $exec_pos';
|
||||
die Failed because Read_Master_Log_Pos is equal to Exec_Master_Log_Pos;
|
||||
}
|
||||
change master to master_user='root';
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
let $read_pos= query_get_value(SHOW SLAVE STATUS, Read_Master_Log_Pos, 1);
|
||||
let $exec_pos= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1);
|
||||
if (`SELECT $read_pos <> $exec_pos`)
|
||||
{
|
||||
source include/show_rpl_debug_info.inc;
|
||||
echo 'Read_Master_Log_Pos: $read_pos' <> 'Exec_Master_Log_Pos: $exec_pos';
|
||||
die Failed because Read_Master_Log_Pos is not equal to Exec_Master_Log_Pos;
|
||||
}
|
||||
|
||||
start slave;
|
||||
sync_with_master;
|
||||
select * from t1;
|
||||
|
|
|
|||
|
|
@ -1,8 +1,5 @@
|
|||
source include/master-slave.inc;
|
||||
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
#
|
||||
# Load table should not succeed on the master as this is not a slave
|
||||
#
|
||||
|
|
|
|||
|
|
@ -41,8 +41,7 @@ sleep 5;
|
|||
#
|
||||
# Show status of slave
|
||||
#
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
--replace_column 1 # 8 # 9 # 16 # 23 # 33 #
|
||||
--vertical_results
|
||||
SHOW SLAVE STATUS;
|
||||
--let status_items= Relay_Log_File
|
||||
--source include/show_slave_status.inc
|
||||
--source include/check_slave_is_running.inc
|
||||
STOP SLAVE;
|
||||
|
|
|
|||
|
|
@ -20,9 +20,7 @@ save_master_pos;
|
|||
connection slave;
|
||||
sync_with_master;
|
||||
select count(*) from test.t1; # check that LOAD was replicated
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
show binlog events from 106; # should be nothing
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
# Cleanup
|
||||
connection master;
|
||||
|
|
|
|||
|
|
@ -11,36 +11,41 @@
|
|||
# Passes with rbr no problem, removed statement include [jbm]
|
||||
|
||||
source include/master-slave.inc;
|
||||
--replace_column 3 <Binlog_Ignore_DB>
|
||||
show master status;
|
||||
let $master_log_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
sync_slave_with_master;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
stop slave;
|
||||
change master to master_log_pos=106;
|
||||
|
||||
--replace_result $master_log_pos MASTER_LOG_POS
|
||||
eval change master to master_log_pos=$master_log_pos;
|
||||
start slave;
|
||||
sleep 5;
|
||||
stop slave;
|
||||
change master to master_log_pos=106;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
|
||||
--replace_result $master_log_pos MASTER_LOG_POS
|
||||
eval change master to master_log_pos=$master_log_pos;
|
||||
--let $slave_param= Read_Master_Log_Pos
|
||||
--let $slave_param_value= $master_log_pos
|
||||
--source include/wait_for_slave_param.inc
|
||||
|
||||
start slave;
|
||||
sleep 5;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
--let $slave_param= Read_Master_Log_Pos
|
||||
--let $slave_param_value= $master_log_pos
|
||||
--source include/wait_for_slave_param.inc
|
||||
--source include/check_slave_no_error.inc
|
||||
|
||||
stop slave;
|
||||
--echo # impossible position leads to an error
|
||||
--replace_result 177 MASTER_LOG_POS
|
||||
change master to master_log_pos=177;
|
||||
start slave;
|
||||
sleep 2;
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 8 # 9 # 23 # 33 #
|
||||
show slave status;
|
||||
let $slave_io_errno= 1236;
|
||||
let $show_slave_io_error= 1;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
connection master;
|
||||
--replace_column 3 <Binlog_Ignore_DB>
|
||||
show master status;
|
||||
|
||||
let $master_log_pos= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
create table if not exists t1 (n int);
|
||||
drop table if exists t1;
|
||||
create table t1 (n int);
|
||||
|
|
@ -48,7 +53,9 @@ insert into t1 values (1),(2),(3);
|
|||
save_master_pos;
|
||||
connection slave;
|
||||
stop slave;
|
||||
change master to master_log_pos=206;
|
||||
|
||||
--replace_result $master_log_pos MASTER_LOG_POS
|
||||
eval change master to master_log_pos=$master_log_pos;
|
||||
start slave;
|
||||
sync_with_master;
|
||||
select * from t1 ORDER BY n;
|
||||
|
|
|
|||
|
|
@ -15,25 +15,17 @@ SELECT @@GLOBAL.BINLOG_FORMAT, @@SESSION.BINLOG_FORMAT;
|
|||
CREATE TABLE t1 (a INT, b LONG);
|
||||
INSERT INTO t1 VALUES (1,1), (2,2);
|
||||
INSERT INTO t1 VALUES (3,UUID()), (4,UUID());
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
# Different number of binlog events are generated by different engines
|
||||
--disable_result_log
|
||||
SHOW BINLOG EVENTS;
|
||||
source include/show_binlog_events.inc;
|
||||
--enable_result_log
|
||||
sync_slave_with_master;
|
||||
--echo **** On Slave ****
|
||||
--replace_result $MASTER_MYPORT MASTER_PORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--query_vertical SHOW SLAVE STATUS
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
source include/show_binlog_events.inc;
|
||||
|
||||
# Different number of binlog events are generated by different engines
|
||||
--disable_result_log
|
||||
SHOW BINLOG EVENTS;
|
||||
source include/show_binlog_events.inc;
|
||||
--enable_result_log
|
||||
--exec $MYSQL_DUMP --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/rpl_rbr_to_sbr_master.sql
|
||||
--exec $MYSQL_DUMP_SLAVE --compact --order-by-primary --skip-extended-insert --no-create-info test > $MYSQLTEST_VARDIR/tmp/rpl_rbr_to_sbr_slave.sql
|
||||
|
|
|
|||
|
|
@ -30,10 +30,7 @@ connection master;
|
|||
--echo **** On Master ****
|
||||
# Should drop the non-temporary table t1 and the temporary table t2
|
||||
DROP TABLE t1,t2;
|
||||
let $VERSION=`select version()`;
|
||||
--replace_result $VERSION VERSION
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
SHOW BINLOG EVENTS;
|
||||
source include/show_binlog_events.inc;
|
||||
SHOW TABLES;
|
||||
sync_slave_with_master;
|
||||
--echo **** On Slave ****
|
||||
|
|
|
|||
|
|
@ -22,13 +22,11 @@ connection master;
|
|||
insert into t1 values (1);
|
||||
|
||||
connection slave;
|
||||
# slave should have stopped because can't find table t1
|
||||
wait_for_slave_to_stop;
|
||||
# slave should have stopped because can't find table t1
|
||||
# see if we have a good error message:
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
|
||||
--vertical_results
|
||||
show slave status;
|
||||
--let $slave_sql_errno= 1146
|
||||
--let $show_slave_sql_error= 1
|
||||
--source include/wait_for_slave_sql_error.inc
|
||||
|
||||
# cleanup
|
||||
connection master;
|
||||
|
|
|
|||
|
|
@ -18,44 +18,50 @@ connection master;
|
|||
# create some events on master
|
||||
create table t1(n int not null auto_increment primary key);
|
||||
insert into t1 values (1),(2),(3),(4);
|
||||
let $master_log_pos_1= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
drop table t1;
|
||||
|
||||
create table t2(n int not null auto_increment primary key);
|
||||
insert into t2 values (1),(2);
|
||||
let $master_log_pos_2= query_get_value(SHOW MASTER STATUS, Position, 1);
|
||||
insert into t2 values (3),(4);
|
||||
drop table t2;
|
||||
|
||||
# try to replicate all queries until drop of t1
|
||||
connection slave;
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=311;
|
||||
--replace_result $master_log_pos_1 MASTER_LOG_POS
|
||||
eval start slave until master_log_file='master-bin.000001', master_log_pos=$master_log_pos_1;
|
||||
sleep 2;
|
||||
wait_for_slave_to_stop;
|
||||
# here table should be still not deleted
|
||||
select * from t1;
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
--replace_column 1 # 7 # 9 # 11 # 22 # 23 # 33 #
|
||||
show slave status;
|
||||
--let $slave_param= Exec_Master_Log_Pos
|
||||
--let $slave_param_value= $master_log_pos_1
|
||||
--source include/check_slave_param.inc
|
||||
|
||||
# this should fail right after start
|
||||
--replace_result 291 MASTER_LOG_POS
|
||||
start slave until master_log_file='master-no-such-bin.000001', master_log_pos=291;
|
||||
# again this table should be still not deleted
|
||||
select * from t1;
|
||||
sleep 2;
|
||||
wait_for_slave_to_stop;
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
--replace_column 1 # 7 # 9 # 11 # 22 # 23 # 33 #
|
||||
show slave status;
|
||||
--let $slave_param= Exec_Master_Log_Pos
|
||||
--let $slave_param_value= $master_log_pos_1
|
||||
--source include/check_slave_param.inc
|
||||
|
||||
# try replicate all up to and not including the second insert to t2;
|
||||
start slave until relay_log_file='slave-relay-bin.000004', relay_log_pos=728;
|
||||
let $master_log_pos= $master_log_pos_2;
|
||||
let $relay_log_file= slave-relay-bin.000004;
|
||||
--source include/get_relay_log_pos.inc
|
||||
--replace_result $relay_log_pos RELAY_LOG_POS
|
||||
eval start slave until relay_log_file='$relay_log_file', relay_log_pos=$relay_log_pos;
|
||||
sleep 2;
|
||||
wait_for_slave_to_stop;
|
||||
select * from t2;
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
--replace_column 1 # 7 # 9 # 11 # 22 # 23 # 33 #
|
||||
show slave status;
|
||||
--let $slave_param= Exec_Master_Log_Pos
|
||||
--let $slave_param_value= $master_log_pos
|
||||
--source include/check_slave_param.inc
|
||||
|
||||
# clean up
|
||||
start slave;
|
||||
|
|
@ -65,27 +71,32 @@ connection slave;
|
|||
sync_with_master;
|
||||
stop slave;
|
||||
|
||||
--let $exec_log_pos_1= query_get_value(SHOW SLAVE STATUS, Exec_Master_Log_Pos, 1)
|
||||
# this should stop immediately as we are already there
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=740;
|
||||
--replace_result $master_log_pos_2 MASTER_LOG_POS
|
||||
eval start slave until master_log_file='master-bin.000001', master_log_pos=$master_log_pos_2;
|
||||
sleep 2;
|
||||
wait_for_slave_to_stop;
|
||||
# here the sql slave thread should be stopped
|
||||
--vertical_results
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT bin.000005 bin.000004 bin.000006 bin.000004 bin.000007 bin.000004
|
||||
--replace_column 1 # 7 # 9 # 22 # 23 # 33 #
|
||||
show slave status;
|
||||
--let $slave_param= Exec_Master_Log_Pos
|
||||
--let $slave_param_value= $exec_log_pos_1
|
||||
--source include/check_slave_param.inc
|
||||
|
||||
#testing various error conditions
|
||||
--replace_result 561 MASTER_LOG_POS
|
||||
--error 1277
|
||||
start slave until master_log_file='master-bin', master_log_pos=561;
|
||||
--replace_result 561 MASTER_LOG_POS 12 RELAY_LOG_POS
|
||||
--error 1277
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=561, relay_log_pos=12;
|
||||
--error 1277
|
||||
start slave until master_log_file='master-bin.000001';
|
||||
--error 1277
|
||||
start slave until relay_log_file='slave-relay-bin.000002';
|
||||
--replace_result 561 MASTER_LOG_POS
|
||||
--error 1277
|
||||
start slave until relay_log_file='slave-relay-bin.000002', master_log_pos=561;
|
||||
# Warning should be given for second command
|
||||
start slave sql_thread;
|
||||
--replace_result 740 MASTER_LOG_POS
|
||||
start slave until master_log_file='master-bin.000001', master_log_pos=740;
|
||||
|
|
|
|||
|
|
@ -12,10 +12,13 @@ reset master;
|
|||
stop slave;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval change master to master_port=$SLAVE_MYPORT;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
--replace_column 16 # 18 #
|
||||
show slave status;
|
||||
source include/check_slave_no_error.inc;
|
||||
|
||||
start slave;
|
||||
let $slave_io_errno= 1593;
|
||||
let $show_slave_io_error= 1;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
|
||||
insert into t1 values (1);
|
||||
# can't MASTER_POS_WAIT(), it does not work in this weird setup
|
||||
# (when slave is its own master without --replicate-same-server-id)
|
||||
|
|
|
|||
|
|
@ -9,9 +9,6 @@ reset master;
|
|||
stop slave;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
eval change master to master_port=$SLAVE_MYPORT;
|
||||
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||
--replace_column 18 #
|
||||
show slave status;
|
||||
start slave;
|
||||
insert into t1 values (1);
|
||||
save_master_pos;
|
||||
|
|
|
|||
|
|
@ -22,9 +22,7 @@ drop table if exists t1;
|
|||
--enable_warnings
|
||||
create table t1 (n int);
|
||||
insert into t1 values (1);
|
||||
save_master_pos;
|
||||
connection slave;
|
||||
sync_with_master;
|
||||
sync_slave_with_master;
|
||||
select * from t1;
|
||||
|
||||
# 3. Delete new replication user
|
||||
|
|
@ -40,12 +38,8 @@ stop slave;
|
|||
start slave;
|
||||
|
||||
# 5. Make sure Slave_IO_Running = No
|
||||
--replace_result $MASTER_MYPORT MASTER_MYPORT
|
||||
# Column 1 is replaced, since the output can be either
|
||||
# "Connecting to master" or "Waiting for master update"
|
||||
--replace_column 1 # 7 # 8 # 9 # 22 # 23 # 35 # 36 #
|
||||
--vertical_results
|
||||
show slave status;
|
||||
let $slave_io_errno= 1045;
|
||||
source include/wait_for_slave_io_error.inc;
|
||||
|
||||
# Cleanup (Note that slave IO thread is not running)
|
||||
connection slave;
|
||||
|
|
|
|||
|
|
@ -501,9 +501,7 @@ INSERT INTO t12 VALUES(UUID());
|
|||
UNLOCK TABLES;
|
||||
|
||||
--disable_result_log
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
show binlog events;
|
||||
source include/show_binlog_events.inc;
|
||||
--enable_result_log
|
||||
sync_slave_with_master;
|
||||
|
||||
|
|
@ -520,9 +518,7 @@ diff_files $MYSQLTEST_VARDIR/tmp/rpl_switch_stm_row_mixed_master.sql $MYSQLTEST_
|
|||
|
||||
connection master;
|
||||
--disable_result_log
|
||||
--replace_column 2 # 5 #
|
||||
--replace_regex /table_id: [0-9]+/table_id: #/
|
||||
show binlog events;
|
||||
source include/show_binlog_events.inc;
|
||||
--enable_result_log
|
||||
|
||||
# Now test that mysqlbinlog works fine on a binlog generated by the
|
||||
|
|
|
|||
|
|
@ -1179,82 +1179,6 @@ a b
|
|||
8 8
|
||||
9 9
|
||||
drop table t1;
|
||||
CREATE TABLE t1 (a int not null primary key, b int not null, key (b)) engine=innodb;
|
||||
CREATE TABLE t2 (a int not null primary key, b int not null, key (b)) engine=innodb;
|
||||
INSERT INTO t1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(11,11),(12,12);
|
||||
INSERT INTO t2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
||||
update t1,t2 set t1.a=t1.a+100;
|
||||
select * from t1;
|
||||
a b
|
||||
101 1
|
||||
102 2
|
||||
103 3
|
||||
104 4
|
||||
105 5
|
||||
106 6
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
112 12
|
||||
update t1,t2 set t1.a=t1.a+100 where t1.a=101;
|
||||
select * from t1;
|
||||
a b
|
||||
201 1
|
||||
102 2
|
||||
103 3
|
||||
104 4
|
||||
105 5
|
||||
106 6
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
112 12
|
||||
update t1,t2 set t1.b=t1.b+10 where t1.b=2;
|
||||
select * from t1;
|
||||
a b
|
||||
201 1
|
||||
103 3
|
||||
104 4
|
||||
105 5
|
||||
106 6
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
102 12
|
||||
112 12
|
||||
update t1,t2 set t1.b=t1.b+2,t2.b=t1.b+10 where t1.b between 3 and 5 and t1.a=t2.a+100;
|
||||
select * from t1;
|
||||
a b
|
||||
201 1
|
||||
103 5
|
||||
104 6
|
||||
106 6
|
||||
105 7
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
102 12
|
||||
112 12
|
||||
select * from t2;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
6 6
|
||||
7 7
|
||||
8 8
|
||||
9 9
|
||||
3 13
|
||||
4 14
|
||||
5 15
|
||||
drop table t1,t2;
|
||||
CREATE TABLE t2 ( NEXT_T BIGINT NOT NULL PRIMARY KEY) ENGINE=MyISAM;
|
||||
CREATE TABLE t1 ( B_ID INTEGER NOT NULL PRIMARY KEY) ENGINE=InnoDB;
|
||||
SET AUTOCOMMIT=0;
|
||||
|
|
@ -1747,10 +1671,10 @@ variable_value - @innodb_rows_deleted_orig
|
|||
71
|
||||
SELECT variable_value - @innodb_rows_inserted_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_inserted';
|
||||
variable_value - @innodb_rows_inserted_orig
|
||||
1084
|
||||
1063
|
||||
SELECT variable_value - @innodb_rows_updated_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_rows_updated';
|
||||
variable_value - @innodb_rows_updated_orig
|
||||
885
|
||||
865
|
||||
SELECT variable_value - @innodb_row_lock_waits_orig FROM information_schema.global_status WHERE LOWER(variable_name) = 'innodb_row_lock_waits';
|
||||
variable_value - @innodb_row_lock_waits_orig
|
||||
0
|
||||
|
|
|
|||
10
mysql-test/suite/innodb/r/innodb_bug48024.result
Normal file
10
mysql-test/suite/innodb/r/innodb_bug48024.result
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
CREATE TABLE bug48024(a int PRIMARY KEY,b int NOT NULL,KEY(b)) ENGINE=InnoDB;
|
||||
CREATE TABLE bug48024_b(b int PRIMARY KEY) ENGINE=InnoDB;
|
||||
ALTER TABLE bug48024 /*/ADD CONSTRAINT FOREIGN KEY(c) REFERENCES(a),/*/
|
||||
ADD CONSTRAINT FOREIGN KEY(b) REFERENCES bug48024_b(b);
|
||||
DROP TABLE bug48024,bug48024_b;
|
||||
CREATE TABLE bug48024(a int PRIMARY KEY,b int NOT NULL,KEY(b)) ENGINE=InnoDB;
|
||||
CREATE TABLE bug48024_b(b int PRIMARY KEY) ENGINE=InnoDB;
|
||||
ALTER TABLE bug48024 /*/ADD CONSTRAINT FOREIGN KEY(c) REFERENCES(a),/*/
|
||||
ADD CONSTRAINT FOREIGN KEY(b) REFERENCES bug48024_b(b)|
|
||||
DROP TABLE bug48024,bug48024_b;
|
||||
42
mysql-test/suite/innodb/r/innodb_bug49164.result
Normal file
42
mysql-test/suite/innodb/r/innodb_bug49164.result
Normal file
|
|
@ -0,0 +1,42 @@
|
|||
SET tx_isolation = 'READ-COMMITTED';
|
||||
CREATE TABLE bug49164 (a INT, b BIGINT, c TINYINT, PRIMARY KEY (a, b))
|
||||
ENGINE=InnoDB;
|
||||
insert into bug49164 values (1,1,1), (2,2,2), (3,3,3);
|
||||
begin;
|
||||
update bug49164 set c=7;
|
||||
select * from bug49164;
|
||||
a b c
|
||||
1 1 7
|
||||
2 2 7
|
||||
3 3 7
|
||||
rollback;
|
||||
select * from bug49164;
|
||||
a b c
|
||||
1 1 1
|
||||
2 2 2
|
||||
3 3 3
|
||||
begin;
|
||||
update bug49164 set c=7;
|
||||
SET tx_isolation = 'READ-COMMITTED';
|
||||
begin;
|
||||
select * from bug49164;
|
||||
a b c
|
||||
1 1 1
|
||||
2 2 2
|
||||
3 3 3
|
||||
commit;
|
||||
begin;
|
||||
update bug49164 set c=6 where a=1 and b=1;
|
||||
rollback;
|
||||
select * from bug49164;
|
||||
a b c
|
||||
1 1 1
|
||||
2 2 2
|
||||
3 3 3
|
||||
commit;
|
||||
select * from bug49164;
|
||||
a b c
|
||||
1 1 6
|
||||
2 2 2
|
||||
3 3 3
|
||||
drop table bug49164;
|
||||
76
mysql-test/suite/innodb/r/innodb_multi_update.result
Normal file
76
mysql-test/suite/innodb/r/innodb_multi_update.result
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
CREATE TABLE bug38999_1 (a int not null primary key, b int not null, key (b)) engine=innodb;
|
||||
CREATE TABLE bug38999_2 (a int not null primary key, b int not null, key (b)) engine=innodb;
|
||||
INSERT INTO bug38999_1 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9),(10,10),(11,11),(12,12);
|
||||
INSERT INTO bug38999_2 values (1,1),(2,2),(3,3),(4,4),(5,5),(6,6),(7,7),(8,8),(9,9);
|
||||
update bug38999_1,bug38999_2 set bug38999_1.a=bug38999_1.a+100;
|
||||
select * from bug38999_1;
|
||||
a b
|
||||
101 1
|
||||
102 2
|
||||
103 3
|
||||
104 4
|
||||
105 5
|
||||
106 6
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
112 12
|
||||
update bug38999_1,bug38999_2 set bug38999_1.a=bug38999_1.a+100 where bug38999_1.a=101;
|
||||
select * from bug38999_1;
|
||||
a b
|
||||
201 1
|
||||
102 2
|
||||
103 3
|
||||
104 4
|
||||
105 5
|
||||
106 6
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
112 12
|
||||
update bug38999_1,bug38999_2 set bug38999_1.b=bug38999_1.b+10 where bug38999_1.b=2;
|
||||
select * from bug38999_1;
|
||||
a b
|
||||
201 1
|
||||
103 3
|
||||
104 4
|
||||
105 5
|
||||
106 6
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
102 12
|
||||
112 12
|
||||
update bug38999_1,bug38999_2 set bug38999_1.b=bug38999_1.b+2,bug38999_2.b=bug38999_1.b+10 where bug38999_1.b between 3 and 5 and bug38999_1.a=bug38999_2.a+100;
|
||||
select * from bug38999_1;
|
||||
a b
|
||||
201 1
|
||||
103 5
|
||||
104 6
|
||||
106 6
|
||||
105 7
|
||||
107 7
|
||||
108 8
|
||||
109 9
|
||||
110 10
|
||||
111 11
|
||||
102 12
|
||||
112 12
|
||||
select * from bug38999_2;
|
||||
a b
|
||||
1 1
|
||||
2 2
|
||||
6 6
|
||||
7 7
|
||||
8 8
|
||||
9 9
|
||||
3 13
|
||||
4 14
|
||||
5 15
|
||||
drop table bug38999_1,bug38999_2;
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue