MySQL锁
1、基本概念
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中的数据也是一种供多个用户使用的共享资源,
当多个用户并发地存取数据时,在数据库加锁的目的可以保证数据库数据的一致性。锁的类型
在数据库中,对数据的操作其实只有两种,即读和写,所以可用共享锁和互斥锁实现,即共享锁间之间是兼容的,而互斥锁间不兼容。共享锁(读锁):允许事务读
互斥锁(写锁):允许事务删除或者更新一行数据
共享锁代表了读操作、互斥锁代表了写操作,所以我们可以在数据库中并行读,但是只能串行写,只有这样才能保证不会发生线程竞争,实现线程安全。锁的粒度
我们按照锁的粒度可以分为全局锁、表锁和行锁,不同的存储引擎拥有的锁粒度是不同的
在下面的文章中,我们按照锁粒度的划分分别学习全局锁、表级锁和行锁
2、全局锁
2.1基本概念
从名称上就可以看出,全局锁是对整个数据库实例加锁。MySQL提供了一个加全局读锁的方法,即Flush tables with read lock (FTWRL)。当对数据库使用这个命令时,数据库将会处于只读状态,之后的其它线程的语句:如数据更新语句(数据的增删改)DML,数据的定义语句(表结构的修改)DDL均会被阻塞。
2.2使用场景
全局锁的典型使用场景是做数据库逻辑备份,也就是将整个库中的所有表都select出来存成文本。在备份过程中的整个库要处于只读状态,这会存在以下问题如果你在主库上备份,那么在备份期间都不能执行更新,业务基本上就能停止
如果你在从库上备份&