MySQL的三大日志

逻辑日志与物理日志

  • 逻辑日志: 可以简单理解为记录的就是sql语句
  • 物理日志: mysql数据最终是保存在数据页中的,物理日志记录的就是数据页变更

bin log日志

bin log日志是Mysql server层的逻辑日志,它完整的记录了每次数据更新的操作。

所以,bin log可用于从库进行数据复制更新,也可用于数据库的数据闪回

binlog 日志有三种格式,分别为 STATMENT 、 ROW 和 MIXED 。

在 MySQL 5.7.7 之前,默认的格式是 STATEMENT , MySQL 5.7.7 之后,默认值是 ROW 。日志格式通过 binlog-format 指定。

  • STATMENT : 基于 SQL 语句的复制( statement-based replication, SBR ),每一条会修改数据的sql语句会记录到 binlog 中 。

  • ROW : 基于行的复制( row-based replication, RBR ),不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了 。

  • MIXED : 基于 STATMENT 和 ROW 两种模式的混合复制( mixed-based replication, MBR ),一般的复制使用 STATEMENT 模式保存 binlog ,对于 STATEMENT 模式无法复制的操作使用 ROW 模式保存 binlog

undo log日志

undo log是InnoDB的逻辑日志,用来保证隔离性和原子性,undo log位于表空间中的undo segment

对数据进行的任何操作都要先写undolog。

例如users表对id为1的行的name字段从a改为b

update users set name='b' where id=1

那么相应的会在undo log里记录一条日志语句为

update users set name='a' where id=1

这样就能保证事务回退时数据能正常还原

redo log日志

redo log日志是InnoDB的物理日志,用来保持数据持久化

mysql的数据更新都是首先更新到内存中,之后再写入到redo log中。当数据从内存更新到磁盘后删除redo log

redo log日志存储在4个1GB的文件中,循环写入

redo log

  • write pos:当前日志写入点
  • check point:擦除点,数据更新到硬盘后擦除
  • 若write pos追上了check point,事务会无法提交,需等待check point推进
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值