2006-02-08 13:08:19 +01:00
2005-12-22 06:39:02 +01:00
-- source include/master-slave.inc
2002-12-29 22:46:48 +01:00
2003-02-21 23:38:56 +01:00
# Clean up old slave's binlogs.
# The slave is started with --log-slave-updates
# and this test does SHOW BINLOG EVENTS on the slave's
# binlog. But previous tests can influence the current test's
# binlog (e.g. a temporary table in the previous test has not
# been explicitly deleted, or it has but the slave hasn't had
# enough time to catch it before STOP SLAVE,
# and at the beginning of the current
# test the slave immediately writes DROP TEMPORARY TABLE this_old_table).
# We wait for the slave to have written all he wants to the binlog
# (otherwise RESET MASTER may come too early).
save_master_pos;
connection slave;
sync_with_master;
reset master;
connection master;
2002-12-29 22:46:48 +01:00
connect (con1,localhost,root,,);
connect (con2,localhost,root,,);
2003-10-07 23:15:13 +02:00
# We want to connect as an unprivileged user. But if we use user="" then this
# will pick the Unix login, which will cause problems if you're running the test
# as root.
connect (con3,localhost,zedjzlcsjhd,,);
2003-06-11 17:07:33 +02:00
# We are going to use SET PSEUDO_THREAD_ID in this test;
# check that it requires the SUPER privilege.
connection con3;
2004-03-27 01:07:09 +01:00
SET @save_select_limit=@@session.sql_select_limit;
2003-06-11 17:07:33 +02:00
--error 1227
2004-03-27 01:07:09 +01:00
SET @@session.sql_select_limit=10, @@session.pseudo_thread_id=100;
SELECT @@session.sql_select_limit = @save_select_limit; #shouldn't have changed
2004-03-26 19:25:22 +01:00
# While we are here we also test that SQL_LOG_BIN can't be set
--error 1227
2004-03-27 01:07:09 +01:00
SET @@session.sql_select_limit=10, @@session.sql_log_bin=0;
SELECT @@session.sql_select_limit = @save_select_limit; #shouldn't have changed
2004-03-26 19:25:22 +01:00
# Now as root, to be sure it works
connection con2;
SET @@session.pseudo_thread_id=100;
SET @@session.pseudo_thread_id=connection_id();
SET @@session.sql_log_bin=0;
SET @@session.sql_log_bin=1;
2002-12-29 22:46:48 +01:00
2004-03-26 19:25:22 +01:00
connection con3;
2003-01-17 13:39:29 +01:00
let $VERSION=`select version()`;
2003-01-06 00:48:59 +01:00
--disable_warnings
drop table if exists t1,t2;
--enable_warnings
2002-12-29 22:46:48 +01:00
create table t1(f int);
create table t2(f int);
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
connection con1;
2006-02-08 17:09:57 +01:00
create temporary table t3(f int);
2002-12-29 22:46:48 +01:00
insert into t3 select * from t1 where f<6;
2002-12-30 18:42:02 +01:00
sleep 1;
2002-12-29 22:46:48 +01:00
connection con2;
2006-02-08 17:09:57 +01:00
create temporary table t3(f int);
2002-12-30 18:42:02 +01:00
sleep 1;
2002-12-29 22:46:48 +01:00
connection con1;
insert into t2 select count(*) from t3;
2002-12-30 18:42:02 +01:00
sleep 1;
2002-12-29 22:46:48 +01:00
connection con2;
insert into t3 select * from t1 where f>=4;
2002-12-30 18:42:02 +01:00
sleep 1;
2002-12-29 22:46:48 +01:00
connection con1;
drop temporary table t3;
2002-12-30 18:42:02 +01:00
sleep 1;
2002-12-29 22:46:48 +01:00
connection con2;
insert into t2 select count(*) from t3;
drop temporary table t3;
2006-02-08 13:08:19 +01:00
select * from t2 ORDER BY f;
2002-12-29 22:46:48 +01:00
2005-12-22 06:39:02 +01:00
# Commented out 8/30/2005 to make compatable with both sbr and rbr
#--replace_result $VERSION VERSION
#--replace_column 2 # 5 #
#show binlog events;
2002-12-29 22:46:48 +01:00
2003-01-06 00:48:59 +01:00
drop table t1, t2;
2002-12-29 22:46:48 +01:00
use test;
SET TIMESTAMP=1040323920;
create table t1(f int);
SET TIMESTAMP=1040323931;
create table t2(f int);
SET TIMESTAMP=1040323938;
insert into t1 values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10);
SET TIMESTAMP=1040323945;
SET @@session.pseudo_thread_id=1;
2006-02-08 17:09:57 +01:00
create temporary table t3(f int);
2002-12-29 22:46:48 +01:00
SET TIMESTAMP=1040323952;
SET @@session.pseudo_thread_id=1;
insert into t3 select * from t1 where f<6;
SET TIMESTAMP=1040324145;
SET @@session.pseudo_thread_id=2;
2006-02-08 17:09:57 +01:00
create temporary table t3(f int);
2002-12-29 22:46:48 +01:00
SET TIMESTAMP=1040324186;
SET @@session.pseudo_thread_id=1;
insert into t2 select count(*) from t3;
SET TIMESTAMP=1040324200;
SET @@session.pseudo_thread_id=2;
insert into t3 select * from t1 where f>=4;
SET TIMESTAMP=1040324211;
SET @@session.pseudo_thread_id=1;
drop temporary table t3;
SET TIMESTAMP=1040324219;
SET @@session.pseudo_thread_id=2;
insert into t2 select count(*) from t3;
SET TIMESTAMP=1040324224;
SET @@session.pseudo_thread_id=2;
drop temporary table t3;
2006-02-08 13:08:19 +01:00
select * from t2 ORDER BY f;
2003-01-06 00:48:59 +01:00
drop table t1,t2;
2003-11-03 13:01:59 +01:00
# Create last a temporary table that is not dropped at end to ensure that we
# don't get any memory leaks for this
2006-02-08 17:09:57 +01:00
create temporary table t3 (f int);
2003-11-03 13:01:59 +01:00
sync_with_master;
2006-04-23 18:59:43 +02:00
# The server will now close done
2006-04-07 19:44:37 +02:00
#
# Bug#17284 erroneous temp table cleanup on slave
#
connection master;
create temporary table t4 (f int);
create table t5 (f int);
sync_with_master;
# find dumper's $id
source include/get_binlog_dump_thread_id.inc;
insert into t4 values (1);
# a hint how to do that in 5.1
--replace_result $id "`select id from information_schema.processlist where command='Binlog Dump'`"
eval kill $id; # to stimulate reconnection by slave w/o timeout
insert into t5 select * from t4;
save_master_pos;
connection slave;
sync_with_master;
select * from t5 /* must be 1 after reconnection */;
connection master;
drop temporary table t4;
drop table t5;
2006-04-23 18:59:43 +02:00
#
# BUG#17263 incorrect generation DROP temp tables
# Temporary tables of connection are dropped in batches
# where a batch correspond to pseudo_thread_id
# value was set up at the moment of temp table creation
#
connection con1;
2006-05-12 20:29:06 +02:00
set @@session.pseudo_thread_id=100;
2006-04-23 18:59:43 +02:00
create temporary table t101 (id int);
create temporary table t102 (id int);
2006-05-12 20:29:06 +02:00
set @@session.pseudo_thread_id=200;
2006-04-23 18:59:43 +02:00
create temporary table t201 (id int);
2006-05-18 21:40:52 +02:00
#create temporary table `t``201` (id int);
2006-05-12 20:29:06 +02:00
# emulate internal temp table not to come to binlog
create temporary table `#sql_not_user_table202` (id int);
set @@session.pseudo_thread_id=300;
create temporary table t301 (id int);
create temporary table t302 (id int);
create temporary table `#sql_not_user_table303` (id int);
disconnect con1;
2006-04-23 18:59:43 +02:00
#now do something to show that slave is ok after DROP temp tables
connection master;
create table t1(f int);
insert into t1 values (1);
sync_slave_with_master;
#connection slave;
select * from t1 /* must be 1 */;
connection master;
drop table t1;
2005-07-28 02:22:47 +02:00
2006-05-09 22:01:31 +02:00
#
#14157: utf8 encoding in binlog without set character_set_client
#
2006-05-14 19:09:09 +02:00
--exec $MYSQL --character-sets-dir=../sql/share/charsets/ --default-character-set=koi8r test -e 'create table t1 (a int); set names koi8r; create temporary table `<60> <> <EFBFBD> <EFBFBD> ` (a int); insert into `<60> <> <EFBFBD> <EFBFBD> ` values (1); insert into t1 select * from `<60> <> <EFBFBD> <EFBFBD> `'
2006-05-09 22:01:31 +02:00
sync_slave_with_master;
#connection slave;
select * from t1;
connection master;
drop table t1;
2006-04-07 19:44:37 +02:00
# End of 5.0 tests