二进制日志(binlog)
作用
数据恢复:用于基于时间点的恢复。通过 binlog 可以恢复在备份后到数据丢失之间的所有操作。
复制:在主从复制(Master-Slave Replication)中,主服务器将数据修改记录写入 binlog,从服务器读取这些日志并重放,从而保持数据一致性。
特点
记录所有对数据库进行修改的 SQL 语句。
以事件的形式记录(每个事件对应一个 SQL 语句)。
可以用于增量备份。
重做日志(redo log)
作用
崩溃恢复:在系统崩溃或宕机后,用于恢复未完成的事务,确保数据的一致性和完整性。
提高性能:将事务的修改先记录到 redo log 中,再异步写入磁盘,减少磁盘 I/O 操作,提高性能。
特点
是 InnoDB 存储引擎特有的日志。
以物理日志的形式记录,对数据页的实际修改。
包含两个部分:redo log buffer(内存中的日志缓冲区)和 redo log file(磁盘上的日志文件)。
是循环写的,空间固定。
撤销日志(undo log)
作用
事务回滚:记录在事务过程中需要撤销的操作,用于事务回滚。
MVCC(多版本并发控制):支持读操作和写操作并发执行,提供一致性的非锁定读。通过 undo log,可以为每个事务生成数据的多个版本,确保事务的隔离性。
特点
是 InnoDB 存储引擎特有的日志。
记录逻辑日志,用于记录数据被修改前的值。
每次事务修改数据时,会生成对应的 undo log。
总结
binlog:用于数据恢复和主从复制,记录所有对数据库的修改操作。
redo log:用于崩溃恢复和提高性能,记录数据页的物理修改。
undo log:用于事务回滚和 MVCC,记录数据修改前的值。