Mysql的日志undo log、redo log 、 binlog

  1. undo log(回滚日志)
  • 作用:
    • 事务回滚:undo log 用于实现事务的原子性。在事务处理过程中,如果出现错误或者用户执行 ROLLBACK 语句,MySQL 可以利用 undo log 中的备份将数据恢复到事务开始之前的状态。
    • 多版本并发控制(MVCC):undo log 在 MySQL InnoDB 存储引擎中用于实现多版本并发控制。事务未提交之前,当读取的某一行被其他事务锁定时,它可以从 undo log 中分析出该行记录以前的数据是什么,从而提供该行版本信息,让用户实现非锁定一致性读取。
  • 生成时机:
    • 在事务中,进行 insert、update、delete 操作时,都会创建 undo log。
  • 存储位置:
    • 在 MySQL 5.6.3 之前的版本中,undo log 是和 system tablespace(系统表空间)存放在一起的,即没有单独的 undo log 文件,直接存放在 ibdata1 文件里边。
    • 从 MySQL 5.6.3 开始,支持将 undo log tablespace 单独剥离出来,但在安装数据库时需要指定好独立 undo tablespace,且安装完成后不可更改。
    • 在 MySQL 5.7 版本中,引入了在线 truncate undo tablespace 的功能。
    • 在 MySQL 8.0 中,默认 undo tablespace 的个数从 0 调整为 2,且无需从 space_id 1 开始创建 undo tablespace。
  1. redo log(重做日志)
  • 作用:
    • redo log 是 InnoDB 存储引擎独有的,用于保证事务的持久性。它记录了事务中所有修改数据的操作,当数据库发生故障或崩溃时,可以通过 redo log 恢复数据,确保数据的完整性和一致性。
  • 写入机制:
    • redo log 的写入不是直接写入磁盘的,而是先写入 redo log buffer(重做日志缓冲区),然后以一定的频率(根据刷盘策略)刷入到真正的 redo log file(重做日志文件)中。
      redo log 是顺序写入磁盘的,这大大提高了写入性能。
  • 刷盘策略:
    • 通过 innodb_flush_log_at_trx_commit 参数控制提交事务时,如何将 redo log buffer 中的日志刷新到 redo log file 中。该参数有三种设置:
      • 0:表示每次事务提交时不进行刷盘操作,可能会有数据丢失的风险。
      • 1(默认值):表示每次事务提交时都将进行刷盘操作,保证数据不会丢失,但性能较差。
      • 2:表示每次事务提交时都只把 redo log buffer 内容写入文件系统缓存(page cache),然后依赖操作系统的刷盘机制进行刷盘。
  1. binlog(二进制日志)
  • 作用:
    • binlog 是 MySQL 数据库层的日志,记录了所有修改了数据库内容的操作(不包括 SELECT 和 SHOW 这类操作),如 INSERT、UPDATE、DELETE 等。它主要用于数据复制和数据恢复。
  • 生成时机:
    • 只要发生了表数据更新,就会产生 binlog 日志。
  • 应用场景:
    • MySQL 数据库的数据备份、主备、主主、主从等架构都离不开 binlog,需要依靠 binlog 来同步数据,保证数据一致性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值