MySQL各种锁定
1.只读锁定表
LOCK TABLE tb1_name READ; FLUSH TABLE tb1_name;
#操作
UNLOCK TABLE;
FLUSH需要授予相应权限
FLUSH 将使服务器关闭表文件,这会刷新可能仍缓存在内存里的未写入的更改
需要修改表时,不要使用这种锁定方式
2.读写访问锁定表
适合对表文件修改的场合,如表替换或表修复
LOCK TABLE tb1_name WRITE; FLUSH TABLE tb1_name; #进行相应表操作,可在另一窗口进行 FLUSH TABLE tb1_name; #做了修改,需要再次刷新表 UNLOCK TABLE;
如此锁定,读写都是不允许的
3.只读访问锁定所有数据库
FLUSH TABLES WITH READ LOCK; SET GLOBAL read_only = ON; #SET可能会阻塞,等待其他客户端释放它们所拥有的表锁,并完成所有 #未完成的事务,SET语句返回后,可安全地继续后面的操作。 SET GLOBAL read_only = OFF; UNLOCK TABLES;
此种锁定,其他客户端只能读取数据,不能更改它们
mysqldump备份时,可以使用这种方法
对某些想更新表的客户端不友好,只有真正有必要时才可以这样锁定服务器