写点什么

MySQL 实战四十五讲基础篇总结(二)

发布于: 2020 年 05 月 20 日
MySQL实战四十五讲基础篇总结(二)
重要的日志模块:Redo log
  • 先把赊账的金额记录在粉板上,等不忙了再记录到账本

  • 粉板=“redo log”

  • 账本=“磁盘”

  • 有了 redo log,InnoDB 就可以保证即使数据库发生异常重启,之前提交的记录都不会丢失,这个能力称为 crash-safe

  • crash-safe

  • 赊账记录记在了粉板上或写在了账本上,之后即使掌柜忘记了,比如突然停业几天,恢复生意后依然可以通过账本和粉板上的数据明确赊账账目

重要的日志模块:Binlog
  • binlog 会记录所有的逻辑操作

  • 两阶段式提交

  • 为了让数据在逻辑上一致

  • 1.写入 redo log Prepare 阶段 -- > 2.写入 binlog -- > 3.Commit 提交

Redo log 与 Binlog 不同
  • redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。

  • redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。

  • redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

redo log 用于保证 crash-safe 能力。innodb_flush_log_at_trx_commit 这个参数设置成 1 的时候,表示每次事务的 redo log 都直接持久化到磁盘。这个参数我建议你设置成 1,这样可以保证 MySQL 异常重启之后数据不丢失。

sync_binlog 这个参数设置成 1 的时候,表示每次事务的 binlog 都持久化到磁盘。这个参数我也建议你设置成 1,这样可以保证 MySQL 异常重启之后 binlog 不丢失。

  • 1 prepare 阶段 2 写 binlog 3 commit

  • 当在 2 之前崩溃时 重启恢复:后发现没有 commit,回滚。备份恢复:没有 binlog 。 一致

  • 当在 3 之前崩溃 重启恢复:虽没有 commit,但满足 prepare 和 binlog 完整,所以重启后会自动 commit。备份:有 binlog. 一致

发布于: 2020 年 05 月 20 日阅读数: 57
用户头像

现在是你们的,未来是我们的 2020.01.11 加入

爱生活,爱DB

评论

发布
暂无评论
MySQL实战四十五讲基础篇总结(二)