mysql 全局锁_Mysql全局锁和表级锁

以前对Mysql的锁的认识,只了解表锁和行锁,其实Mysql的锁的种类还是不少的,有全局锁,表级锁,行级锁,还有元数据锁,间隙锁,临界锁。

一 全局锁

Mysql的全局锁是对整个实例加锁,加锁之后,数据库整体处于只读状态,数据上不能执行增删改,元数据上不能执行新建表,更新表;不能提交事务。 命令:

# 给Mysql 加全局锁

mysql> flush tables with read lock;

Query OK, 0 rows affected (0.00 sec)

# 无法执行删除操作

mysql> delete from test where id=1;

ERROR 1223 (HY000): Can\'t execute the query because you have a conflicting read lock

# 释放全局锁

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

mysql> delete from test where id=1;

Query OK, 0 rows affected (0.02 sec)

使用场景:

全局锁用在逻辑备份的时候,整个库都处于只读状态,便于进行备份,如果数据库不处于只读状态,备份的时候可能会存在逻辑不一致的问题。 对于InnoDB这种支持MVCC(多版本视图)的存储引擎来说,如果数据的事务级别处于可以重复读级别,备份采用mysqldump备份,通过一个命令选项[--single-transaction ]也支持逻辑一致性备份:

mysqldump -uxxx -p --single-transaction --master-data=2 --routines --flush-logs --databases db1 db2 db3 > alldb.sql;

mysqldump -uxxx -p --flush-privileges --databases mysql > mysql.sql;

single-transaction 会开启一个事务,保证读到的数据是一致的。

存在问题

全局锁会造成主库上业务无法正常秩序;

备库上加全局锁无法进行binlog的同步。

其他 数据库改成只读状态,不仅可以用刚才的全局锁,还可以通过:set global read_only=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值