redolog和binlog两阶段提交
时间: 2025-01-07 07:14:58 浏览: 7
### redolog与binlog在MySQL两阶段提交机制中的作用
#### Redo Log 的角色
Redo log 主要用于崩溃恢复,确保数据不会因服务器突然宕机而丢失。当事务执行过程中发生任何更改时,这些更改会先写入 redo log 中,在此之后才会真正应用到磁盘上的表空间文件里。这种方式可以极大提高性能并保障持久性[^1]。
```sql
-- 插入一条记录作为例子展示如何触发redo log的写入
INSERT INTO T (ID, c) VALUES (2, 0);
```
#### Binlog的角色
Binlog 记录了所有的 DDL 和 DML 操作(除了某些特定命令),它主要用于复制功能以及灾难后的点恢复。每当有一个更新语句被执行时,该语句会被追加到当前活跃的日志文件中形成一系列事件流。对于上述提到的例子而言:
```sql
UPDATE T SET c = c + 1 WHERE ID = 2;
```
这条 SQL 将被转化为相应的 Query Event 或 Row Event 并保存至 binlog 文件内[^3]。
#### 两者间的交互——两阶段提交协议
为了保持这两种日志之间的一致性,MySQL 实现了一个称为 "two-phase commit protocol" 的流程。具体来说就是在准备阶段将所有必要的信息都准备好;而在第二步即提交阶段,则正式完成整个过程。这意味着只有当 redo log 已经成功确认后,才会继续向 binlog 进行写入操作[^2]。
#### 关键差异总结
| 特征 | Redo Log | Binlog |
| --- | --- | --- |
| **用途** | 数据库内部使用的物理日志,支持快速恢复 | 用户级逻辑日志,适用于主从同步和基于时间点的数据恢复 |
| **粒度** | 行级别变更描述 | SQL 语句或行级别的变化 |
| **存储位置** | InnoDB 存储引擎层 | MySQL Server 层 |
阅读全文