二进制日志(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,记录数据修改前的值。