MySQL Redo Log归档

目录

Redo归档设置

设置和使用注意事项

激活重做日志归档

停止归档

归档线程

 归档Redo日志监控


        Redo Log归档功能V8.0.17发布,只有企业版备份工具支持归档Redo Log
        用于在备份期间避免重做日志记录丢失

 Redo归档设置

        查看 show variables like '%archive%';
   变量innodb_redo_log_archive_dirs 默认值为NULL,不允许激活重做日志存档

## my.cnf配置:
innodb_redo_log_archive_dirs=arch1:/redo_archive/arch1;arch2:/redo_archive/arch2 
## 命令行设置: 
SET GLOBAL innodb_redo_log_archive_dirs=arch1:/redo_archive/arch1;arch2:/redo_archive/arch2

设置和使用注意事项

   &nbs

<think>嗯,用户现在想了解MySQL的三大日志:binlogredolog和undolog的介绍、作用、原理等相关信息。首先,我需要回顾之前的引用内容,确保信息准确。引用[1]提到redolog保证持久性(ACID的D),undolog保证原子性,并且在MVCC中用于隔离性。引用[2]和[3]补充了binlog的设计目标和格式,比如statement、row、mixed三种格式。 用户的需求是全面了解这三个日志的作用、原理等。需要分点整理,确保每个日志的介绍、作用、原理和关键点都涵盖清楚。首先,binlogMySQL服务器层的逻辑日志,用于主从复制和数据恢复,记录SQL操作的逻辑。格式方面,statement记录SQL原文,row记录行变化,mixed是混合模式。而redolog是InnoDB存储引擎的物理日志,通过Write-Ahead Logging技术确保事务的持久性,循环写入,有缓冲区机制。undolog也是InnoDB层的日志,用于事务回滚和MVCC,记录数据变更前的镜像,形成版本链。 需要注意三者之间的协同,比如事务提交时redolog和binlog的两阶段提交(2PC),避免数据不一致。同时,undolog在事务回滚和MVCC中的作用,如生成旧版本数据。还要提到日志的存储位置,binlog可能单独存储,redolog和undolog在ibdata文件中。应用场景方面,binlog用于备份恢复和主从复制,redolog用于崩溃恢复,undolog用于回滚和读一致性。 用户可能关心它们的区别,比如层级(server vs engine)、内容(逻辑 vs 物理)、用途等。此外,需要澄清常见误区,比如redolog不是写入数据文件而是日志文件,undolog的清理机制(purge线程)。确保术语正确,如WAL、事务ID、rollback segment等。最后,总结时用表格对比三者的核心差异,帮助用户一目了然。还要检查是否有遗漏点,比如binlog的刷盘策略sync_binlogredolog的刷盘策略innodb_flush_log_at_trx_commit,这些参数对性能的影响。确保原理部分准确,比如两阶段提交的流程,避免在崩溃时出现数据不一致的问题。整体结构要清晰,分块讲解后对比,保持语言流畅,避免技术错误。 </think>以下是MySQL三大日志(**binlog**、**redo log**、**undo log**)的对比解析,结合其作用、原理及协作逻辑: --- ### **1. binlog (归档日志)** - **作用** - **主从复制**:将数据变更同步到从库 - **数据恢复**:通过`mysqlbinlog`工具实现时间点恢复(Point-in-Time Recovery) - **审计**:记录所有更改数据库的SQL语句 - **原理** - **逻辑日志**:记录SQL语句原文(格式为`statement`)、或变更后的行数据(格式为`row`),或混合模式(`mixed`) - **写入时机**:事务提交时**一次性写入**(不同步写入可能导致数据丢失) - **存储方式**:追加写入文件(可配置大小上限和保留策略) - **关键点** - **Server层实现**:与存储引擎无关 - **三种格式**: - `statement`:记录SQL原文(如`UPDATE T SET update_time=NOW() WHERE id=1`) - `row`:记录行变更前后的值(数据量大但精准) - `mixed`:自动切换上述两种模式 --- ### **2. redo log (重做日志)** - **作用** - **崩溃恢复**:确保事务的**持久性(Durability)** - **缓冲优化**:减少随机写磁盘(将随机写转为顺序写) - **原理** - **物理日志**:记录数据页的物理修改(如“在表空间X的页面Y偏移量Z处写入数据”) - **Write-Ahead Logging (WAL)**: 1. 事务修改数据前,先写redo log到内存缓冲区(`redo log buffer`) 2. 事务提交时,将redo log刷盘(`fsync`)到`ib_logfile`文件 3. 后台线程异步将修改写入数据文件 - **循环覆盖写入**:固定大小文件(通常两个文件轮替) - **关键点** - **InnoDB引擎层实现** - **强制刷盘策略**: - `innodb_flush_log_at_trx_commit=1`:每次提交都刷盘(保证强持久性) - `0`或`2`:延迟刷盘(性能更高,但可能丢失事务) --- ### **3. undo log (回滚日志)** - **作用** - **事务回滚**:保证**原子性(Atomicity)**,用于`ROLLBACK` - **MVCC支持**:提供数据的历史版本,实现**隔离性(Isolation)** - **原理** - **逻辑日志**:记录数据修改前的镜像(如更新前值、删除前的整行数据) - **版本链构建**: - 每行记录隐藏字段`DB_TRX_ID`(事务ID)和`DB_ROLL_PTR`(回滚指针) - `DB_ROLL_PTR`指向undo log中该行的历史版本链表 - **读写分离**: - 读操作通过`ReadView`判断可见版本(避免脏读、不可重复读) - **关键点** - **存储位置**:存放在`ibdata`系统表空间中 - **清理机制**:事务提交后,undo log由后台`purge线程`回收 --- ### **三者的协作流程(以更新操作为例)** 1. **修改数据前**:生成undo log(记录旧值) 2. **执行修改**: - 内存中更新数据页 - 生成redo log(记录物理修改) 3. **事务提交**: - redo log刷盘(保证持久性) - binlog写入磁盘 - 两阶段提交(2PC)确保redo log与binlog一致性 4. **后台操作**: - 脏页写入磁盘 - 清理undo log(不再需要时) --- ### **对比总结** | **日志** | **层级** | **内容** | **核心作用** | **生命周期** | |------------|-------------|-------------|----------------------|--------------------| | **binlog** | MySQL Server | 逻辑日志 | 主从复制、数据恢复 | 长期保留(可配置) | | **redo log**| InnoDB引擎 | 物理日志 | 崩溃恢复、持久性 | 循环覆盖写入 | | **undo log**| InnoDB引擎 | 逻辑日志 | 事务回滚、MVCC支持 | 事务提交后异步清理 | > ⚠️ **关键协作**:通过**两阶段提交(2PC)** 确保binlogredo log的一致性,避免主从不一致或数据丢失[^3]。 --- ### **相关问题** 1. 为什么需要两阶段提交(2PC)来协调binlogredo log? 2. undo log版本链如何实现MVCC的可重复读(RR)隔离级别? 3. binlog的`row`格式与`statement`格式在数据安全性上有何差异? 4. 如何配置MySQL的日志参数以平衡性能和数据可靠性? [^1]: 原子性原理与MVCC实现 [^2]: binlog设计目标 [^3]: 日志协作机制与两阶段提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值