FLUSH TABLES WITH READ LOCK和set global read_only=1的区别

set global read_only是全局级别的,置为1之后root用户还可以写,其他用户不能写
FLUSH TABLES WITH READ LOCK是表级别的(使用UNLOCK tables解锁),执行之后所有用户都不能写,但是在flush tables以后lock就失效了,而 set global read_only不会失效

set global read_only=true或set global read_only=on或set global read_only=1一样
set global read_only=false或set global read_only=off或set global read_only=0一样

1: select @@read_only \G
->@@read_only: 0
1: CREATE TABLE IF NOT EXISTS bla (id BIGINT(16), PRIMARY KEY(id));
1: LOCK TABLE bla READ;
2: set global read_only=0;
->Will block until the lock from connection 1 is released.

1: UNLOCK TABLES;
2: set global read_only=1;
1: select @@read_only \G
->@@read_only: 1
1: LOCK TABLE bla READ;
2: set global read_only=1;
->Will block until the lock from connection 1 is released.

1: UNLOCK TABLES;
1: select @@read_only \G
->@@read_only: 1
1: LOCK TABLE bla READ;
2: set global read_only=0;
->Will block until the lock from connection 1 is released.

你可能感兴趣的:(FLUSH TABLES WITH READ LOCK和set global read_only=1的区别)