mysql 三个日志总结

随着学习和工作的深入,渐渐了解到mysql有三个日志,以前只是接触过binlog (在主从同步的时候用)随后就去了解下了具体有哪三个日志和三个日志的具体作用

一 binlog

        binlog 是记录mysql一条条sql执行记录(增删改)可以说是执行日志了 会不停的往后面追加的,类似redis里的aof,是以二进制存在,

主要用在主从库同步和误删数据恢复(少量恢复)

刷盘时间 (sync_binlog参数控制)

  • 0:先写入 os cache,由系统自行判断何时写入磁盘,宕机数据会丢失;(MySQL 5.7.7之前版本的默认值)
  • 1:每次commit的时候都要将binlog写入磁盘;(MySQL 5.7.7之后版本的默认值)
  • N:每N个事务,才会将binlog写入磁盘。 

刷盘策略我在这就不介绍了

二 redolog

        redolog 是记录数据修改后的值,是innodb引擎独有的,类似redis的rdb 存储的是mysql的物理数据

主要用在崩溃恢复、断电恢复,因为redolog是顺序存储的,切是一页页的 有固定大小的 所以恢复起来会比较快

刷盘时间 (innodb_flush_log_at_trx_commit 参数控制)

  • 值为 0 表示不刷入磁盘
  • 值为 1 表示立即刷入磁盘(默认情况)
  • 值为 2 表示先刷到 os cache

如果 redo log Buffer 刷入磁盘后,数据库服务器宕机了,在下次重启的时候 MySQL 也会将 redo 日志文件内容恢复到 Buffer Pool 中,因为 redo log buffer 中的数据已经被写入到磁盘了,已经被持久化了 

三 redo日志与bin日志的区别
        redo log是 InnoDB 存储引擎特有的日志文件,而bin log属于是 MySQL 级别的日志

        redo log记录的东西是偏向于物理性质的,如:“对什么数据,做了什么修改”。

        bin log是偏向于逻辑性质的,类似于:“对 students 表中的 id 为 1 的记录做了更新操作” 两者的主要特点总结如下:

性质redo Logbin Log
文件大小redo log 的大小是固定的(配置中也可以设置,一般默认的就足够了)bin log 可通过配置参数max_bin log_size设置每个bin log文件的大小(但是一般不建议修改)。
实现方式redo log是InnoDB引擎层实现的(也就是说是 Innodb 存储引起过独有的)bin log是 MySQL 层实现的,所有引擎都可以使用 bin log日志
记录方式redo log 采用循环写的方式记录,当写到结尾时,会回到开头循环写日志。bin log 通过追加的方式记录,当文件大小大于给定值后,后续的日志会记录到新的文件上
使用场景redo log适用于崩溃恢复(crash-safe)(这一点其实非常类似与 Redis 的持久化特征)bin log 适用于主从复制和数据恢复

四 undolog

        undolog主要是记录数据被修改前的样子,用户事务回滚使用

刷盘时间

在mysql将要更新的数据加载到缓冲区Buffer pool 时同时往 undo 日志文件中插入一条日志,也就是将 id=1 的这条记录的原来的值记录下来。

更新过程

准备更新一条 SQL 语句
MySQL(innodb)会先去缓冲池(BufferPool)中去查找这条数据,没找到就会去磁盘中查找,如果查找到就会将这条数据加载到缓冲池(BufferPool)中
在加载到 Buffer Pool 的同时,会将这条数据的原始记录保存到 undo 日志文件中

更复杂的还有mvcc过程会新开一篇来讲

mysql执行图解

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值