【MySQL】日志详解

news2025/7/16 1:15:53

本文使用的MySQL版本是8

日志概览

它们记录了数据库系统中的不同操作和事件,以便于故障排除、性能优化和数据恢复。本文将介绍MySQL中常见的几种日志,同时也会介绍一点常用的选项。

官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7.4 MySQL Server Logs


相关说明

  • 默认情况下,在上面的日志中,Windows环境下只开启 错误日志。Linux开启 错误日志 和 二进制日志
  • 服务器运行期间,可以控制一般查询日志慢查询日志的开启,也可以更改其日志文件名。
  • 刷新日志:在MySQL客户端下执行 flush logs 将会把所有开启的日志都关闭,并打开新的日志文件方便我们查看最新的日志。或者使用mysqladmin工具并带有flush-logs或refresh参数、或者使用mysqldump工具并带有--flush-logs选项时,就会触发日志刷新的操作。 

配置日志 

这里以配置错误日志的路径为例:

对于Windows:

对于Linux:

修改路径:

找到配置文件,如果不知道在哪,查看http://t.csdnimg.cn/dZJZJ文章中的选项配置文件部分

修改log-error部分的值。如果只有文件名,数据就是默认的数据目录,自行添加为要修改的目录即可。

其他配置也都是一样的。


错误日志(Error Log)

错误日志包含 mysqld 启动和关闭时间的记录。它还包含在服务器启动和关闭期间以及在服务器运行期间发生的错误、警告和注释等诊断消息。例如,如果 mysqld 注意到需要自动检查或修复某个表,它将向错误日志写入一条消息。

根据错误日志配置的不同,错误消息还可以填充 Performance Schema error _ log 表,为日志提供 SQL 接口并允许查询其内容。

在某些操作系统上,如果 mysqld 异常退出,错误日志将包含堆栈跟踪。跟踪可用于确定 mysqld 退出的位置。

如果用于启动 mysqld,mysqld _ safe 可以将消息写入错误日志。例如,当 mysqld _ safe 注意到 mysqld 退出异常时,它重新启动 mysqld 并将 mysqld 重新启动的消息写入错误日志。

官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7.4.2 The Error Log

错误日志字段

错误代码参考官方文档:MySQL :: MySQL 8.0 Reference Manual :: 29.12.20.11 Error Summary Tables 

MySQL :: MySQL 8.0 Error Reference :: 4 Global Error Message Reference


一般查询日志(General Query Log)

一般查询日志记录客户端连接或断开连接的信息,同时记录从客户端接收的每个SQL语句。由于开启这样的记录会产生大量内容,非常耗费服务器资源,因此默认情况下是关闭的

一般查询日志通常用于性能分析、安全审计和故障排除。通过分析一般查询日志,可以了解数据库系统的运行状况,检测潜在的性能瓶颈,并对数据库访问进行监控和审计。此外,一般查询日志还可以帮助数据库管理员追踪特定用户或应用程序对数据库的访问情况,以及识别潜在的安全威胁和异常行为。

 官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7.4.3 The General Query Log


保存为文件或表

对于一般查询日志慢查询日志,除了可以保存成一般的日志文件,mysql中还为这两个日志提供了数据表,所以也可以把数据存到表中。

可以选择都选择。使用表查看可以用条件查询,比较方便。 可以通过客户端程序连接到服务器并查询表中的日志信息,无需登录服务器主机访问文件系统

查看保存选项

设置保存选项

SET GLOBAL log_output='[FILE, TABLE, NONE]';

查看表


慢查询日志(Slow Query Log)

慢查询日志由执行时间超过系统变量 long_query_time 指定的秒数的 SQL 语句组成,并且检查的行数大于系统变量 min_examined_row_limit 指定的值。被记录的慢查询需要进行优化,可以使用 mysqldumpslow 客户端程序对慢查询日志进行分析汇总。

需要注意的是,获取初始锁的时间不计入执行时间,MySQL 在执行完 SQL 语句并释放所有锁后才将符合条件的语句写入慢速查询日志,因此日志顺序可能与执行顺序不同。

官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7.4.5 The Slow Query Log

慢查询日志参数

查看文件或表

查看文件

启用慢查询日志并将输出目标设置为FILE时,每条语句前面用一行来表示日志的字段

# Query_time: SQL语句的执行时间,单位秒
# Lock_time: 获取锁的时间,单位秒
# Rows_sent: 发送到客户端的行数
# Rows_examined: 服务器检查的行数


# 开启了--log-slow-extra还会有下面的内容

# Thread_id: 线程标识符
# Errno: 错误码,没有发生错误则为0
# Killed: 如果语句被终止,用错误码表示原因,如果语句正常终止则为0
# Bytes_received: 接收到SQL语句的Bytes值
# Bytes_sent: 返回给客户端的Byte值
# Read_first: 索引中第一个条目被读取的次数,如果这个值很高,表明服务器正在执行大量完整索引扫描
# Read_last: 读取索引中最后一个键的请求数,使用 ORDER BY 时关注
# Read_key: 基于索引读取一行数据的请求数。如果这个值很高,表明表为当前查询建立了正确的索引
# Read_next: 按索引排序读取下一行的请求数,查询具有范围约束的索引列,或者进行索引扫描,此值将递增
# Read_prev: 按索引排序读取前一行的请求数。主要用于优化ORDER BY DESC
# Read_rnd: 基于固定位置读取一行的请求数。这个值很高表明,正在执行大量需要对结果进行排序的查询,可能有很多查询进行了全表扫描整,或者没有正确使用索引的连接
# Read_rnd_next: 读取数据文件中下一行的请求数。如果进行大量的表扫描,这个值会很高。通常,表明表没有建立正确地索引,或者查询没有利用索引
# Sort_merge_passes: 排序算法完成的归并次数,如果这个值很大,考虑增加sort_buffer_size系统变量的值
# Sort_range_count: 使用范围进行排序的次数
# Sort_rows: 排序的行数
# Sort_scan_count: 通过扫描表完成的排序数
# Created_tmp_disk_tables: 服务器在执行语句时创建内部磁盘临时表的数量
# Created_tmp_tables: 服务器在执行语句时创建的内部临时表的数量
# Start: 执行SQL语句开始时间
# End: 执行SQL语句结束时间

查看表

表结构如下


二进制日志(Binary Log)

二进制日志是用来记录数据库中增加,修改,删除操作的日志,不会记录查询等相关操作。保存的内容为二进制的,能够高效的记录操作。

作用:

  • 数据恢复:记录了相关的操作或者数据就可以用来恢复数据。
  • 主从节点数据复制:从节点读取主节点上的二进制数据并执行用来同步更新数据。

官方文档:MySQL :: MySQL 8.4 Reference Manual :: 7.4.4 The Binary Log


常见选项和变量

show variables like "%bin%";

可以使用 log_bin


二进制日志文件

二进制日志文件名由基本名加上数字扩展名组成,确保文件系列是有序的。

默认存储位置是数据目录

二进制日志文件更新:

  • 服务器启动
  • 服务器重新启动
  • 刷新服务器日志
  • 日志大小达到max_binlog_size(单个日志文件最大字节数,最小可以设定为 4096字节,最大值和默认值都是1GB   不过如果是在记录事务的时候超出了设定的最大值,这个文件可以超过这个值,也要记录一个完整的事务在文件中)

日志索引文件:

默认情况下,这个索引文件与二级制文件名字大体上相同。就是上图的index文件。可以使用 --log-bin-index修改索引名。

修改日志目录:

使用log-bin=绝对路径+文件名 来修改目录。


二进制日志格式

  • 基于语句:默认记录格式。记录每次执行的sql。但是当MySQL认为基于语句不能保证数据一致时,就会自动切换到基于行的日志记录。使用 binlog-format=statement 来设定。
  • 基于行:记录每一行的数据。
  • 混合:使用语句和行的格式来记录。

禁用二进制日志

不建议禁用!!!

默认情况下,MySQL启用了二进制日志(Binary Log),这是通过将系统变量log_bin设置为ON来实现的。二进制日志记录了数据库中的更新操作,如插入、更新和删除操作。

如果要禁用二进制日志,可以使用--skip-log-bin或--disable-log-bin选项。这两个选项的作用是相同的,它们会覆盖默认设置,使MySQL不再生成二进制日志。

需要注意的是,如果同时指定了--log-bin选项和禁用二进制日志的选项(--skip-log-bin或--disable-log-bin),后面指定的选项会优先生效。也就是说,如果在启动MySQL时同时指定了--log-bin和--skip-log-bin选项,那么二进制日志将被禁用。


操作二进制日志

对于二进制文件的操作,MySQL给我们提供了mysqlbinlog.exe程序。

具体的操作看http://t.csdnimg.cn/YFc9b 文章中的 mysqlbinlog 部分。

这边查看一下二进制内容

中继日志(Relay Log)

后续完成。

DDL日志(Metadata Log)

在MySQL8的文档中DDL只是提了一下。

而参考文档还是5.7版本的

DDL 日志总是在需要时自动创建,并且没有用户可配置的选项。所以这里就不在多介


回滚日志(Undo Log)

Undo日志记录了对数据库进行修改的操作的逆操作(即相反的操作),以便在事务回滚或数据库恢复时撤销对数据的修改。
当一个事务执行修改操作(例如插入、更新、删除)时,相关的旧数据会被存储到Undo日志中。
Undo日志对于实现数据库的一致性非常重要,因为它提供了回滚事务的能力,使得可以撤销未完成或出错的事务。
Undo日志通常使用多版本并发控制(MVCC)来支持并发事务,每个事务都有自己的undo日志。

后续详细讲解。

重做日志(Redo Log)

Redo日志记录了对数据库进行修改的操作,以便在数据库恢复时重新执行这些操作,保证数据的持久性。
当一个事务提交时,相关的修改操作会被记录到Redo日志中。
Redo日志对于数据库的可靠性和持久性非常重要,因为它可以确保在数据库崩溃或意外断电的情况下,将事务的已提交修改重新应用到数据库中,使得数据库能够完全恢复到最近一次正常关闭时的状态。
Redo日志通常采用顺序写入方式,以提高性能和减少I/O开销。

后续详细讲解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822169.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT:QT中的默认代码 QT 创建控件的两种方式

目录 QT中的默认代码 新项目的结构 主函数 wiget类的声明文件.h wiget类的定义文件.cpp form file界面文件 .pro文件 QT 创建控件的两种方式 通过ui界面创建控件 通过代码方式创建控件 QT中的默认代码 新项目的结构 主函数 基本概念:Qt 在创建的一个 Wi…

Allegro X PCB设计小诀窍--如何在Allegro X中为PCB标注尺寸

背景介绍:在PCB设计时,标注尺寸是非常重要的一步,PCB上标注的板框、孔径、倒角等尺寸信息可以辅助生产、组装和维护。Allegro X PCB设计工具提供了多种PCB标注方式,可以满足设计人员个性化的标注需求,提升PCB设计效率。…

SSM小区疫情防控系统-计算机毕业设计源码03748

摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 小区疫情防控系统,主要的模块包括查看首页、轮播图(轮播图管理)、社区公告管理(社区公告&#…

制造业几大系统(MES/WMS/QMS/ERP)的集成

制造业的几大系统包括MES(制造执行系统)、WMS(仓库管理系统)、QMS(质量管理系统)和ERP(企业资源计划)系统。这些系统在制造业中扮演着不同的角色,可以通过集成实现更高效…

【PLG洞察】|向Figma学习如何打造标杆客户和实施分销策略

Figma是一款功能强大的在线协同设计工具,它主要被用于界面设计、原型设计和用户体验设计。作为国外知名的saas企业,对标国内的saas蓝海,它的增长实在惊人!据称,Figma2020年的收入已达$75M, 2021年6月,美国的…

深入解析 Java 标准库:构建高效应用的基石

Java 标准库,也称为 Java API,是一组预先编写的类和接口,为 Java 应用程序提供了一系列丰富的功能。这些库被组织成包(packages),每个包都包含了一组相关的类和接口,用于处理特定的任务&#xf…

红黑树【C++实现】

文章目录 红黑树的概念红黑树的性质红黑树的操作红黑树结点的定义红黑树的插入情况一:插入结点的叔叔存在,且叔叔的颜色是红色情况二: 插入结点的叔叔存在,且叔叔的颜色是黑色情况三: 插入结点的叔叔不存在 红黑树的验证红黑树的查找 红黑树的…

香港裸机云多IP服务器与普通独享IP服务器的区别

在当前的云计算和服务器托管领域,香港裸机云多IP服务器和普通独享IP服务器是两种常见的选择。它们各自具有独特的特点和优势,适用于不同的应用场景。以下是对这两种服务器类型的详细比较: 一、概念定义 香港裸机云多IP服务器:这是…

ChromeOS 逐渐靠近安卓

ChromeOS 逐渐 “安卓化” 谷歌在博客中透露,将在ChromeOS底层更广泛地使用和Android相同的技术栈。一个具体的例子是,ChromeOS现在已经开始使用Android的蓝牙协议栈,取代了之前使用的自己的协议栈。这次改变不仅提高了蓝牙配对速度&#xf…

如何扩展自己的外部竞争力

前言 程序员是一个需要不断学习的职业,面对层出不穷的新技术,假如你不能够保持一个不断学习的热情。那么,在未来的就业市场中,可能优势会不太明显。那么,除了提高自己内部的技术竞争力外,有什么渠道可以提…

字节扣子搭建大模型擂台:匿名PK效果,用户当裁判,跑分时代要结束了

字节跳动的扣子(coze.cn),给国产大模型们组了个大局—— 在同一个“擂台”上,两个大模型为一组,直接以匿名的方式PK效果! 例如我们对两位参赛“选手”同时提问今年高考的题目: 阅读下面的材料&…

OpenGL3.3_C++_Windows(7)

演示 最终演示效果 ​​​​ 冯氏光照 光照原理:对于向量相乘默认为点乘,如果*lightColor(1.0f, 1.0f, 1.0f);白光,值不变物体的颜色显示原理:不被物体吸收的光反射,也就是由白光分解后的一部分,因此&…

基于精益生产理念的化工厂原料采购探讨

如何提升生产效率、降低成本、确保质量稳定,是每个化工企业都需面对的重要课题。而精益生产理念,以其高效、灵活和持续改进的特点,成为越来越多企业追求的管理目标。在化工厂原料采购环节,引入精益生产理念,不仅能够优…

Golang | Leetcode Golang题解之第148题排序链表

题目&#xff1a; 题解&#xff1a; func merge(head1, head2 *ListNode) *ListNode {dummyHead : &ListNode{}temp, temp1, temp2 : dummyHead, head1, head2for temp1 ! nil && temp2 ! nil {if temp1.Val < temp2.Val {temp.Next temp1temp1 temp1.Next} …

舵机是什么?舵机内部结构解析

什么是舵机呢&#xff1f;首先&#xff0c;“舵机”这个名号其实是一个俗称&#xff0c;是那些玩航模、船模的人起的名字&#xff0c;因为这种电机常被用于舵面控制。舵机其实就是一个简单的伺服电机系统&#xff0c;也是最常见的伺服电机系统。 舵机是一种位置&#xff08;角…

win10 双显卡,双显示器,VGA那个经常出现息屏(待机后无法唤醒),必须重启才能解决,(图文)手把手教你如何处理简单愉快的解决。

一、问题 双显示器&#xff08;双显卡&#xff0c;其中一个是HDMI&#xff0c;一个是VGA&#xff09;window系统&#xff08;本机win10&#xff09;&#xff0c;经常莫名出现&#xff0c;在待机或者主动息屏后&#xff0c;VGA显示器无法唤醒&#xff0c;依然黑屏&#xff0c;不…

Nginx+Tomcat负载均衡,动静分离群集

Nginx反向代理原理 Nginx 反向代理&#xff1a;将Nginx接收到的请求转发给其它应用服务器处理 Nginx 负载均衡&#xff1a;通过反向代理实现&#xff0c;还可以将nginx接收到的请求转发给多个后端应用服务器处理 Nginx 动静分离&#xff1a;静态页面请求&#xff0c;由nginx…

kettle实时增量同步mysql数据

** 本文主要介绍运用kettle实时增量同步mysql数据 ** Debezium介绍 官网地址&#xff1a;https://debezium.io/documentation/ Debezium是一个开源项目&#xff0c;为捕获数据更改(Capture Data Change,CDC)提供了一个低延迟的流式处理平台&#xff0c;通过安装配置Debeziu…

【学习笔记】centos7安装mysql相关事项

究极恶心的体验 依赖要按照顺序安装&#xff0c;有些依赖安装位置也不同 非常细节 mysql安装包&#xff1a;mysql官网下载地址 centos7选择Red Hat Enterprise Linux 7 / Oracle Linux 7 (x86, 64-bit), RPM Bundle 下载版本自选 安装视频教程&#xff1a;centos7.5安装mysql …

免费代理为什么不安全?

在数字时代&#xff0c;网络已经成为人们日常生活和商业活动中不可或缺的一部分。为了实现更广阔的业务拓展和更畅通的网络体验&#xff0c;许多人开始考虑使用代理服务器。然而&#xff0c;虽然免费代理可能听起来像是个经济实惠的选择&#xff0c;但事实上&#xff0c;它可能…