网站后台html模板,网站推广多少钱一年,企业网站 asp php,空间设计师和室内设计师的区别目录 一、锁概述
二、全局锁概念
三、全局锁使用
四、全局锁特点
五、不加锁一致性数据备份
5.1. 实现方式
5.2. 优点和缺点 一、锁概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中#xff0c;除传统的计算资源#xff08;CPU、RAM、I/O#x…目录 一、锁概述
二、全局锁概念
三、全局锁使用
四、全局锁特点
五、不加锁一致性数据备份
5.1. 实现方式
5.2. 优点和缺点 一、锁概述
锁是计算机协调多个进程或线程并发访问某一资源的机制。在数据库中除传统的计算资源CPU、RAM、I/O的争用以外数据也是一种供许多用户共享的资源。如何保证数据并发访问的一致性、有效性是所有数据库必须解决的一个问题锁冲突也是影响数据库并发访问性能的一个重要因素。从这个角度来说锁对数据库而言显得尤其重要也更加复杂。
MySQL中的锁按照锁的粒度分分为以下三类
全局锁锁定数据库中的所有表。
表级锁每次操作锁住整张表。
行级锁每次操作锁住对应的行数据。
二、全局锁概念
全局锁就是对整个数据库实例加锁加锁后整个实例就处于只读状态后续的DML的写语句DDL语句已经更新操作的事务提交语句都将被阻塞。其典型的使用场景是做全库的逻辑备份对所有的表进行锁定从而获取一致性视图保证数据的完整性。
为什么全库逻辑备份就需要加全就锁呢 A. 我们一起先来分析一下不加全局锁可能存在的问题。 假设在数据库中存在这样三张表: tb_stock 库存表tb_order 订单表tb_orderlog 订单日志表。 1. 在进行数据备份时先备份了tb_stock库存表。
2. 然后接下来在业务系统中执行了下单操作扣减库存生成订单更新tb_stock表插入tb_order表。
3. 然后再执行备份 tb_order表的逻辑。
4. 业务中执行插入订单日志操作。
5. 最后又备份了tb_orderlog表。
此时备份出来的数据是存在问题的。因为备份出来的数据tb_stock表与tb_order表的数据不一 致(有最新操作的订单信息,但是库存数没减)。
那如何来规避这种问题呢? 此时就可以借助于MySQL的全局锁来解决。 B. 再来分析一下加了全局锁后的情况 对数据库进行进行逻辑备份之前先对整个数据库加上全局锁一旦加了全局锁之后其他的DDL、DML全部都处于阻塞状态但是可以执行DQL语句也就是处于只读状态而数据备份就是查询操作。那么数据在进行逻辑备份的过程中数据库中的数据就是不会发生变化的这样就保证了数据的一致性和完整性。
三、全局锁使用
在数据备份操作的前后执行价锁和释放锁的操作。
1. 加全局锁
flush tables with read lock;
2. 数据备份
mysqldump -uroot –p1234 wzx wzx.sql
数据备份的相关指令, 在后续章节, 还会详细讲解。
3. 释放锁 unlock tables; 四、全局锁特点 数据库中加全局锁是一个比较重的操作存在以下问题 1. 如果在主库上备份那么在备份期间都不能执行更新业务基本上就得停摆。 2. 如果在从库上备份那么在备份期间从库不能执行主库同步过来的二进制日志binlog会导 致主从延迟。 3. 在InnoDB引擎中我们可以在备份时加上参数 --single-transaction 参数来完成不加锁的一致 性数据备份。 mysqldump --single-transaction -uroot –p123456 wzx wzx.sql 五、不加锁一致性数据备份 MySQL不加锁的一致性数据备份是指在备份过程中不通过加锁数据库的方式而是通过其他机制来确保备份数据的一致性。这种备份方式可以在不中断数据库服务的情况下进行特别适用于高并发环境。 5.1. 实现方式 MySQL的mysqldump工具提供了一个--single-transaction选项可以在备份时创建一个事务快照从而在不加锁的情况下进行一致性备份。具体步骤如下 启动事务在备份开始时mysqldump会启动一个事务并创建一个快照。设置隔离级别通常将隔离级别设置为“可重复读”以确保在备份期间数据的一致性。导出数据在事务中导出数据确保数据的完整性。提交事务完成数据导出后提交事务确保备份的数据是一致的。 5.2. 优点和缺点 优点 高并发性能可以在不阻止其他读写操作的情况下进行备份不影响正常业务。减少应用程序停顿适合在线业务无需因备份而影响用户体验。 缺点 数据一致性如果在备份期间有数据修改可能导致数据快照在恢复时不一致。这在金融、医疗等不允许数据不一致的场景中可能造成问题。备份时间如果数据量非常庞大备份可能会需要较长时间可能会影响性能。