【MySQL】浅谈日志系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
日志服务 SLS,月写入数据量 50GB 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,数据变化
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
18天前
|
存储 安全 Java
Spring Boot 3 集成Spring AOP实现系统日志记录
本文介绍了如何在Spring Boot 3中集成Spring AOP实现系统日志记录功能。通过定义`SysLog`注解和配置相应的AOP切面,可以在方法执行前后自动记录日志信息,包括操作的开始时间、结束时间、请求参数、返回结果、异常信息等,并将这些信息保存到数据库中。此外,还使用了`ThreadLocal`变量来存储每个线程独立的日志数据,确保线程安全。文中还展示了项目实战中的部分代码片段,以及基于Spring Boot 3 + Vue 3构建的快速开发框架的简介与内置功能列表。此框架结合了当前主流技术栈,提供了用户管理、权限控制、接口文档自动生成等多项实用特性。
69 8
|
1月前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
125 10
|
1月前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
81 3
|
2月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
182 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
1月前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
1月前
|
存储 监控 安全
什么是事件日志管理系统?事件日志管理系统有哪些用处?
事件日志管理系统是IT安全的重要工具,用于集中收集、分析和解释来自组织IT基础设施各组件的事件日志,如防火墙、路由器、交换机等,帮助提升网络安全、实现主动威胁检测和促进合规性。系统支持多种日志类型,包括Windows事件日志、Syslog日志和应用程序日志,通过实时监测、告警及可视化分析,为企业提供强大的安全保障。然而,实施过程中也面临数据量大、日志管理和分析复杂等挑战。EventLog Analyzer作为一款高效工具,不仅提供实时监测与告警、可视化分析和报告功能,还支持多种合规性报告,帮助企业克服挑战,提升网络安全水平。
|
2月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
2月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的binlog日志文件
MySQL的binlog日志记录了所有对数据库的更改操作(不包括SELECT和SHOW),主要用于主从复制和数据恢复。binlog有三种模式,可通过设置binlog_format参数选择。示例展示了如何启用binlog、设置格式、查看日志文件及记录的信息。
263 6
|
2月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
268 3

推荐镜像

更多