redo log 与 binlog

 

redo log

  • redo log (重做日志)是处于存储引擎层的,是InnoDB引擎特有的

  • redo log 存储的是物理日志 --- 即,“在某个数据页上改动了什么”

  • redo log是循环写,空间是一定的,会用完。

  • MySQL使用WAL技术 --- Write-Ahead-Logging,

    具体到redo log就是:当有一条记录需要更新的时候,InnoDB引擎会先先把记录写在redo log里并更新内存,然后在空闲的时候将操作记录更新到磁盘里。

  • InnoDB 引擎的 redo log 的空间是有限的,一组4个文件,每个文件1GB,总共4GB。当这块“临时记录板”写满后再次从开头的地方循环写入。

  • redo log 的写入分为两个步骤 --- perparecommit阶段 --- ”两阶段提交“

 

有了redo log,就可以保证即使数据库发生异常重启也不会丢失记录,称为 crash-safe

 

binlog

  • binlog (归档日志) 处于server层,是Mysql自带的日志模块

  • binlog 是存储的是逻辑日志 --- 即,“记录原始语句”。因此可用来恢复数据库 --- 相当于在某个时间的基础上重新运行了一遍相关语句。

  • binlog 是可追加写入的 --- binlog文件写到 一定大小后就会在下一个文件中继续写,而不覆盖之前的文件。

 

两种日志的使用流程

  • (执行器)读取表中需要update的那一行
  • (InnoDB)查询该行信息是否在内存中。若没有则从磁盘读取到内存。然后都返回行数据
  • (执行器)更改行数据、写入新行
  • (InnoDB)新行更新到内存,写入redo log (此时处于prepare阶段)
  • (执行器)写入binlog
  • (InnoDB)提交事务 (此时处于commit阶段)

使用“两阶段提交”是为了避免恢复时恢复出来的数据库与原有状态不一致的现象。

 

避免MySQL crash时数据丢失的设置

我们知道发生crash时丢失的肯定都是内存中的数据,通过以下设置进行持久化

  • innodb_flush_log_at_trx_commit = 1 --- 每次事务的 redo log 直接持久化到磁盘
  • sync_binlog = 1 --- 每次事务的binlog都持久化到磁盘

 

恢复与扩容

  • 最近的全量备份+到相应时间点的归档日志(binlog)

 

redo log 与 binlog的更多相关文章

  1. MySQL日志系统:redo log与binlog

    日志系统主要有redo log(重做日志)和binlog(归档日志).redo log是InnoDB存储引擎层的日志,binlog是MySQL Server层记录的日志, 两者都是记录了某些操作的日志 ...

  2. MySQL redo log 与 binlog 的区别

    MySQL redo log 与 binlog 的区别 什么是redo log 什么是binlog redo log与binlog的区别 1. 什么是redo log? redo log又称重做日志文 ...

  3. MySQL 日志系统之 redo log 和 binlog

    之前我们了解了一条查询语句的执行流程,并介绍了执行过程中涉及的处理模块.一条查询语句的执行过程一般是经过连接器.分析器.优化器.执行器等功能模块,最后到达存储引擎. 那么,一条 SQL 更新语句的执行 ...

  4. 数据库中的两个最重要的日志redo log和binlog

    mysql整体来看其实只有两部分,一部分是server层,一部分是引擎层. 1.redo log(重做日志):当有一条记录需要更新的时候,InnoDB 引擎就会先把记录写入redo log里面,并更新 ...

  5. msyql redo log和binlog

    更新语句执行流程 下面是这个表的创建语句,这个表有一个主键 ID 和一个整型字段 c: create table T(ID int primary key, c int); 如果要将 ID=2 这一行 ...

  6. 一生挚友redo log、binlog《死磕MySQL系列 二》

    系列文章 原来一条select语句在MySQL是这样执行的<死磕MySQL系列 一> 一生挚友redo log.binlog<死磕MySQL系列 二> 前言 咔咔闲谈 上期根据 ...

  7. MySQL更新数据时,日志(redo log、binlog)执行流程

    1:背景 项目需要做Es和数据库的同步,而手动在代码中进行数据同步又是Es的一些不必要的数据同步操作和业务逻辑耦合,所以使用的了读取mysql的binlog日志的方式进行同步Es的数据. 问题1:根据 ...

  8. MySQL是怎么保证redo log和binlog是完整的?

    摘要:WAL机制保证只要redo log和binlog保证持久化到磁盘,就能确保MySQL异常重启后,数据可以恢复. 本文分享自华为云社区<MySQL会丢数据吗?>,作者: JavaEdg ...

  9. redo log 和 binlog 的一些总结

    1 redo log 和 binlog 的区别 redo log 是 InnoDB 引擎特有的:binlog 是 MySQL 的 Server 层实现的,所有引擎都可以使用. redo log 是物理 ...

随机推荐

  1. How to delete a directory recursively in Java

    在java8或更高版本中,使用NIO API递归删除一个非空目录: try { // 创建stream流 Stream<Path> file = Files.walk(Paths.get( ...

  2. iOS-地图定位 && 解码与反解码

             前段时间,公司开发的App用到了地图和定位,所以记录一下,作为回顾总结.     对于地图和定位,苹果公司提供给了两个框架: MapKit:用于地图展示 Core Location ...

  3. chattr +i 用户也没法随意删除

    root用户也没法用rm随意删除文件?   前言 在你的印象中,是不是root用户就可以为所欲为呢?随便一个rm -rf *,一波骚操作走人?可能没那么容易. 先来个示例,创建一个文本文件test.t ...

  4. GIT 仓库的搭建

    1.安装并配置必要的依赖关系 在CentOS 7(和RedHat / Oracle / Scientific Linux 7)上,以下命令还将在系统防火墙中打开HTTP和SSH访问. yum inst ...

  5. Linux命令总结大全,包含所有linux命令

    使用说明:此文档包含所有的Linux命令,只有你想不到的没有你看不到的,此文档共计10万余字,有8400多行,预计阅读时间差不多需要3个小时左右,所以要给大家说一说如何阅读此文档 为了方便大家阅读,我 ...

  6. 【Spring注解驱动开发】使用@Lazy注解实现懒加载

    写在前面 Spring在启动时,默认会将单实例bean进行实例化,并加载到Spring容器中.也就是说,单实例bean默认在Spring容器启动的时候创建对象,并将对象加载到Spring容器中.如果我 ...

  7. <VCC笔记>VCC简介与安装

    最近在学校跟着老师参与了一个代码验证的工作,需要使用Microsoft Research(微软学术)开发的VCC工具,是开源的,托管在Codeplex上.这东西英语资料极其少,中文资料基本没有.我只能 ...

  8. (七)MySQL常见的数据类型、约束和标识列

    一.MySQL常见数据类型 1.数值型: ①整型:tinyint.smllint.mediumint.int/integer.bigint 图源:尚硅谷李玉婷 案例1:关键表格teacher,分别添加 ...

  9. (十三)exec-maven-plugin配置及使用

    原文链接:https://www.cnblogs.com/lianshan/p/7358966.html 背景: 如果你想在项maven生命周期内,运行一段java代码,或者一段独立的程序,或者说我们 ...

  10. 《Java并发编程的艺术》第4章 Java并发编程基础 ——学习笔记

    参考https://www.cnblogs.com/lilinzhiyu/p/8086235.html 4.1 线程简介 进程:操作系统在运行一个程序时,会为其创建一个进程. 线程:是进程的一个执行单 ...