Mysql的日志介绍

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 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的特性都是用一些日志加上它自己的锁机制来实现的。到这里基本上一个简单的介绍的过程就结束了,谢谢大家的阅读。


相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
2月前
|
SQL 运维 关系型数据库
深入探讨MySQL的二进制日志(binlog)选项
总结而言,对MySQL binlogs深度理解并妥善配置对数据库运维管理至关重要;它不仅关系到系统性能优化也是实现高可靠性架构设计必须考虑因素之一。通过精心规划与周密部署可以使得该机能充分发挥作用而避免潜在风险带来影响。
125 6
|
8月前
|
数据可视化 关系型数据库 MySQL
ELK实现nginx、mysql、http的日志可视化实验
通过本文的步骤,你可以成功配置ELK(Elasticsearch, Logstash, Kibana)来实现nginx、mysql和http日志的可视化。通过Kibana,你可以直观地查看和分析日志数据,从而更好地监控和管理系统。希望这些步骤能帮助你在实际项目中有效地利用ELK来处理日志数据。
654 90
|
6月前
|
SQL 监控 关系型数据库
MySQL日志分析:binlog、redolog、undolog三大日志的深度探讨。
数据库管理其实和写小说一样,需要规划,需要修订,也需要有能力回滚。理解这些日志的作用与优化,就像把握写作工具的使用与运用,为我们的数据库保驾护航。
289 23
|
7月前
|
SQL 运维 关系型数据库
MySQL Binlog 日志查看方法及查看内容解析
本文介绍了 MySQL 的 Binlog(二进制日志)功能及其使用方法。Binlog 记录了数据库的所有数据变更操作,如 INSERT、UPDATE 和 DELETE,对数据恢复、主从复制和审计至关重要。文章详细说明了如何开启 Binlog 功能、查看当前日志文件及内容,并解析了常见的事件类型,包括 Format_desc、Query、Table_map、Write_rows、Update_rows 和 Delete_rows 等,帮助用户掌握数据库变化历史,提升维护和排障能力。
|
8月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
210 16
|
8月前
|
存储 SQL 关系型数据库
mysql的undo log、redo log、bin log、buffer pool
MySQL的undo log、redo log、bin log和buffer pool是确保数据库高效、安全和可靠运行的关键组件。理解这些组件的工作原理和作用,对于优化数据库性能和保障数据安全具有重要意义。通过适当的配置和优化,可以显著提升MySQL的运行效率和数据可靠性。
162 4
|
9月前
|
关系型数据库 MySQL 数据库
MySQL日志
本文介绍了MySQL中三个重要的日志:binlog、redolog和undolog。binlog记录数据库更改操作,支持数据恢复、复制和审计;redolog保证事务的原子性和持久性,实现crash-safe;undolog用于事务回滚及MVCC的实现。每个日志都有其独特的作用和应用场景,确保数据库的稳定性和数据一致性。
179 1
|
8月前
|
SQL 存储 关系型数据库
简单聊聊MySQL的三大日志(Redo Log、Binlog和Undo Log)各有什么区别
在MySQL数据库管理中,理解Redo Log(重做日志)、Binlog(二进制日志)和Undo Log(回滚日志)至关重要。Redo Log确保数据持久性和崩溃恢复;Binlog用于主从复制和数据恢复,记录逻辑操作;Undo Log支持事务的原子性和隔离性,实现回滚与MVCC。三者协同工作,保障事务ACID特性。文章还详细解析了日志写入流程及可能的异常情况,帮助深入理解数据库日志机制。
1054 0
|
6月前
|
监控 容灾 算法
阿里云 SLS 多云日志接入最佳实践:链路、成本与高可用性优化
本文探讨了如何高效、经济且可靠地将海外应用与基础设施日志统一采集至阿里云日志服务(SLS),解决全球化业务扩展中的关键挑战。重点介绍了高性能日志采集Agent(iLogtail/LoongCollector)在海外场景的应用,推荐使用LoongCollector以获得更优的稳定性和网络容错能力。同时分析了多种网络接入方案,包括公网直连、全球加速优化、阿里云内网及专线/CEN/VPN接入等,并提供了成本优化策略和多目标发送配置指导,帮助企业构建稳定、低成本、高可用的全球日志系统。
798 54

推荐镜像

更多