二、bin log、bin log和redo log的区别、主从复制如何实现、两阶段提交

一、bin log

  • bin log由Server层生成,每次更新记录一条bin log,不记录查询日志,在事务提交后,将所有变更的写入bin log文件。
  • bin log也有自己的缓存,叫bin cache,事务执行过程中,先写入bin cache,提交后,才把cache中数据写入bin log文件。
  • 写入bin log文件时并没有马上落盘,而是只写入了操作系统的文件缓存,通过sync_binlog参数控制落盘时机。
    ①sync_binlog = 0时:不落盘,由操作系统决定何时落盘
    ②sync_binlog = 1时:直接落盘
    ③sync_binlog = N(N>1)时:积累N个事务后才落盘
    在这里插入图片描述

二、bin log和redo log的区别

  1. 适用对象不同
    · bin log由server层实现
    · redo log只有innodb引擎实现
  2. 文件格式不同
    · bin log是逻辑日志,有三种格式,statement(默认):记录修改的sql语句,缺点是uuid、now这些函数无法复原;row:记录修改后的值,缺点是每一行都记录,导致日志文件过大;mixd:前面两种结合,根据情况选。
    · redo是物料日志,记录具体某表某页某偏移某数据做了某改动。
  3. 写入方式不同
    · bin log是追加写,写满一个文件会继续创建一个新的写,保存全量的日志
    · redo log是循环写,文件大小固定,全部写满就清理后从头写,保存未落盘的脏页数据
  4. 用途不同
    · bin log用于备份恢复,主从复制
    · redo log用于断电故障恢复,无法恢复全量数据

三、主从复制如何实现

1、实现过程

  • 写入bin log:主库写bin log日志。
  • 复制bin log:主库创建一个线程复制bin log到从库上,每个从库把bin log写到暂存日志中。
  • 回放bin log:回放bin log日志,更新数据

2、主从复制模式

  • 同步复制:等从库都成功更新完,才返回结果给主库,性能差。
  • 异步复制(默认):不会等从库更新完,但一旦宕机,数据丢失。
  • 半同步复制:等任意一个从库更新完,返回结果。中和以上两点,保证至少有一个从库有最新数据。

四、两阶段提交

1、为什么需要两阶段提交?

  • bin log和redo log都需要落盘,如果一个成功落盘,另一未落盘,就会导致主从数据不一致问题。
    比如更新age由0变为1,MySQL宕机,redo log落盘成功,bin log未落盘,主库的age为1,从库为0;同理redo未落盘,bin落盘成功,则主库age为0,从库为1;

2、两阶段提交是什么?

  • 两阶段提交是分布式事务的一种处理方案,多个服务器上的事务要不都成功,要不都不成功。两阶段提交分为两个阶段:准备阶段和提交阶段,需要一个协调者,其他为参与者。
    ①准备阶段:协调者让参与者们告知是否提交或回滚。
    ②提交阶段:如果有任一参与者告知回滚,协调者让所有参与者回滚;如果所有都告知提交,则所有参与者提交。
  • 17
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值