MySQL中两个重要的日志(redolog和binlog)

MySQL里redolog和binlog的重要性

redolog和binlog的区别:

  1. redo log 是 InnoDB 引擎特有的;binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用。

  2. redo log 是物理日志,记录的是“在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的原始逻辑,比如“给 ID=2 这一行的 c 字段加 1 ”。

  3. redo log 是循环写的,空间固定会用完;binlog 是可以追加写入的。“追加写”是指 binlog 文件写到一定大小后会切换到下一个,并不会覆盖以前的日志。

redolog和binlog如何来保证逻辑一致性的?

场景:

下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c:

mysql> create table T(ID int primary key, c int);

如果要将 ID=2 这一行的值加 1,SQL 语句就会这么写:

mysql> update T set c=c+1 where ID=2;

这里我给出这个 update 语句的执行流程图,图中浅色框表示是在 InnoDB 内部执行的,深色框表示是在执行器中执行的。
请添加图片描述

在两阶段提交的不同时刻,MySQL 异常重启会出现什么现象。

  1. 在时刻A如果出现crash,此时MySQL会如何处理?

如果在图中时刻 A 的地方,也就是写入 redo log 处于 prepare 阶段之后、写 binlog 之前,发生了崩溃(crash),由于此时 binlog 还没写,redo log 也还没提交,所以崩溃恢复的时候,这个事务会回滚。这时候,binlog 还没写,所以也不会传到备库。

  1. 在时刻 B,也就是 binlog 写完,redo log 还没 commit 前发生 crash,那崩溃恢复的时候 MySQL 会怎么处理?

先来看一下崩溃恢复时的判断规则。如果 redo log 里面的事务是完整的,也就是已经有了 commit 标识,则直接提交;如果 redo log 里面的事务只有完整的 prepare,则判断对应的事务 binlog 是否存在并完整:a. 如果是,则提交事务;b. 否则,回滚事务。这里,时刻 B 发生 crash 对应的就是 2(a) 的情况,崩溃恢复过程中事务会被提交。

binlog是如何来保证主备数据一致的?

请添加图片描述
先来说说如何一个事务日志同步的完整过程。

  1. 在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。

  2. 在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。

  3. 主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。

  4. 备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。

  5. sql_thread 读取中转日志,解析出日志里的命令,并执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
redo logbinlogMySQL数据库两个重要日志文件,它们在功能和使用场景上有一些区别。 1. 功能区别: - Redo log(重做日志):记录了数据库引擎对数据进行的修改操作(如插入、更新、删除),用于恢复数据库在崩溃或意外断电后的一致性。它是物理日志,记录的是数据页的物理修改。 - Binlog(二进制日志):记录了数据库的逻辑操作(如SQL语句),包括对数据进行的增删改操作。它是逻辑日志,记录的是SQL语句的逻辑操作。 2. 数据格式区别: - Redo log:以固定大小的物理块(通常为512字节或4KB)的形式记录,以循环方式写入,可以被多次复用。 - Binlog:以可读的文本格式或二进制格式记录,以追加的方式写入,不会被复用。 3. 使用场景区别: - Redo log:主要用于崩溃恢复,保证数据库的一致性。当数据库发生异常崩溃时,通过重做日志可以将未提交的事务重新应用到数据库,使数据库恢复到崩溃前的状态。 - Binlog:主要用于数据备份、复制和恢复。它可以作为数据库复制的基础,将主库上的操作记录复制到从库,从而实现数据的备份和故障恢复。 总结: - Redo log用于崩溃恢复,记录物理修改操作; - Binlog用于数据备份、复制和恢复,记录逻辑操作。 希望以上回答对您有所帮助!如果您还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值