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