1. Binary Log (binlog)
作用:
-
记录所有的DDL(数据定义语言)和DML(数据操纵语言)操作,例如
CREATE TABLE
,ALTER TABLE
,INSERT
,UPDATE
,DELETE
等。 -
主要用于复制和数据恢复。
特点:
-
基于语句的复制:记录的是SQL语句。
-
基于行的复制:记录的是行的变化。
-
混合模式:可以设置为记录SQL语句或行的变化。
位置:
-
存储在磁盘上,通常位于MySQL的数据目录中。
2. Redo Log (重做日志)
作用:
-
确保事务的持久性,在事务提交时,所有的修改都会先写入重做日志,然后才写入磁盘上的数据文件。
-
主要用于数据库的崩溃恢复。
特点:
-
物理日志:记录的是在数据页上的实际修改。
-
循环使用:重做日志是循环使用的,有固定的起始和结束位置。
-
InnoDB引擎特有:是InnoDB存储引擎特有的。
位置:
-
存储在磁盘上,通常位于InnoDB的数据文件内部,如
ibdata
文件或ib_logfile
。
3. Undo Log (撤销日志)
作用:
-
支持事务的原子性,通过记录数据修改前的状态,可以在事务失败时回滚到事务开始前的状态。
-
提供多版本并发控制(MVCC),允许读取事务看到一致性的数据快照。
特点:
-
逻辑日志:记录的是如何撤销之前的修改。
-
循环使用:撤销日志也是循环使用的。
-
InnoDB引擎特有:同样是InnoDB存储引擎特有的。
位置:
-
存储在磁盘上,通常位于InnoDB的数据文件内部。
总结
-
Binlog 主要用于复制和数据恢复。
-
Redo Log 主要用于确保事务的持久性,特别是在系统崩溃后的恢复。
-
Undo Log 主要用于支持事务的原子性和实现MVCC,确保非阻塞的读取操作。
每种日志都是为了解决数据库在特定场景下的不同需求而设计的,它们的组合使用保证了MySQL数据库的高可用性和数据一致性。