MySQL 的三大日志

在 MySQL 中,特别是 InnoDB 存储引擎,日志系统非常重要,主要包括以下三种日志:

1. Redo Log(重做日志)

组成部分

  • Redo Log Buffer(缓冲区):用于暂时存储即将写入磁盘的日志信息。
  • Redo Log File(文件):持久化存储的日志文件。

作用

  • 记录在某个数据页上做了什么修改,确保在系统崩溃后能够恢复数据。
  • 使 MySQL 拥有崩溃恢复能力。

刷盘机制

  • 刷盘时机

    • 事务提交时。
    • Log Buffer 空间不足(达到一半)。
    • 事务日志缓冲满了。
  • 刷盘策略innodb_flush_log_at_trx_commit):

    • 0:事务提交时不刷盘,性能最好,但安全最差。
    • 1:每次事务提交都刷盘,性能最差,但安全最好(默认)。
    • 2:每次事务提交时将 Log Buffer 内容写入 Page Cache,性能和安全中等。
  • 后台轮询:每秒一次的刷盘操作。

2. Binlog(大日志)

作用

  • 记录所有涉及更新数据的逻辑操作,并且是顺序写入的。

记录格式

  • Statement:完整保存 SQL 语句,但可能导致数据不一致(如使用 NOW())。
  • Row:记录具体的操作,将 NOW() 变为当前时间戳。
  • Mixed:混合模式,MySQL 会判断 SQL 是否会引起数据不一致。

问题和解决

  • 在 Redo Log 保存时,如果 Binlog 尚未保存而 MySQL 崩溃,可能导致数据丢失。
  • 解决方案:使用两阶段提交(Prepare 和 Commit 阶段),若崩溃发生在 Prepare 阶段,则事务会回滚。

3. Undo Log(回滚日志)

作用

  • 记录每个事务操作的逻辑日志,确保事务的原子性。

结论

  • MySQL InnoDB 引擎使用 Redo Log 保证事务的持久性,使用 Undo Log 保证事务的原子性。
  • 数据备份、主备、主主、主从等操作均依赖 Binlog 来同步数据,确保数据一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值