本文介绍了MySQL数据库中三种重要的日志类型:Redo Log用于事务持久化;Undo Log支持事务回滚与多版本并发控制;Binlog记录所有DDL/DML操作,主要用于数据恢复及主从复制。
### MySQL日志文件类型
1. 重做日志(redo log)
2. 回滚日志(undo log)
3. 二进制日志(binlog)
### 几种日志的对比
#### 用途
- **redo log**:记录事务对数据库修改的操作,用于恢复未完成的事务。
- **undo log**:存储回滚操作所需的信息,确保数据的一致性。
- **binlog**:保存所有更改数据库结构或内容的SQL语句。
#### 存储内容、格式
- **redo log**:包含物理级别的变更信息,如页号和偏移量等。
- **undo log**:存储逻辑级别回滚操作的数据行记录及相关的事务信息。
- **binlog**:保存实际执行的SQL语句及其相关信息。
#### 日志生成
- **redo log**:每次事务提交时产生。
- **undo log**:在事务开始阶段创建,用于撤销未完成或失败的事务变更。
- **binlog**:记录所有影响数据库内容和结构的操作,在每个事件发生后写入日志文件中。
#### 删除策略
- **redo log**:根据配置自动覆盖循环使用;当系统重启时会清空。
- **undo log**:在回滚完成后或事务提交后,可以被删除以释放空间。
- **binlog**:通常设置为保留一定时间的旧日志文件,并定期清理。
### redo log 与 binlog 的区别
重做日志(redo log)主要用于保证数据的一致性和完整性,在数据库崩溃恢复时起关键作用;而二进制日志(binlog)记录了所有对数据库结构和内容的操作,用于主从复制、备份及审计。