binary log
binary log 记录了对 Mysql 数据库执行更改的所有操作(逻辑日志,不蕴含 select,show 这类没有对数据有批改的操作)。它是在存储引擎下层的数据库 server 层产生的。
binary log 的作用:
- 复原
- 复制
- 审计,用户能够通过 binary log 中的信息进行审计。
binary log 记录过程:
- 当开启一个事务时,所有未提交的 binary log 会被记录到一个缓存里。
- 等事务提交时间接将缓存的 binary log 写入 binary log 文件里(磁盘)。
该缓存可由 binlog_chche_size 进行调用,默认为 32K。缓存同步磁盘能够通过 sync_binlog 进行调用,默认并不是每次写的时候同步到磁盘,宕机等极其状况下会呈现局部 binary log 失落。
binary log 的格局:
- statement,基于 SQL,如果存在 uuid 等函数会呈现主从服务器上数据不统一。
- row,记录行更改状况。
- mixed,在此格局下,默认应用 statement 格局进行记录,但呈现 uuid 等函数时会调整为 row 格局。
redo log
redo log 被称为 InnoDB 存储引擎的日志文件。通常是物理日志,记录的是页的物理批改操作。
redo log 的作用:
- 保障事务的原子性与持久性
redo log 记录过程 (可参考’InnoDB 的两点个性‘里的 double write):
- 先写入一个重做日志缓冲。
- 依照肯定条件程序地写入日志文件
这里的‘肯定条件’有哪些条件呢?
- 主线程每秒会将重做日志缓冲写入磁盘的重做日志文件中。
- 由参数 innodb_flush_log_at_trx_commit 管制,示意在事务提交操作时解决重做日志的形式。
binary log 与 redo log 的差别点:
- binary log 记录的是与数据库所有无关的日志,蕴含 InnoDB 等其它存储引擎的日志;redo log 只记录与存储引擎相干的事务日志。
- binary log 记录的都是对于一个事务的具体操作内容,是逻辑日志;redo log 记录的是对于每个页更改的物理状况,是物理日志。
- 写入工夫不同,binary log 仅在事务提交前进行提交,只写磁盘一次,不管事务多大;而在事务进行过程中,会有多条 redo log 写入。
binary log 与 redo log 写入的整体过程:
- 当事务提交时 InnoDB 存储引擎进行筹备操作。
- mysql 数据库下层写入二进制日志。
- InnoDB 引擎层将日志写入重做日志文件。
undo log
事务有时还须要进行回滚操作,这时就须要 undo log
undo log 保障事务的一致性,进行事务的回滚及 MVCC 性能的实现。
文章次要参考:《mysql 技术底细》,及详细分析 MySQL 事务日志 (redo log 和 undo log)