关于mysql:MySQL里的日志文件

2次阅读

共计 1121 个字符,预计需要花费 3 分钟才能阅读完成。

binary log
binary log 记录了对 Mysql 数据库执行更改的所有操作(逻辑日志,不蕴含 select,show 这类没有对数据有批改的操作)。它是在存储引擎下层的数据库 server 层产生的。
binary log 的作用:

  • 复原
  • 复制
  • 审计,用户能够通过 binary log 中的信息进行审计。

binary log 记录过程:

  1. 当开启一个事务时,所有未提交的 binary log 会被记录到一个缓存里。
  2. 等事务提交时间接将缓存的 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):

  • 先写入一个重做日志缓冲。
  • 依照肯定条件程序地写入日志文件

这里的‘肯定条件’有哪些条件呢?

  1. 主线程每秒会将重做日志缓冲写入磁盘的重做日志文件中。
  2. 由参数 innodb_flush_log_at_trx_commit 管制,示意在事务提交操作时解决重做日志的形式。

binary log 与 redo log 的差别点:

  1. binary log 记录的是与数据库所有无关的日志,蕴含 InnoDB 等其它存储引擎的日志;redo log 只记录与存储引擎相干的事务日志。
  2. binary log 记录的都是对于一个事务的具体操作内容,是逻辑日志;redo log 记录的是对于每个页更改的物理状况,是物理日志。
  3. 写入工夫不同,binary log 仅在事务提交前进行提交,只写磁盘一次,不管事务多大;而在事务进行过程中,会有多条 redo log 写入。

binary log 与 redo log 写入的整体过程:

  1. 当事务提交时 InnoDB 存储引擎进行筹备操作。
  2. mysql 数据库下层写入二进制日志。
  3. InnoDB 引擎层将日志写入重做日志文件。

undo log
事务有时还须要进行回滚操作,这时就须要 undo log
undo log 保障事务的一致性,进行事务的回滚及 MVCC 性能的实现。

文章次要参考:《mysql 技术底细》,及详细分析 MySQL 事务日志 (redo log 和 undo log)

正文完
 0