Mysql的日志介绍

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Mysql的日志介绍

正文


首先,日志的作用基本上就是记录一些用户的行为,让用户的操作可以进行追溯、可查看的效果。同理Mysql的日志也是起到了这个作用,不过在此的基础上,又增加了其他的新功能,比如利用日志信息完成一些事务的操作。介绍来介绍一下Mysql的日志的作用。


事务ACID的实现


我们先来介绍一下事务ACID的实现:

原子性:通过undo log实现

一致性:通过undo log和redo log共同实现

隔离性:通过锁机制和undo log实现

持久性:redo log实现

可以看到事务的ACID是通过redo log 和 undo log来实现的,下面我们首先介绍下这两种日志


Mysql日志类型


逻辑日志(存储了逻辑SQL修改语句)

物理日志(存储了数据被修改的值)


Redo Log(重做日志)


我们知道innoDB有个特性是缓冲池,缓冲池中的脏页(该page和磁盘数据不一致)数据会定期刷新到磁盘上。但是如果数据库宕机,并且插入缓冲中的数据还没有来得及刷新到磁盘上,这些内存中的脏页数据就会丢失,从而导致无法保证持久性。由此,mysql 引入了redo log来解决这个问题。这是redo log写入的流程是:

对数据进行修改时,先写入redo log,然后再更新到插入缓冲,保证数据不会因为宕机而丢失,保证持久性

当事务提交的时候会将redo log刷至磁盘持久化。

因为缓冲池每次刷脏页到磁盘是随机IO每次修改的数据是不确定的,且是以页为单位进行的,每次都要整页写入,所以整体速度比较慢,而redo log 是在页中追加,顺序IO并且每次都值写入修改的部分,IO量降低很多,速度较快


redo log由两部分组成:


redo log buffer

redo log file

InnoDB保证持久性的机制是 force log at commit:当事务commit时,先将事务的所有redo log buffer写入到redo log file进行持久化,才能commit成功。这就保证了整个事务的持久性。其中为了确保log buffer能写入到log file,每次都是通过fsync操作来去持久化的。


Undo Log


undo log主要被用于到实现事务的原子性和隔离性undo log属于逻辑日志


作用


保存了事务发生之前的数据版本,用于回滚(原子性)

提供了并发控制(MVCC)(隔离性)

undo log和redo log正好相反,undo log记录的是数据发生修改之前的信息,并且记录的是逻辑变化,比如要执行一个delete操作,那么undo log记录的就是一个insert操作,执行一个update操作,那么undo log记录的是一个反向的update操作。

隔离性原理


隔离性也就是事务内的查询不会查询到其他事务的修改,也就是事务之间互相隔离。

undo log被innoDB引擎用于了多版本并发控制。

innoDB通过undo log保存了已更改的行数据的旧版本的数据快照,这样undo log中的数据可以作为旧版本数据快照供其他事务读取,来达到一个隔离性的目的。


Binlog


binlog是Mysql Server层维护的一个二进制日志,和binlog不一样的是redo log和undo log都是innoDB引擎层面的实现。使用场景

主从复制:Mysql Replication在master端开启binlog,然后slave通过拉取复制master的binlog日志到salve,来完成主从同步复制。

数据恢复:生成binlog文件之后,我们可以通过mysqlbinlog工具恢复数据。


binlog的3种日志格式


ROW 格式


ROW格式记录的是每一行实际的数据变更,然后savle再将相同的数据进行修改来达到一致性。优点:binlog不需要记录上下文信息,只需要保存对应的行的数据修改即可。所以这种模式下会记录数据的修改细节,不会受到系统函数变量或者存储过程的影响导致无法正确复制的问题缺点:因为会记录下所有的数据变更,所以当修改量大的时候产生的日志比较大。


STATEMENT 格式


STATEMENT格式会记录每一行数据修改的sql,然后salve通过执行sql来同步数据。优点:首先是解决了ROW格式的缺点,不需要记录每一行的数据变化,只需要记录sql语句和上下文信息即可,减少了binlog日志的量。缺点:因为只记录了sql语句,当sql中使用了某些特定的函数:比如当前时间和随机数的时候,在salve再次执行的时候很大可能会造成主从不一致的问题。


MIXED 格式


Mixed格式下,Mysql会根据具体执行的每一条sql来区分对待记录的日志格式,在Statement和Row之间选择一种合适的格式。如果sql语句就是简单的insert或者update就会记录具体的行变更。

上面简单的介绍了Mysql的一些基本的日志的,每一种日志都会有不同的作用,同时数据库的隔离级别以及它的ACID的特性都是用一些日志加上它自己的锁机制来实现的。到这里基本上一个简单的介绍的过程就结束了,谢谢大家的阅读。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
26 10
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
本文介绍了MySQL InnoDB存储引擎中的数据文件和重做日志文件。数据文件包括`.ibd`和`ibdata`文件,用于存放InnoDB数据和索引。重做日志文件(redo log)确保数据的可靠性和事务的持久性,其大小和路径可由相关参数配置。文章还提供了视频讲解和示例代码。
141 11
【赵渝强老师】MySQL InnoDB的数据文件与重做日志文件
|
15天前
|
SQL 存储 缓存
MySQL进阶突击系列(02)一条更新SQL执行过程 | 讲透undoLog、redoLog、binLog日志三宝
本文详细介绍了MySQL中update SQL执行过程涉及的undoLog、redoLog和binLog三种日志的作用及其工作原理,包括它们如何确保数据的一致性和完整性,以及在事务提交过程中各自的角色。同时,文章还探讨了这些日志在故障恢复中的重要性,强调了合理配置相关参数对于提高系统稳定性的必要性。
|
1月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的全量日志文件
MySQL全量日志记录所有操作的SQL语句,默认禁用。启用后,可通过`show variables like %general_log%检查状态,使用`set global general_log=ON`临时开启,执行查询并查看日志文件以追踪SQL执行详情。
|
1月前
|
关系型数据库 MySQL 数据库
【赵渝强老师】MySQL的binlog日志文件
MySQL的binlog日志记录了所有对数据库的更改操作(不包括SELECT和SHOW),主要用于主从复制和数据恢复。binlog有三种模式,可通过设置binlog_format参数选择。示例展示了如何启用binlog、设置格式、查看日志文件及记录的信息。
|
1月前
|
SQL 关系型数据库 MySQL
【赵渝强老师】MySQL的慢查询日志
MySQL的慢查询日志用于记录执行时间超过设定阈值的SQL语句,帮助数据库管理员识别并优化性能问题。通过`mysqldumpslow`工具可查看日志。本文介绍了如何检查、启用及配置慢查询日志,并通过实例演示了慢查询的记录与分析过程。
120 3
|
1月前
|
存储 Oracle 关系型数据库
【赵渝强老师】MySQL的撤销日志文件和错误日志文件
本文介绍了MySQL的物理存储结构,重点讲解了InnoDB存储引擎中的撤销日志文件(undo log)和错误日志文件。从MySQL 8.0开始,默认生成两个10MB的undo表空间文件,并支持动态扩容和收缩。错误日志文件记录了MySQL启动、运行、关闭过程中的问题,通过示例展示了如何查看和使用这些日志。
|
1月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
282 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
9天前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。
|
2月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
316 3
下一篇
DataWorks