Browse Source
Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
Merge malff@bk-internal.mysql.com:/home/bk/mysql-5.1-runtime
into weblab.(none):/home/marcsql/TREE/mysql-5.1-11733_topdown sql/handler.cc: Auto merged sql/set_var.cc: Auto mergedpull/374/head
11 changed files with 548 additions and 4 deletions
-
52mysql-test/r/read_only.result
-
18mysql-test/r/read_only_innodb.result
-
113mysql-test/r/rpl_read_only.result
-
110mysql-test/t/read_only.test
-
43mysql-test/t/read_only_innodb.test
-
1mysql-test/t/rpl_read_only-slave.opt
-
105mysql-test/t/rpl_read_only.test
-
13sql/handler.cc
-
17sql/lock.cc
-
66sql/set_var.cc
-
14sql/set_var.h
@ -0,0 +1,18 @@ |
|||
DROP TABLE IF EXISTS table_11733 ; |
|||
grant CREATE, SELECT, DROP on *.* to test@localhost; |
|||
set global read_only=0; |
|||
create table table_11733 (a int) engine=InnoDb; |
|||
BEGIN; |
|||
insert into table_11733 values(11733); |
|||
set global read_only=1; |
|||
select @@global.read_only; |
|||
@@global.read_only |
|||
1 |
|||
select * from table_11733 ; |
|||
a |
|||
11733 |
|||
COMMIT; |
|||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement |
|||
set global read_only=0; |
|||
drop table table_11733 ; |
|||
drop user test@localhost; |
@ -0,0 +1,113 @@ |
|||
stop slave; |
|||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; |
|||
reset master; |
|||
reset slave; |
|||
drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; |
|||
start slave; |
|||
create table t1(a int) engine=InnoDB; |
|||
create table t2(a int) engine=MyISAM; |
|||
insert into t1 values(1001); |
|||
insert into t2 values(2001); |
|||
set global read_only=1; |
|||
select @@read_only; |
|||
@@read_only |
|||
1 |
|||
select * from t1; |
|||
a |
|||
1001 |
|||
select * from t2; |
|||
a |
|||
2001 |
|||
select @@read_only; |
|||
@@read_only |
|||
0 |
|||
select * from t1; |
|||
a |
|||
1001 |
|||
select * from t2; |
|||
a |
|||
2001 |
|||
set global read_only=0; |
|||
BEGIN; |
|||
insert into t1 values(1002); |
|||
insert into t2 values(2002); |
|||
BEGIN; |
|||
insert into t1 values(1003); |
|||
insert into t2 values(2003); |
|||
set global read_only=1; |
|||
COMMIT; |
|||
COMMIT; |
|||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement |
|||
set global read_only=0; |
|||
insert into t1 values(1004); |
|||
insert into t2 values(2004); |
|||
select * from t1; |
|||
a |
|||
1001 |
|||
1002 |
|||
1004 |
|||
select * from t2; |
|||
a |
|||
2001 |
|||
2002 |
|||
2003 |
|||
2004 |
|||
select * from t1; |
|||
a |
|||
1001 |
|||
1002 |
|||
1004 |
|||
select * from t2; |
|||
a |
|||
2001 |
|||
2002 |
|||
2003 |
|||
2004 |
|||
set global read_only=1; |
|||
select @@read_only; |
|||
@@read_only |
|||
1 |
|||
show create table t1; |
|||
Table Create Table |
|||
t1 CREATE TABLE `t1` ( |
|||
`a` int(11) DEFAULT NULL |
|||
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
|||
show create table t2; |
|||
Table Create Table |
|||
t2 CREATE TABLE `t2` ( |
|||
`a` int(11) DEFAULT NULL |
|||
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |
|||
insert into t1 values(1005); |
|||
insert into t2 values(2005); |
|||
select * from t1; |
|||
a |
|||
1001 |
|||
1002 |
|||
1004 |
|||
1005 |
|||
select * from t2; |
|||
a |
|||
2001 |
|||
2002 |
|||
2003 |
|||
2004 |
|||
2005 |
|||
select * from t1; |
|||
a |
|||
1001 |
|||
1002 |
|||
1004 |
|||
1005 |
|||
select * from t2; |
|||
a |
|||
2001 |
|||
2002 |
|||
2003 |
|||
2004 |
|||
2005 |
|||
insert into t1 values(1006); |
|||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement |
|||
insert into t2 values(2006); |
|||
ERROR HY000: The MySQL server is running with the --read-only option so it cannot execute this statement |
|||
drop table t1; |
|||
drop table t2; |
@ -0,0 +1,43 @@ |
|||
# should work with embedded server after mysqltest is fixed |
|||
-- source include/not_embedded.inc |
|||
-- source include/have_innodb.inc |
|||
|
|||
# |
|||
# BUG#11733: COMMITs should not happen if read-only is set |
|||
# |
|||
|
|||
--disable_warnings |
|||
DROP TABLE IF EXISTS table_11733 ; |
|||
--enable_warnings |
|||
|
|||
# READ_ONLY does nothing to SUPER users |
|||
# so we use a non-SUPER one: |
|||
|
|||
grant CREATE, SELECT, DROP on *.* to test@localhost; |
|||
|
|||
connect (con1,localhost,test,,test); |
|||
|
|||
connection default; |
|||
set global read_only=0; |
|||
|
|||
# Any transactional engine will do |
|||
create table table_11733 (a int) engine=InnoDb; |
|||
|
|||
connection con1; |
|||
BEGIN; |
|||
insert into table_11733 values(11733); |
|||
|
|||
connection default; |
|||
set global read_only=1; |
|||
|
|||
connection con1; |
|||
select @@global.read_only; |
|||
select * from table_11733 ; |
|||
-- error ER_OPTION_PREVENTS_STATEMENT |
|||
COMMIT; |
|||
|
|||
connection default; |
|||
set global read_only=0; |
|||
drop table table_11733 ; |
|||
drop user test@localhost; |
|||
|
@ -0,0 +1 @@ |
|||
--innodb |
@ -0,0 +1,105 @@ |
|||
# Test case for BUG #11733 |
|||
-- source include/master-slave.inc |
|||
-- source include/have_innodb.inc |
|||
|
|||
# Setting the master readonly : |
|||
# - the variable @@readonly is not replicated on the slave |
|||
|
|||
connect (master2,127.0.0.1,test,,test,$MASTER_MYPORT,); |
|||
connect (slave2,127.0.0.1,test,,test,$SLAVE_MYPORT,); |
|||
|
|||
connection master1; |
|||
|
|||
create table t1(a int) engine=InnoDB; |
|||
create table t2(a int) engine=MyISAM; |
|||
insert into t1 values(1001); |
|||
insert into t2 values(2001); |
|||
|
|||
connection master; |
|||
set global read_only=1; |
|||
|
|||
connection master1; |
|||
select @@read_only; |
|||
select * from t1; |
|||
select * from t2; |
|||
|
|||
sync_slave_with_master; |
|||
select @@read_only; |
|||
select * from t1; |
|||
select * from t2; |
|||
|
|||
# - replication of transactions |
|||
connection master; |
|||
set global read_only=0; |
|||
|
|||
connection master1; |
|||
BEGIN; |
|||
insert into t1 values(1002); |
|||
insert into t2 values(2002); |
|||
|
|||
connection master2; |
|||
BEGIN; |
|||
insert into t1 values(1003); |
|||
insert into t2 values(2003); |
|||
|
|||
connection master; |
|||
set global read_only=1; |
|||
|
|||
connection master1; |
|||
## works even with read_only=1, because master1 is root |
|||
COMMIT; |
|||
|
|||
connection master2; |
|||
--error ER_OPTION_PREVENTS_STATEMENT |
|||
COMMIT; |
|||
|
|||
connection master; |
|||
set global read_only=0; |
|||
|
|||
connection master1; |
|||
insert into t1 values(1004); |
|||
insert into t2 values(2004); |
|||
|
|||
select * from t1; |
|||
select * from t2; |
|||
|
|||
sync_slave_with_master; |
|||
select * from t1; |
|||
select * from t2; |
|||
|
|||
# Setting the slave readonly : replication will pass |
|||
# |
|||
connection slave1; |
|||
set global read_only=1; |
|||
|
|||
connection slave; |
|||
select @@read_only; |
|||
# Make sure the replicated table is also transactional |
|||
show create table t1; |
|||
# Make sure the replicated table is not transactional |
|||
show create table t2; |
|||
|
|||
connection master; |
|||
insert into t1 values(1005); |
|||
insert into t2 values(2005); |
|||
select * from t1; |
|||
select * from t2; |
|||
|
|||
sync_slave_with_master; |
|||
connection slave; |
|||
select * from t1; |
|||
select * from t2; |
|||
|
|||
# Non root user can not write on the slave |
|||
connection slave2; |
|||
--error ER_OPTION_PREVENTS_STATEMENT |
|||
insert into t1 values(1006); |
|||
--error ER_OPTION_PREVENTS_STATEMENT |
|||
insert into t2 values(2006); |
|||
|
|||
## Cleanup |
|||
connection master; |
|||
drop table t1; |
|||
drop table t2; |
|||
sync_slave_with_master; |
|||
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue