Mysql--日志(错误日志、二进制日志、查询日志、慢查询日志)

四种日志对比总结

日志类型作用记录内容特点常见用途
错误日志记录 MySQL 运行过程中的错误、警告及启动、关闭信息MySQL 系统错误、故障信息、警告等较少占用磁盘空间故障排查、系统监控
二进制日志记录所有更改数据库数据的操作及事务执行情况DML、DDL 操作,不记录查询(SELECT)语句支持数据恢复、主从复制数据恢复、增量备份、主从同步
查询日志记录所有客户端发送到服务器的 SQL 请求所有 SQL 语句,包括 SELECT、INSERT、UPDATE 等文件体积大,不建议长期开启SQL 调试、用户活动跟踪
慢查询日志记录执行时间超过设定阈值的 SQL 语句仅记录慢 SQL 语句较少占用磁盘空间,可帮助性能调优数据库性能优化

介绍:

MySQL 的这四种日志各司其职:

  • 错误日志 用于系统级错误排查;
  • 二进制日志 主要用于数据恢复、主从复制;
  • 查询日志 记录所有 SQL 语句,适用于调试和审计;
  • 慢查询日志 则专注于数据库性能优化。

1. 错误日志(Error Log)

作用:

记录 MySQL 服务器运行过程中出现的错误、警告、启动与关闭信息
主要用于故障排查和系统监控

特点:

  • 包含 MySQL 启动、停止过程中发生的错误。
  • 记录系统级错误(如磁盘空间不足)和 MySQL 内部错误。
  • 记录服务器的启动时间、停止时间以及出现的严重错误。

日志文件位置:

可以通过以下命令查看错误日志位置:

SHOW VARIABLES LIKE 'log_error';

在这里插入图片描述

默认情况下,错误日志文件名称可能为 hostname.err,存放在 MySQL 数据目录中。

相关配置:

修改配置文件 my.cnf,指定错误日志的路径:

[mysqld]
log_error = /var/log/mysql/mysql-error.log

2. 二进制日志(Binary Log,Binlog)

作用:

记录所有更改数据库数据的操作(如 DML、DDL 操作),以及可能引发数据库变更的事务提交等信息。
主要用于:

  • 数据恢复:通过 Binlog 恢复误删除或误修改的数据。
  • 主从复制:主服务器将二进制日志传输到从服务器,实现主从同步。
  • 审计:用于跟踪和分析谁在什么时间更改了数据库中的哪些数据。

特点:

  • 不记录 SELECT 这类仅查询数据的语句。
  • 记录事务的开始、提交和具体操作。
  • 二进制日志是增量日志,可以配合备份日志进行增量恢复。

日志文件位置:

可以通过以下命令查看二进制日志文件名和存储位置:

SHOW VARIABLES LIKE 'log_bin';

在这里插入图片描述在这里插入图片描述

相关配置:

修改 my.cnf 文件启用二进制日志:

[mysqld]
log_bin = /var/log/mysql/mysql-bin.log

二进制日志格式

在这里插入图片描述
默认格式为 row
在这里插入图片描述

#可以使用mysqlbinlog命令查看二进制文件

补充

当 MySQL 的二进制日志文件编号达到最大值(999999)时,MySQL 会停止创建新的二进制日志文件并报错。这可能导致数据备份中断、主从复制故障等问题。

解决办法:

  • 使用自动清理功能(如 expire_logs_daysbinlog_expire_logs_seconds)来删除旧日志文件。
  • 手动删除旧日志,或在必要时重置日志编号,从而避免编号耗尽的情况。

当文件编号达到上限时(编号耗尽的情况)

  • 最大文件编号:
    MySQL 使用 6 位编号 管理二进制日志文件,编号范围是从 000001999999。当文件编号递增到上限 999999 后,MySQL 无法再创建新的二进制日志文件,会导致以下几种行为或错误:

    1)MySQL 服务器停止写入二进制日志
    • 如果二进制日志的编号到达上限(即 binlog.999999 已存在),MySQL 无法创建新的日志文件
    • 错误日志 中会出现如下报错:
      [ERROR] Error: binlog file number exceeds the max limit 999999.
      
      此时,MySQL 停止二进制日志功能,并且主从复制、恢复等基于二进制日志的功能可能会失效。
    2)导致主从复制故障(如果启用了复制)
    • 在主从复制场景中,如果主库停止写入二进制日志,将导致从库无法获取新的二进制日志,从而导致复制中断。
      这可能引发 数据不一致 问题。

解决办法–详细

为了避免二进制日志编号耗尽的问题,可以采取以下措施:

方法 1:手动清理旧的二进制日志文件
  • 命令:

    PURGE BINARY LOGS TO 'binlog.000100';
    
    • 这将删除 binlog.000001binlog.000099 的二进制日志文件,释放文件编号。
  • 自动清理(推荐):
    在 MySQL 配置文件中设置自动清理机制:

    [mysqld]`
    expire_logs_days = 7  # 自动删除 7 天前的二进制日志文件
    

    或者:

    binlog_expire_logs_seconds = 604800  # 设置日志自动清理时间为 7 天(MySQL 8.0+)
    
方法 2:重置二进制日志编号

如果二进制日志文件编号接近上限,可以重置日志编号,方法如下:

  1. 停止 MySQL 服务:
    systemctl stop mysql
    
  2. 删除旧的二进制日志文件(谨慎操作,确保数据安全):
    rm -f /var/lib/mysql/binlog.*
    
  3. 启动 MySQL 服务:
    systemctl start mysql
    
  4. 重新启动二进制日志:
    FLUSH LOGS;
    
    这将重新生成新的二进制日志文件,从编号 000001 开始。
方法 3:调整存储配置
  • 分片存储: 将日志分散到不同目录或磁盘。
  • 分布式复制管理: 在多主复制架构中分担负载。

3. 查询日志(General Query Log)

作用:

记录 MySQL 服务器收到的所有 SQL 请求(包括查询语句和数据操作语句),以及客户端连接、断开等操作。

特点:

查询日志默认是关闭的

  • 记录 SQL 语句执行过程中的所有细节,包括 SELECT、INSERT、UPDATE、DELETE 等。
  • 通用日志通常用于调试和分析,但因为记录所有 SQL 语句,会占用较多磁盘空间,所以不建议长期开启。

日志文件位置:

可以通过以下命令查看查询日志是否开启及文件路径:

SHOW VARIABLES LIKE 'general_log%';

在这里插入图片描述

相关配置:

修改 my.cnf 文件开启查询日志:

[mysqld]
general_log = 1
general_log_file = /var/log/mysql/mysql-query.log

配置后发现general_log 的value为改为ON并且mysql-general.log成功产生日志

成功开启


4. 慢查询日志(Slow Query Log)

作用:

记录执行时间超过指定阈值(默认 10 秒)的 SQL 语句,主要用于优化数据库性能

特点:

  • 仅记录执行时间较长的 SQL 语句,帮助分析和优化数据库的性能瓶颈。
  • 可以用来发现导致系统变慢的低效 SQL。

日志文件位置:

可以通过以下命令查看慢查询日志设置:

SHOW VARIABLES LIKE 'slow_query_log%';

慢查询日志默认是关闭
在这里插入图片描述

相关配置:

修改 my.cnf 文件,开启慢查询日志并设置阈值:

[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 5  # 设置执行时间超过 5 秒的语句记录到日志

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI对软件工程(software engineering)的影响在哪些方面?

AI对软件工程(software engineering)的影响是全方位且深远的,它不仅改变了传统开发流程,还重新定义了工程师的角色和软件系统的构建方式。以下是AI影响软件工程的核心维度: 一、开发流程的智能化重构 需求工程革命 • …

ElementPlus 快速入门

目录 前言 为什么要学习 ElementPlus? 正文 步骤 1 创建 一个工程化的vue 项目 ​2 安装 element-Plus :Form 表单 | Element Plus 1 点击 当前界面的指南 2 点击左边菜单栏上的安装,选择包管理器 3 运行该命令 demo(案例1 ) 步骤 …

stable diffusion本地安装

1. 基本环境准备 安装conda 环境 pytorch基础学习-CSDN博客 创建虚拟环境: conda create -n sd python3.10 一定要指定用3.10,过高的版本会提示错误: 激活启用环境: conda activate sd 设置pip国内镜像源: pip conf…

使用 Go 构建 MCP Server

一个互联网技术玩家,一个爱聊技术的家伙。在工作和学习中不断思考,把这些思考总结出来,并分享,和大家一起交流进步。 一、MCP 介绍 1. 基本介绍 MCP(Model Context Protocol,模型上下文协议)是…

Python----计算机视觉处理(Opencv:模板匹配)

一、 概念 模板匹配就是用模板图(通常是一个小图)在目标图像(通常是一个比模板图大的图片)中不断的滑动 比较,通过某种比较方法来判断是否匹配成功。 二、应用场景 1. 目标检测与识别:在计算机视觉领域&am…

【stm32】用从模式控制器 完成PWM的测量

🌞学习视频还是来自于 铁头山羊 🌿主要是回顾一下他讲的这一章的定时器的部分,具体的话 还是看一下具体铁头山羊的视频,讲的很清楚~~ 整体流程是这样的,首先通过定时器的输出比较功能,配置好PA6产生一个特定…

【C#】CS学习之Modbus通讯

摘要 本文详细描述了如何在在C#的Winform应用程序中使用NModbus库实现Modbus通讯,包括读取保持寄存器、以及相应的UI界面设计和事件处理。 前言 ​应用场景 Modbus 从站广泛应用于工业自动化领域: 1、传感器数据采集(如温度、压力等&#xf…

Pycharm社区版创建Flask项目详解

一、创建工程项目 二、配置工程目录 新建的空项目下创建目录。 1、新建app.py文件 2、app.py代码如下: from flask import Flask, render_templateapp Flask(__name__)app.route("/") def root():"""主页:return: Index.html"&qu…

Linux 基础入门操作 第十二章 TINY Web 服务器

1 服务器基础架构 1.1 背景知识 Web 服务器使用 HTTP 协议与客户端(即浏览器)通信,而 HTTP 协议又基于 TCP/IP 协议。因此我们要做的工作就是利用 Linux 系统提供的 TCP 通信接口来实现 HTTP 协议。 而 Linux 为我们提供了哪些网络编程接口…

RAG优化:python从零实现[吃一堑长一智]循环反馈Feedback

本文将介绍一种有反馈循环机制的RAG系统,让当AI学会"吃一堑长一智",给传统RAG装了个"后悔"系统,让AI能记住哪些回答被用户点赞/拍砖,从此告别金鱼记忆: 每次回答都像在玩roguelike:失败结局会强化下次冒险悄悄把优质问答变成新知识卡牌,实现"以…

基于SpringBoot的名著阅读网站

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…

[AI建模] 使用Pinokio本地化部署混元2D到3D AI建模服务

近年来,AI驱动的2D转3D建模技术发展迅猛,而Pinokio作为一个强大的AI模型管理与部署平台,使得在本地部署这些复杂的AI模型变得更加简单高效。本文将介绍如何使用Pinokio在本地部署混元2D到3D AI建模服务,并快速生成带或不带Texture的3D模型。 1. 在Pinokio Discover页面找到…

Qt 导入TagLib库

文章目录 0. 前言和环境介绍1. 下载TagLib2. 下载zlib3. 修改.pro文件4. 测试代码 0. 前言和环境介绍 最近在使用Qt写一个播放器,需要解析mp3文件,于是研究了一下如何导入TagLib库 Qt构建套件:Desktop Qt6.8.2 MinGW64-bit Qt Creator安装目录: D:\bit…

【前端面试题】计算机网络相关

总结面试前端过程可能会问到的计算机网络相关知识点 1.HTTP和HTTPS的区别 (1)HTTPS HTTP 安全加密 HTTPS 是 HTTP 的 加密版,通过 SSL/TLS 保障数据安全,防止窃听和篡改。 (2)HTTPS 如何保护数据&…

【RabbitMQ高级特性】消息确认机制、持久化、发送方确认、TTL和死信队列

🔥个人主页: 中草药 🔥专栏:【中间件】企业级中间件剖析 一、消息确认机制 消费者确认机制确保消息被正确处理后才从队列中删除。如果消费者处理失败(如业务异常或宕机),Broker 会重新投递消息…

调用百度api实现语音识别(python)

该代码实现了一个企业级的语音识别解决方案,通过调用百度语音识别API,实现实时录音识别和对已有音频语音识别功能。 百度智能云:请自行访问百度智能云,开通免费的语音识别功能,获取API_KEY和SECRET_KEY。操作按照百度流程即可,可免费申请。 首先,配置下百度API和描述下错…

Python实现小红书app版爬虫

简介:由于数据需求的日益增大,小红书网页版已经不能满足我们日常工作的需求,为此,小编特地开发了小红书手机版算法,方便大家获取更多的数据,提升工作效率。 手机版接口主要包括:搜素&#xff0…

【AndroidRTC-11】如何理解webrtc的Source、TrackSink

Android-RTC系列软重启,改变以往细读源代码的方式 改为 带上实际问题分析代码。增加实用性,方便形成肌肉记忆。同时不分种类、不分难易程度,在线征集问题切入点。 问题1:如何理解VideoSource、VideoTrack&VideoSink三者的关系…

Windows安装Rust环境(详细教程)

一、 安装mingw64(C语言环境) Rust默认使用的C语言依赖Visual Studio,但该工具占用空间大安装也较为麻烦,可以选用轻便的mingw64包。 1.1 安装地址 (1) 下载地址1-GitHub:Releases niXman/mingw-builds-binaries GitHub (2) 下载地址2-W…

英伟达黄仁勋谈人工智能趋势,首提代理式AI,后续机器人将登场

近日,英伟达 GTC 2025 大会主题演讲中,英伟达 CEO 黄仁勋再次身穿皮衣登场。黄仁勋一上来就提到了 AI 发展的未来,现在我们处于生成式 AI(Generative AI)阶段,但根据黄仁勋的路线图,我们将迈向一…