龙空技术网

MySQL全局锁的用法

上进的我天天向上 99

前言:

当前同学们对“mysql释放锁语句”可能比较看重,大家都需要知道一些“mysql释放锁语句”的相关资讯。那么小编也在网摘上网罗了一些对于“mysql释放锁语句””的相关内容,希望朋友们能喜欢,姐妹们一起来学习一下吧!

MySQL数据库的锁分为全局锁、表级锁、行级锁,这一篇介绍的是MySQL全局锁的使用。

MySQL全局锁用于对一个数据库实例加锁,加了全局锁后该数据库实例将处于只读状态,可以执行查询语句,但执行DML、DDL语句则会被阻塞。MySQL全局锁的典型使用场景是用于数据库的全库备份。

加锁的语法为:flush tables with read lock;

释放锁的语法为:unlock tables;

如果关闭了数据库连接,全局锁也会自动释放。

需要注意的一点是,释放锁时只会释放当前会话的锁,不会释放其他会话的锁。

下面是一个备份数据库的例子。

备份数据库按以下步骤执行:

(1) 加全局锁

flush tables with read lock

(2) 备份数据库

mysqldump -uroot -p123456 study > D:\1.sql

(3) 释放全局锁

unlock tables

在实际使用过程中,可能存在多个会话的情况,下面就多个会话的一些情况做说明。

(1) flush tables with read lock在同一会话内可以反复执行,效果一样。

(2) 会话1执行flush tables with read lock后,会话2也可以执行flush tables with read lock。

(3) 会话1执行flush tables with read lock后,当前会话可以执行查询语句,但执行DML、DDL会报错:1223 - Can't execute the query because you have a conflicting read lock。

(4) 会话1执行flush tables with read lock后,其他会话可以执行查询语句,但执行DML、DDL会阻塞。当会话1释放全局锁后,其他会话正在执行的语句会继续执行。

标签: #mysql释放锁语句