你了解MySQL中的日志吗?
MySQL中有两类非常重要的日志,一类是redo log(重做日志),一类是bin log(归档日志)
redo log
重做日志利用的,是MySQL中,常见的WAL技术,WAL技术的全程是:Write-Ahead-Logging,它的关键点就是先写日志,再写磁盘。
在我们的MySQL中,当有一条记录需要更新的时候,InnoDB引擎就会将记录先写到redo log里,并且更新内存,这个时候这次更新操作就已经结束了,InnoDB引擎会在适当的时候,将这个操作记录到磁盘里,这个更新通常情况是在系统比较空闲的时候做的。
InnoDB的redo log是大小固定的,比如可以一次配置一组4个文件每个文件的大小是1GB,那么整个redo log的大小就是4GB。redo log的写入过程是循环写入,从头开始写,写到末尾后,就会又从头开始写(可以想象成一个环状)
有了redo log,InnoDB就可以保证数据库发生异常重启后,之前提交的记录不会丢失。这个能力称为crash-safe。
这里有两个问题。
1. 写日志和直接写数据库有什么差别吗?
写日志的时候,可以看做是一个追加操作,即顺序写。而写数据库则是随机写。在机械硬盘中,顺序写的速度要远大于随机写。(kafka对硬盘的操作也是顺序的,所以即使是机械硬盘,速度也不会太慢)
2. 使用redo log,刷入数据的操作,会不会影响SQL执行效率?
将redo log中的数据刷入磁盘的操作,是一个阻塞的操作。在之行SQL语句的时候,如果伴随着数据脏页的刷入,会就导致MySQL会突然抖一下,执行时间变长。
bin log
bin log被称为归档日志,它是Service层的日志。bin log属于逻辑日志,记录的是语句的原始逻辑,比如将ID等于2一行数据删除。bin log是一种非常重要的日志,他可以用于数据库的读写分离,主从复制等功能(从机读取主机的bin log,通过SQL-Thread执行SQL语句,实现同步),具体如何实现同步,会在日后的博客中讲解。
两段式提交
MySQL在执行一条修改语句时的逻辑如下:
update t set c = c + 1 where id = 5
- 执行器先从存储引擎中,找到id=5的这条数据,由于id是主键,所以引擎会执行使用索引树搜索,找到 id=5这一行数据,如果这一条数据已经存在于内存的数据页中,则执行返回给执行器。否则将会从磁盘中将数据页读到内存,再返回。
- 执行器拿到id=5的这一行数据,找到c 这一列,c+1得到新数据,再调用引擎层的接口,将新值写入。
- 引擎层将这一条新的数据更新到内存中,同时将这个更新操作,记录到redo log里,此时redo log处于prepare状态,通知执行器,语句已经执行成功,随时可以提交事务。
- 执行器生成此次操作的bin log,将bin log写入磁盘
- 执行器调用提交事务接口,将处于redo log的prepare状态修改成commit状态。
两段式提交的意义,是保证bin log 和redo log的数据一致性。
你了解MySQL中的日志吗?的更多相关文章
- mysql中的日志
关键词:mysql日志,mysql四种日志 一.mysql日志的种类 (1)一般来说,日志有四种,分别为: 1.错误日志:log-err (记录启动,运行,停止mysql时出现的信息) 2.二进制日志 ...
- MySQL中redo日志
重做日志用来实现事务的持久性,即ACID中的D,由两部分组成: 一是内存中的重做日志缓冲(redo log buffer) 易丢失 二是重做日志文件(redo log file) 持久的 InnoD ...
- Mysql中错误日志、binlog日志、查询日志、慢查询日志简单介绍
前言 数据库的日志是帮助数据库管理员,追踪分析数据库以前发生的各种事件的有力根据.mysql中提供了错误日志.binlog日志(二进制日志).查处日志.慢查询日志.在此,我力求解决下面问题:各个日志的 ...
- Linux学习-通过loganalyzer展示MySQL中rsyslog日志
一.实验环境 系统:CentOS7.6 软件包:apache,php,mariadb-server (都是基于光盘yum源) 源码包:loganalyzer-4.1.7.tar.gz (http:// ...
- MySQL系列详解三:MySQL中各类日志详解-技术流ken
前言 日志文件记录了MySQL数据库的各种类型的活动,MySQL数据库中常见的日志文件有 查询日志,慢查询日志,错误日志,二进制日志,中继日志 .下面分别对他们进行介绍. 查询日志 1.查看查询日志变 ...
- mysql中的慢查询日志
首先我们看一下关于mysql中的日志,主要包含:错误日志.查询日志.慢查询日志.事务日志.二进制日志: 日志是mysql数据库的重要组成部分.日志文件中记录着mysql数据库运行期间发生的变化:也就是 ...
- MySQL中的 redo 日志文件
MySQL中的 redo 日志文件 MySQL中有三种日志文件,redo log.bin log.undo log.redo log 是 存储引擎层(innodb)生成的日志,主要为了保证数据的可靠性 ...
- 关于《rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>》的反思
关于<rsyslog+mysql+loganalyzer搭建日志服务器<个人笔记>>的反思--链接--http://www.cnblogs.com/drgcaosheng/p/ ...
- 说说MySQL中的Redo log Undo log都在干啥
在数据库系统中,既有存放数据的文件,也有存放日志的文件.日志在内存中也是有缓存Log buffer,也有磁盘文件log file,本文主要描述存放日志的文件. MySQL中的日志文件, ...
随机推荐
- DOM操作方法、属性
话不多说直接上demo: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...
- vim 的初始配置
我是一个vim爱好者,项目开发过程中,大量地使用vim作为编辑工具. 今天刚开箱了一台新的 CentOS7, 现将Vim安装后的一些基本配置作一下记录. 使用配置模板 vim安装完之后,大多数配置都是 ...
- 利用python模拟菜刀反弹shell绕过限制
有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行 from sock ...
- 云计算 docker 容器部署
什么是docker容器: 容器就是在隔离的环境中运行的一个进程,如果进程停止,容器就会退出.隔离的环境拥有自己的系统文件,ip地址,主机名等kvm虚拟机,linux,系统文件 容器和虚拟化的区别 : ...
- Android SDK安装与环境变量的配置(windows系统)
(一)下载Android SDK压缩包 解压后即可(全英文路径,以免后续出现乱码) (1)下载地址:http://tools.android-studio.org/index.php/sdk
- pycharm的使用(day03复习整理)
pycharm的使用 file --> settings --> editor -->general --> change font size .... file --> ...
- 设计模式(三)Template Method模式
在父类中定义处理流程的框架,在子类中实现具体处理的模式就称为Template Method模式即模板方法模式. 根据下面的示例程序理解模板方法模式. package BigJunOba.bjtu.Te ...
- 23 个重难点突破,带你吃透 Service 知识点「长达 1W+ 字」
前言 学 Android 有一段时间了,想必不少人也和我一样,平时经常东学西凑,感觉知识点有些凌乱难成体系.所以趁着这几天忙里偷闲,把学的东西归纳下,捋捋思路. 这篇文章主要针对 Service 相关 ...
- 第一篇:版本控制git之仓库管理
---恢复内容开始--- 再开始这个话题之前,让我想起了一件很痛苦的事情,在我大学写毕业论文的时候,我当时的文件是这样保存的 毕业论文_初稿.doc 毕业论文_修改1.doc 毕业论文_修改2.doc ...
- 一:VSCode引入jupyter
1:安装 2:示例代码 #%% import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np x , , ) ...