02-日志系统

redo log 重做日志(引擎层)

即WAL技术,将更新记录写入redo log,同时更新内存,并在适当时候将记录落盘。
redo log大小是固定的,从头开始写,写到末尾就回到开头循环写,逻辑环形。
write pos:写入位置,随写入操作后移,逻辑环形。
checkpoint:落盘位置,随落盘后移,逻辑环形。
redo log保证了,即使MySQL异常重启,之前提交的记录都不会丢失,这个能力称为crash-safe

redo log

binlog 归档日志(Server层)

主从复制:建立一个数据库环境,与源数据库完全一致。

作用:

  • 1)热备
  • 2)读写分离

原理:

  • 1)Master将变更记录写入binlog。
  • 2)Slave向Master发送Dump协议,拷贝binlog events到中继日志relay log。
  • 3)Slave读取并回放relay log中的时间,将变更的数据同步到自己的数据库

binlog类型:

  • 1)Statement-based:基于语句,可能造成数据不一致。
  • 2)Row-based:基于行,记录每次操作后被操作行的变化。
  • 3)Mixed:此类型,默认为Statement-based,若可能存在数据不一致,自动切换至
    Row-based。

两种日志的不同

1)redo log为InnoDB引擎特有;binlog是MySQL的Server层实现的,所有引擎通用。
2)redo log是物理日志;binlog是逻辑日志
3)redo log循环写(逻辑环形),存在覆盖;
binlog追加写,新增文件,不覆盖。

执行流程

update语句执行流程

2PC 两阶段提交

1)开启事务
2)写入redo log (预提交)
3)写入binlog后,提交事务(正式提交)
任意阶段失败,事务回滚

小结

1)redo log用于保证crash-safe能力,innodb_flush_log_at_trx_commit这个参数设置成1,每次事务的redo log都持久化至磁盘。
2)binlog,主从复制,sync_binlog这个参数设置成1,每次事务的binlog都持久化到磁盘。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容