【MySQL】浅谈日志系统

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云数据库 RDS MySQL Serverless,价值2615元额度,1个月
简介: 日志系统可谓是MySQL中的重中之重,一些MySQL的特性也通过依赖于日志实现的,本篇文章过一遍日志相关的东西,方便日后复习。

MySQL相关文章


binlog


概念


  • 二进制日志文件,记录了所有的`DDL`(数据库定义语言,create、alter、drop)和`DML`(数据库操作语言,select、update、insert、delete)语句,以事件形式记录,包含语句所执行的消耗的时间。
  • 用作于主从架构下的数据同步,也可以用作误删操作后基于binlog恢复到指定时间点。通过自带的mysqlbinlog命令恢复。
  • 两阶段提交时也会依赖binlog实现事务数据一致。


存储规则

  • binlog的默认是保持时间由参数expire_logs_days配置,也就是说对于非活动的日志文件,在生成时间超过expire_logs_days配置的天数之后,会被自动删除。

image.png


  • 配置文件的路径为log_bin_basename,binlog日志文件按照指定大小,当日志文件达到指定的最大的大小之后,进行滚动更新,生成新的日志文件。对于每个binlog日志文件,通过一个统一的index文件来组织。

image.png


redolog


概念

  • 重做日志,主要记录事务执行后的状态,用来恢复未写入磁盘的已成功事务更新的数据。
  • 据库对数据做修改时会将磁盘中的数据加载到buffer pool中,然后再buffer pool中修改,这时内存中的数据与磁盘数据不一致成为脏页
  • 如果这时候db发生重启,这些数据由于还在内存中未同步到磁盘中(随机io),会发生数据丢失
  • 为了避免这种现象,当buffer pool的数据发生变化结束后把相应修改记录保存在redolog文件中
  • 当db发生崩溃时恢复的时候,可以根据这个文件的记录内容,重新应用到磁盘文件,数据保持一致。
  • redolog是innodb引擎独有的日志


存储规则

  • 数据空间有限,循环写入,write pos表示当前位置,一边写一遍后移,checkpoint表示要清除的位置
  • 记录对数据的修改操作,主要目的是的随机IO变成顺序IO,提升性能。
  • redolog没有记录完整数据,真正落盘不需要redolog,等到merge时直接将buffer pool持久化到磁盘


与binlog的区别

  • redolog属于引擎层日志是innodb引擎特有,binlog属于server层日志。
  • redolog是**物理日志**,记录了是“哪个会话哪个时间在某个数据页上做了什么修改”;binlog 是逻辑日志,记录的是这个语句的**原始逻辑sql**,比如"给 ID=2 这一行的 c 字段加 1"
  • redolog是循环写入有最大限制,binlog可以追加,不会覆盖之前的日志。


两阶段提交

  • MySQL为了保证数据安全,数据所有操作都是先写日志再写磁盘
  • 整个写入逻辑划分成 redolog prepare -> binlog -> redolog commit
  • 校验数据
  1. binlog有记录,redolog commit: 正常事务
  2. binlog有记录,redolog prepare: 写入库成功,提交事务
  3. binlog无记录,redolog prepare: 写入数据库失败,回滚事务


image.png


undolog

概念


  • 回滚日志,用于存放数据被修改前的值,如果修改异常可以使用undo日志来实现回滚操作,保证事务的一致性。
  • 用于MySQL实现事务原理与MVCC特性
  • undolog分为
  1. insert undolog,insert语句产生的的日志,事务提交后
  2. update undolog,delete和update语句产生的日志,事务提交后放到history list中,等待purge线程进行最终删除



changebuffer


概念


  • 当需要更新数据时,如果数据在内存中则直接更新,如果不在innodb会把更新操作缓存在changebuffer中,当下次需要访问这条数据时,将这条数据从磁盘加载到内存并执行change buffer的逻辑,**减少随机读的IO的消耗。**
  • 主要目的节省随机读磁盘的io消耗,合并多次操作为批操作提高性能。


原理

  • changebuffer也会落盘,将changebuffer的的操作合并到原数据页得到新结果的过程叫做merge
  • merge过程
  • 磁盘读入数据
  • 将changebuffer内容依次应用到内存
  • 写入redolog,数据变化
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
监控 关系型数据库 MySQL
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
《MySQL 简易速速上手小册》第7章:MySQL监控和日志分析(2024 最新版)
41 3
|
1月前
|
存储 安全 关系型数据库
Mysql 的binlog日志的优缺点
MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它包含了所有对数据库执行的更改操作,如INSERT、UPDATE和DELETE等。binlog的主要目的是复制和恢复。以下是binlog日志的优缺点: ### 优点: 1. **数据恢复**:当数据库出现意外故障或数据丢失时,可以利用binlog进行点恢复(point-in-time recovery),将数据恢复到某一特定时间点。 2. **主从复制**:binlog是实现MySQL主从复制功能的核心组件。主服务器将binlog中的事件发送到从服务器,从服务器再重放这些事件,从而实现数据的同步。 3. **审计**:b
|
1月前
|
SQL 监控 关系型数据库
深入理解MySQL日志:通用查询、慢查询和错误日志详解
深入理解MySQL日志:通用查询、慢查询和错误日志详解
125 0
|
1月前
|
SQL 关系型数据库 MySQL
Mysql 的binlog日志的原理【4月更文挑战第1天】
【4月更文挑战第1天】 MySQL的binlog(二进制日志)是一个记录数据库更改的日志文件,它主要用于复制和恢复操作。以下是binlog日志的工作原理的简要概述: **事件写入**:当MySQL服务器执行一个事务时,它会将该事务中所有对数据库的修改操作(如INSERT、UPDATE和DELETE等)记录为一个事件(event)。这些事件包含了修改操作的相关信息,如操作类型、涉及的表、修改的行等。
|
1月前
|
SQL 存储 关系型数据库
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
轻松入门MySQL:深入理解MySQL日志,二进制日志、中继日志、回滚日志和重做日志(19)
|
6天前
|
关系型数据库 MySQL 数据管理
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
MySQL通过 bin-log 恢复从备份点到灾难点之间数据
|
12天前
|
DataWorks 关系型数据库 MySQL
DataWorks产品使用合集之在DataWorks中,如何通过PolarDB for MySQL来查看binlog日志
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
28 1
|
13天前
|
SQL 监控 关系型数据库
【MySQL学习】MySQL的慢查询日志和错误日志
【MySQL学习】MySQL的慢查询日志和错误日志
|
19天前
|
SQL 存储 关系型数据库
MySQL慢日志的介绍以及如何使用问题
MySQL慢日志的介绍以及如何使用问题
19 0
|
1月前
|
存储 SQL 关系型数据库
mysql数据库日志
mysql数据库日志

推荐镜像

更多