如何做一个大型网站,建设网站需要准备什么手续,wordpress audio主题,拓者设计官网网页版文章目录 1.全局锁的概念2.使用全局锁的语法结构3.全局锁的基本使用 1.全局锁的概念
全局锁是对整个数据库实例添加一个锁#xff0c;全局锁是面向整个数据库实例的#xff0c;而不是单个数据库#xff0c;添加锁之后这个实例就会处于只读状态#xff0c;此时所有的数据库… 文章目录 1.全局锁的概念2.使用全局锁的语法结构3.全局锁的基本使用 1.全局锁的概念
全局锁是对整个数据库实例添加一个锁全局锁是面向整个数据库实例的而不是单个数据库添加锁之后这个实例就会处于只读状态此时所有的数据库只能进行读的操作对于更新、删除的操作将被阻塞。
全局锁的典型应用场景就是对全库进行逻辑上的备份要求业务表之间关联的数据要保证一致性和完整性此时就可以通过全局锁将所有的数据库锁住避免备份过程中有数据产生导致数据不一致。 我们一起来思考一个问题为什么在全库逻辑的备份中要加锁呢备份是花时间的对于用户不友好。 首先我们清楚一点我们不是备份数据库而是要在备份数据库的基础上将业务表之间的逻辑依赖也都要进行备份保证数据上的一致性。 首先来看一下不使用全局锁业务表在备份中会出现的问题。
如下图所示库中有三张业务表备份时是一张表一张表进行备份的先备份完tb_stock表此时tb_order表有数据产生了这两张表之间有业务关联此时就会导致数据的不完整性。 当我们给数据库添加一个全局锁之后此时数据库中的数据只能读不能写用户根本不可能再产生数据了此时数据备份就能保证业务逻辑的一致性。
全局锁的缺点
如果数据库是主从集群那么加了全局锁之后程序就是摆停状态。加了全局锁在备份期间从库不能执行主库同步过来的binlog导致主从延迟。
全局锁数据备份应用的很少一般都是普通备份mysqldump命令的–single-transaction参数可以解决不加锁的数据一致性备份。
2.使用全局锁的语法结构
为数据库实例添加一个全局锁。
flush tables with read lock释放全局锁锁。
unlock tables3.全局锁的基本使用
开启全局锁。
flush tables with read lock;此时数据库只能读不能写。
mysql select * from db_1.xscjb;
------------------------------
| xh | xm | ywcj | sxcj | yycj |
------------------------------
| 1 | 小明 | 45 | 75 | 93 |
| 2 | 小红 | 47 | 56 | 25 |
| 3 | 小兰 | 82 | 91 | 89 |
| 5 | 小李 | 88 | 77 | 66 |
| 6 | 小赵 | 88 | 77 | 66 |
| 7 | 小王 | 88 | 77 | 66 |
| 8 | 小黑 | 100 | 77 | 66 |
| 9 | 小江 | 88 | 77 | 66 |
------------------------------
8 rows in set (0.00 sec)mysql update db_1.xscjb set ywcj 100 where xh 9 ;
ERROR 1223 (HY000): Cant execute the query because you have a conflicting read lock释放全局锁。
mysql unlock tables;