技术文摘
MySQL 中 binlog、redolog、undolog 的区别
MySQL 中 binlog、redolog、undolog 的区别
在 MySQL 数据库的运行机制中,binlog、redolog 和 undolog 起着关键作用,理解它们之间的区别对于深入掌握 MySQL 数据库原理和优化至关重要。
binlog(二进制日志) binlog 主要用于记录数据库中数据变更的逻辑操作。它记录了诸如 INSERT、UPDATE、DELETE 等对数据进行修改的语句。binlog 是一种逻辑日志,记录的是数据库层面的操作。它的主要作用是用于主从复制,主库将 binlog 发送给从库,从库通过重放这些日志来保持与主库的数据一致性。在数据库恢复时,如果需要基于时间点进行恢复,binlog 也能发挥重要作用。它不记录查询语句,只关注数据的变更。
redolog(重做日志) redolog 是物理日志,记录的是数据库物理层面的修改。比如某一页数据的修改。它的存在是为了确保在数据库发生故障后能够进行恢复。当数据库执行一个事务时,会先将修改操作记录到 redolog 中,然后再更新内存中的数据。这样即使在事务提交过程中数据库崩溃,在重启时也能通过 redolog 中的记录将数据恢复到事务提交后的状态,保证事务的持久性。
undolog(回滚日志) undolog 用于事务的回滚操作。在事务进行过程中,如果出现错误或者用户执行 ROLLBACK 语句,undolog 会发挥作用。它记录了事务开始前数据的原始状态,当需要回滚时,可以根据 undolog 中的记录将数据恢复到事务开始前的样子。undolog 同时还用于实现事务的隔离性,通过记录数据的旧版本,在并发访问时可以为不同事务提供数据的一致性视图。
总体而言,binlog 侧重于数据变更的逻辑记录,用于主从复制和基于时间点的恢复;redolog 着重于保证事务的持久性,确保故障恢复;undolog 则主要用于事务的回滚和支持事务隔离性。这三种日志在 MySQL 数据库中各司其职,共同保障了数据库的高效、稳定和数据的一致性。
- f(i = -1, i = -1)为何是未定义行为
- C#中轻松实现的性能优化
- 咖啡馆经营视角下的Web应用扩展
- 甲骨文公司发布Java 8最新版
- MongoDB集群搭建与Sharding实现思路
- 程序员开发效率的悖论
- Java 8默认方法与多重继承
- phpMyAdmin 4.1.12版MySQL管理工具发布
- 尊重测试:五年测试从业感悟
- C#轻松开发微信公众平台,附Demo
- 51CTO电子杂志《开发专刊》2014年3月号发布
- 深度专访Linux Deepin郭攀,揭秘图标的故事
- python利用asyncio实现快速抓取
- PHP与ASP.NET:我的选择正确吗
- 2014年成为更好程序员的7种方法