Browse Source
WL#3602 (SET GLOBAL READONLY)
WL#3602 (SET GLOBAL READONLY)
Bug#11733 (COMMITs should not happen if read-only is set) Bug#22009 (Can write to a read-only server under some circumstances) See the work log for details The change consist of a) acquiring the global read lock in SET GLOBAL READONLY b) honoring opt_readonly in ha_commit_trans(), c) honoring opt_readonly in mysql_lock_tables(). a) takes care of the server stability, b) makes the transactional tables safe (Bug 11733) c) makes the non transactional tables safe (Bug 22009) mysql-test/r/read_only.result: WL#3602 (SET GLOBAL READONLY) mysql-test/t/read_only.test: WL#3602 (SET GLOBAL READONLY) sql/handler.cc: WL#3602 (SET GLOBAL READONLY) sql/lock.cc: WL#3602 (SET GLOBAL READONLY) sql/set_var.cc: WL#3602 (SET GLOBAL READONLY) sql/set_var.h: WL#3602 (SET GLOBAL READONLY) mysql-test/r/read_only_innodb.result: WL#3602 (SET GLOBAL READONLY) mysql-test/t/read_only_innodb.test: WL#3602 (SET GLOBAL READONLY)pull/374/head
8 changed files with 321 additions and 4 deletions
-
52mysql-test/r/read_only.result
-
18mysql-test/r/read_only_innodb.result
-
110mysql-test/t/read_only.test
-
43mysql-test/t/read_only_innodb.test
-
9sql/handler.cc
-
13sql/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,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; |
|||
|
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue