广告
返回顶部
首页 > 资讯 > 数据库 >有哪些关于MySQL日志
  • 496
分享到

有哪些关于MySQL日志

2024-04-02 19:04:59 496人浏览 八月长安
摘要

这篇文章主要讲解了“有哪些关于Mysql日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于mysql日志”吧!MySQL日志说起Mysql的日志,

这篇文章主要讲解了“有哪些关于Mysql日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于mysql日志”吧!

MySQL日志

说起Mysql的日志,有三种类型的日志对于MySQL来说是至关重要的,这三种日志分别为:Binlog、Undo Log 和 Redo Log。

由于Binlog和UndoLog有类似的地方,所以,我们按照如下顺序依次介绍MySQL中的三大日志原理:Undo Log——> Redo Log  ——> Binlog。

Undo Log日志

什么是Undo Log

顾名思义,Undo Log的字面意思就是撤销操作的日志,指的是使MySQL中的数据回到某个状态。

在MySQL数据库中,事务开始之前,MySQL会将待修改的记录保存到Undo Log中,如果数据库崩溃或者事务需要回滚时,MySQL可以通过利用Undo  Log日志,将数据库中的数据回滚到之前的状态。

MySQL新增、修改和删除数据时,在事务开始前,就会将信息写入Undo Log中。事务提交时,并不会立刻删除Undo Log,  InnoDB存储引擎会将事务对应的Undo Log放入待删除列表中,之后会通过后台的purge  thread对待删除的列表进行删除处理。这里,值得注意的是:Undo Log是一种 逻辑日志,  记录的是一个变化过程。比如,MySQL执行一个delete操作,Undo Log就会记录一个insert操作;MySQL执行一个insert操作,Undo  Log就会记录一个delete操作;MySQL执行一个update操作,Undo Log就会记录一个相反的update操作。

Undo Log以段的方式来管理和记录日志信息,在InnoDB存储引擎的数据文件中,包含了一种叫做rollback  segment的回滚段,其内部包含了1024个undo log senment。

Undo Log作用

Undo Log对于MySQL实现事务来说,起着至关重要的作用,它实现了事务的原子性和多版本并发控制,也就是我们经常说的mvcC。

  • 实现事务的原子性

Undo  Log能够实现MySQL事务的原子性,在事务的处理过程中,如果MySQL出现了错误或者用户手动执行了事务的回滚操作(执行了rollback操作),MySQL可以利用Undo  Log日志将数据库中的数据恢复到之前的状态。

  • 实现MVCC机制

Undo Log在MySQL的InnoDB存储引擎中实现了多版本并发控制(MVCC)机制。事务未提交前,Undo  Log保存了未提交之前的版本数据,Undo Log中的数据可以作为旧版本数据的副本或者快照以便其他并发事务进行读取操作。

有哪些关于MySQL日志

事务A手动开启事务后,对Goods数据表中id为1的数据进行更新操作,首先会把更新命中的数据写入到Undo  Buffer中。在事务A未提交之前,此时,事务B手动开启事务,对goods数据表中的id为1的数据进行查询操作,此时的事务B会读取Undo  Log中的数据并返回给客户端,这就是MySQL中的MVCC机制。

可以在MySQL中通过下面的命令来查看控制Undo Log日志的参数。

show variables like '%innodb_undo%';

Redo Log日志

说了MySQL中的Undo Log,我们再来看看MySQL中的Redo Log日志。

什么是Redo Log

顾名思义Redo  Log的字面意思就是重做日志,指的是在数据库出现意外情况时能够对重新执行某种操作。在MySQL中,事务中修改的任何数据,都会将最新的数据写入Redo  Log中进行备份。

在MySQL中,随着事务操作的执行,就会产生Redo Log日志,在事务提交时会产生Redo Log并将其写入Redo Buffer,Redo  Buffer也并不是随着事务的提交就会被立刻写入到磁盘中,而是等事务操作的脏页写入到磁盘之后,Redo Log的使命也就完成了,此时,Redo  Log日志占用的空间可以重新利用,会被后续产生的Redo Log日志覆盖。

Redo Log的原理

Redo Log 能够实现事务的持久性,防止在发生故障的时间点,有脏页未写入表的 ibd 文件中,在重启 MySQL 服务的时候,根据 Redo Log  进行重做,从而将未提交的事务进行持久化。这个过程可以简化为下图所示。

有哪些关于MySQL日志

Redo Log的写机制

Redo Log文件的内容是以顺序循环的方式写入文件的,写满时就会回到第一个文件,进行覆盖写。

有哪些关于MySQL日志

  • Write Pos 是当前记录的位置,一边写一边后移,写到最后一个文件末尾后就回到 0 号文件开头;

  • CheckPoint是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数 据文件;

Write Pos 和 CheckPoint之间还空着的部分,可以用来记录新的操作。如果 Write Pos 追上  CheckPoint,表示已经写满,此时就需要向后移动CheckPoint来擦除数据。

每个InnoDB存储引擎至少有1个重做日志文件组(group),每个文件组至少有2个重做日志文件,默认为ib_logfile0和ib_logfile1  。

可以在MySQL中通过如下命令来查看控制Redo Log的参数。

show variables like '%innodb_log%';

Redo Log写入机制

在Redo Log日志信息从Redo Buffer持久化到Redo  Log时,具体的持久化策略可以通过innodb_flush_log_at_trx_commit 参数进行设置,具体策略如下所示。

  • 0:每秒提交 Redo buffer ->OS cache -> flush cache to  disk,可能丢失一秒内的事务数据。由后台Master线程每隔 1秒执行一次操作。

  • 1(默认值):每次事务提交执行 Redo Buffer -> OS cache -> flush cache to  disk,这种方式最安全,性能最差。

  • 2:每次事务提交执行 Redo Buffer -> OS cache,然后由后台Master线程再每隔1秒执行OS cache ->  flush cache to disk 的操作。

一般建议选择取值2,因为 MySQL 挂了数据没有损失,整个服务器挂了才会损失1秒的事务提交数据。

Binlog日志

什么是Binlog

Binlog记录所有MySQL数据库表结构变更以及表数据修改的二进制日志,不会记录select和show这类查询操作的日志。Binlog日志是以事件形式记录,还包含语句所执行的消耗时间。开启Binlog日志有以下两个最重要的使用场景。

  • 主从复制:在主库中开启Binlog功能,这样主库就可以把Binlog传递给从库,从库拿到Binlog后实现数据恢复达到主从数据一致性。

  • 数据恢复:通过mysqlbinlog等工具来恢复数据

Binlog文件记录模式

Binlog文件记录模式有STATEMENT、ROW和MIXED三种,具体含义如下。

ROW模式

ROW(row-based replication, RBR):日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。

优点:能清楚记录每一个行数据的修改细节,能完全实现主从数据同步和数据的恢复。

缺点:批量操作,会产生大量的日志,尤其是alter table会让日志暴涨。

STATMENT模式

STATMENT(statement-based replication,  SBR):每一条被修改数据的SQL都会记录到master的Binlog中,slave在复制的时候SQL进程会解析成和原来master端执行过的相同的SQL再次执行。简称SQL语句复制。

优点:日志量小,减少磁盘IO,提升存储和恢复速度

缺点:在某些情况下会导致主从数据不一致,比如last_insert_id()、now()等函数。

MIXED模式

MIXED(mixed-based replication,  MBR):以上两种模式的混合使用,一般会使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择写入模式  。

Binlog文件结构

对于MySQL的Binlog文件结构有三种版本,见下图。

有哪些关于MySQL日志

有哪些关于MySQL日志

有哪些关于MySQL日志

关于Binlog文件结构的具体信息,小伙伴们可以参考MySQL的官方文档,具体链接为:https://dev.mysql.com/doc/internals/en/event-header-fields.html

Binlog写机制

根据记录模式和操作触发event事件生成log event(事件触发执行机制)。

将事务执行过程中产生的日志时间(log event)写入缓冲区,每个事务线程都有一个缓冲区。Log  Event保存在一个binlog_cache_mngr数据结构中,在该结构中有两个缓冲区,一个是stmt_cache,用于存放不支持事务的信息;另一个是trx_cache,用于存放支持事务的信息。

事务在提交阶段会将产生的log event写入到外部binlog文件中。不同事务以串行方式将log  event写入Binlog文件中,所以一个事务包含的log event信息在binlog文件中是连续的,中间不会插入其他事务的log event。

Binlog文件操作

Binlog状态查看

show variables like 'log_bin';

开启Binlog功能,需要修改my.cnf或my.ini配置文件,在[mysqld]下面增加log_bin=mysql_bin_log,重启  MySQL服务。

binlog-fORMat=ROW log-bin=mysqlbinlog

使用show binlog events命令

show binary logs; //等价于show master logs; show master status; show binlog events; show binlog events in 'mysqlbinlog.000001';

使用mysqlbinlog 命令

mysqlbinlog "文件名" mysqlbinlog "文件名" > "test.sql"

使用 binlog 恢复数据

//按指定时间恢复 mysqlbinlog --start-datetime="2021-02-28 18:00:00" --stopdatetime="2021-03-01 00:00:00" mysqlbinlog.000001 | mysql -uroot -p123456 //按事件位置号恢复 mysqlbinlog --start-position=1789 --stop-position=2674 mysqlbinlog.000001 | mysql -uroot -p123456

删除Binlog文件

purge binary logs to 'mysqlbinlog.000001'; //删除指定文件 purge binary logs before '2021-03-01 00:00:00'; //删除指定时间之前的文件 reset master; //清除所有文件

可以通过设置expire_logs_days参数来启动自动清理功能。默认值为0表示没启用。设置为大于0的整数表示超出多少天binlog文件会自动清除。

感谢各位的阅读,以上就是“有哪些关于MySQL日志”的内容了,经过本文的学习后,相信大家对有哪些关于MySQL日志这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: 有哪些关于MySQL日志

本文链接: https://www.lsjlt.com/news/61846.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 有哪些关于MySQL日志
    这篇文章主要讲解了“有哪些关于MySQL日志”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“有哪些关于MySQL日志”吧!MySQL日志说起MySQL的日志,...
    99+
    2022-10-18
  • mysql相关的日志文件有哪些
    这篇文章给大家分享的是有关mysql相关的日志文件有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  Mysql的日志文件种类比较多,有的日志文件记录了mysql...
    99+
    2022-10-19
  • sqlserver关于日志传输log shipping的知识点有哪些
    这篇文章主要讲解了“sqlserver关于日志传输log shipping的知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“sqlserver关于...
    99+
    2022-10-18
  • MySQL中有哪些日志类型
    MySQL中有哪些日志类型,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。MySQL中有六种日志文件,分别是:重做日志(redo log)、...
    99+
    2022-10-18
  • Nginx日志的相关配置有哪些
    这篇文章主要介绍“Nginx日志的相关配置有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Nginx日志的相关配置有哪些”文章能帮助大家解决问题。Nginx 日志相关配置有 2 个地方:acce...
    99+
    2023-06-27
  • mysql日志文件有哪些作用
    了解mysql日志文件有哪些作用?这个问题可能是我们日常学习或工作经常见到的。希望通过这个问题能让你收获颇深。下面是小编给大家带来的参考内容,让我们一起来看看吧!MySQL日志文件可分为:重做日志(redo...
    99+
    2022-10-18
  • MySQL日志的知识点有哪些
    本篇内容主要讲解“MySQL日志的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL日志的知识点有哪些”吧!Mysql的日志系统是Mysql保...
    99+
    2022-10-19
  • mysql关于redo事务日志ib_logfile的理解
    总结 1、redo事务日志就是ib_logfile,两个ib_logfile开头的文件,它们就是log group中的redo log file,而且它们的大小完全一致且等于变量innodb_lo...
    99+
    2022-10-18
  • mysql中general_log日志知识点有哪些
    这篇文章主要为大家展示了“mysql中general_log日志知识点有哪些”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“mysql中general_log日志...
    99+
    2022-10-18
  • MySQL慢日志选项参数有哪些
    这篇文章给大家分享的是有关MySQL慢日志选项参数有哪些的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。〇 log_output枚举型,动态参数。用于设置slow log和gene...
    99+
    2022-10-18
  • MySQL中有哪些日志维护策略
    这篇文章给大家介绍MySQL中有哪些日志维护策略,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。日志类型:MySQL有几个不同的日志文件,可以帮助你找出mysqld内部发生的事情:&nb...
    99+
    2022-10-18
  • MySQL事务日志的特征有哪些
    本篇内容主要讲解“MySQL事务日志的特征有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL事务日志的特征有哪些”吧!一、MySQL事务事务是MyS...
    99+
    2022-10-19
  • mysql关于ib_logfile事务日志和binary log二进制日志的区别
    总结 1、ib_logfile类似oracle的online redo log,包含commit和uncommit的数据 2、binary log类似oracle的online redo lo...
    99+
    2022-10-18
  • Python 关于日志的分析
    项目情况介绍:基于Python 3.6.6 ,实现对nginx访问的日志分析代码,实现了对日志中code的占比统计和浏览器类型和访问情况统计实现的代码段有:1.编写窗户函数,实现在一定的时间内对数据进行分析2.通过正则表达式对日志进行匹配,...
    99+
    2023-01-31
    日志 Python
  • 关于Thinkphp6的日志问题
    目录Thinkphp6的日志问题设置日志记录级别单一日志独立日志日志的写入时机日志通道Thinkphp6异常处理与日志异常处理日志手动记录日志关闭日志总结Thinkphp6的日志问题...
    99+
    2023-03-23
    Thinkphp6的日志 Thinkphp6日志 关于Thinkphp6日志
  • MySQL中常见的日志问题有哪些
    小编给大家分享一下MySQL中常见的日志问题有哪些,希望大家阅读完这篇文章后大所收获,下面让我们一起去探讨吧!MySQL 里有两个日志,即:重做日志(redo log)和归档日志(binlog)。其中,bi...
    99+
    2022-10-18
  • MySQL二进制日志的格式有哪些
    这篇文章主要介绍“MySQL二进制日志的格式有哪些”,在日常操作中,相信很多人在MySQL二进制日志的格式有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”MySQL二进制...
    99+
    2022-10-18
  • mysql binlog日志的违规操作有哪些
    这篇文章主要介绍“mysql binlog日志的违规操作有哪些”,在日常操作中,相信很多人在mysql binlog日志的违规操作有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2022-10-18
  • mysql关于variable知识点有哪些
    这篇文章主要讲解了“mysql关于variable知识点有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql关于variable知识点有哪些”吧!...
    99+
    2022-10-18
  • 关于MYSQL日期函数的有哪些知识是必须懂的
    本文主要给大家介绍关于MYSQL日期函数的知识,文章内容都是笔者用心摘选和编辑的,具有一定的针对性,对大家的参考意义还是比较大的,下面跟笔者一起了解下MYSQL日期函数的知识吧。    ...
    99+
    2022-10-18
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作