Mysql--运维篇--日志管理(连接层,SQL层,存储引擎层,文件存储层)

news2025/1/12 12:01:35

MySQL提供了多种日志类型,用于记录不同的活动和事件。这些日志对于数据库的管理、故障排除、性能优化和安全审计非常重要。

一、错误日志 (Error Log)

作用:
记录MySQL服务器启动、运行和停止期间遇到的问题和错误信息。

查看:

  • 默认情况下,错误日志的位置可以通过show variables like ‘log_error’;命令来查看。
  • 或者直接在配置文件(通常是my.cnf或my.ini)中查找log_error变量的值。

示例:

show variables like 'log_error';

运行结果:
在这里插入图片描述
找到路径,打开文件:
在这里插入图片描述

二、查询日志 (General Query Log)

作用:
记录所有发送到服务器的SQL语句,包括查询、更新等操作。它可以帮助你了解用户执行了哪些操作,但开启后会影响性能,因此通常只在调试时使用。

查看:

  • 可以通过SHOW VARIABLES LIKE ‘general_log%’;来查看是否启用了查询日志以及它的位置。
  • 使用SET GLOBAL general_log = ‘ON’;启用查询日志,SET GLOBAL general_log = ‘OFF’;禁用。
  • 日志内容可以实时查看,例如tail -f /path/to/mysql.log。

示例:

SHOW VARIABLES LIKE 'general_log%';

运行结果:
在这里插入图片描述

三、慢查询日志 (Slow Query Log)

作用:
记录那些执行时间超过指定阈值的SQL查询。这对于识别和优化性能瓶颈非常有用。

查看:

  • 使用SHOW VARIABLES LIKE ‘slow_query_log%’;来检查慢查询日志的状态和位置。
  • SET GLOBAL slow_query_log = ‘ON’;启用慢查询日志,SET GLOBAL slow_query_log = ‘OFF’;禁用。
  • 你可以设置long_query_time变量来定义“慢”的标准,默认是10秒,但是可以通过SET GLOBAL long_query_time = N;调整,其中N是你想要的时间秒数。
  • 还可以利用mysqldumpslow工具或者第三方工具如pt-query-digest来分析慢查询日志。

示例:

SHOW VARIABLES LIKE 'slow_query_log%';

运行结果:
在这里插入图片描述

四、二进制日志 (Binary Log, Binlog)

作用:
记录所有对数据库结构或数据进行更改的操作(DDL和DML),比如INSERT、UPDATE、DELETE等。主要用于复制(Replication)、恢复(Recovery)和审计(Audit)。

查看:

  • 使用SHOW BINARY LOGS;列出所有的二进制日志文件。
  • 使用SHOW MASTER STATUS;查看当前正在使用的二进制日志文件。
  • 使用mysqlbinlog工具读取和解析二进制日志的内容,例如mysqlbinlog /path/to/binlog-file。

示例:

SHOW BINARY LOGS;

运行结果:
在这里插入图片描述

五、中继日志 (Relay Log)

作用:
在主从复制环境中,从库会将主库的二进制日志中的事件复制到自己的中继日志中,然后再应用这些事件。这使得从库能够与主库保持同步。

查看:

  • 使用SHOW SLAVE STATUS;可以查看有关从库状态的信息,包括中继日志的文件名和位置。
  • 类似于二进制日志,可以使用mysqlbinlog工具来查看中继日志的内容。

六、重做日志 (InnoDB Redo Log)

1、概述

重做日志是InnoDB用于确保事务持久性的关键组件。它记录了所有对数据页的物理修改操作,确保在系统崩溃后可以重新应用这些修改,恢复数据的一致性。

特点:

  • 位置:重做日志文件通常位于ib_logfile0和ib_logfile1中。
  • Redo日志不是文本格式的日志,不能直接查看其内容。
  • 大小:每个重做日志文件的大小由innodb_log_file_size参数控制,默认值为48MB。
  • 数量:可以通过innodb_log_files_in_group参数指定重做日志文件的数量,默认为2。

2、工作原理

(1)、记录修改:每当对数据页进行修改时,InnoDB会先将修改操作记录到重做日志中。重做日志记录的是物理修改,而不是逻辑操作。
(2)、循环写入:重做日志采用循环写入的方式。当一个日志文件写满后,InnoDB会切换到下一个日志文件继续写入。所有日志文件写满后,InnoDB会回到第一个日志文件,覆盖旧的日志记录。
(3)、检查点(Checkpoint):为了防止重做日志被无限期地循环覆盖,InnoDB使用检查点机制。检查点是指重做日志的某个位置,所有在此之前修改的数据页都必须已经刷新到磁盘。通过这种方式,InnoDB可以确保在系统崩溃后能够从检查点开始恢复数据。
(4)、崩溃恢复:在系统崩溃后,InnoDB会在启动时读取重做日志,重新应用未完成的事务,恢复数据的一致性。这个过程称为前滚恢复(Roll Forward Recovery)。

3、配置参数

innodb_log_file_size:

  • 功能:设置每个重做日志文件的大小。
  • 推荐值:建议根据工作负载调整。对于高并发写入场景,可以适当增大该值,以减少日志切换的频率。默认值为48MB。

innodb_log_files_in_group:

  • 功能:设置重做日志文件的数量。
  • 推荐值:默认为2,通常不需要调整。如果需要更大的日志空间,建议增加单个日志文件的大小,而不是增加日志文件的数量。

innodb_flush_log_at_trx_commit:

  • 功能:控制事务提交时是否立即刷新重做日志到磁盘。
  • 取值:
    • 0:不刷新重做日志,性能最好,但安全性最低。如果系统崩溃,可能会丢失最近的事务。
    • 1(默认):每次事务提交时都刷新重做日志到磁盘,确保数据的安全性,但性能稍差。
    • 2:每次事务提交时将重做日志写入操作系统缓存,但不立即刷新到磁盘。适合追求性能的场景,但在系统崩溃时可能会丢失最近的事务。

innodb_log_buffer_size:

  • 功能:设置重做日志缓冲区的大小。重做日志缓冲区用于暂存尚未写入磁盘的重做日志记录。
  • 推荐值:默认为8MB,可以根据工作负载适当调整。较大的缓冲区可以减少磁盘I/O次数,提升写性能。

4、优化建议

  • 增大innodb_log_file_size:对于高并发写入场景,建议增大重做日志文件的大小,以减少日志切换的频率。较大的日志文件可以容纳更多的事务,减少磁盘I/O次数。
  • 调整innodb_flush_log_at_trx_commit:根据应用场景选择合适的值。如果你的应用对数据安全要求较高,建议保持默认值1;如果你的应用对性能要求较高,且可以容忍少量数据丢失,可以选择2或0。
  • 使用O_DIRECT刷新方法:通过innodb_flush_method = O_DIRECT配置,绕过操作系统的缓存,直接将重做日志写入磁盘,减少双重缓存问题,提升性能。

七、回滚日志 (InnoDB Undo Log)

1、概述

回滚日志是InnoDB用于实现事务的回滚和多版本并发控制(MVCC)的关键组件。它记录了事务的旧版本数据,确保未提交的事务不会影响数据库的状态,并支持多个事务同时读取不同的数据版本。
作用:Undo日志保存了旧版本的数据,以便在需要时回滚事务或提供多版本并发控制(MVCC)。这对于保证事务的ACID特性至关重要。

特点:

  • 位置:回滚段存储在系统UNDO表空间中,通常是ibdata1文件的一部分。
  • 和Redo日志一样,Undo日志也不是以文本形式存储的,所以不能直接查看。
  • 类型:
  • 插入回滚段:用于记录插入操作的旧版本数据。
  • 更新回滚段:用于记录更新操作的旧版本数据。

2、工作原理

(1)、记录旧版本数据:每当对数据进行插入、更新或删除操作时,InnoDB会将旧版本数据记录到回滚日志中。这些旧版本数据用于实现事务的回滚和多版本并发控制(MVCC)。
(2)、事务回滚:如果事务未提交或发生错误,InnoDB可以根据回滚段中的旧版本数据,将数据恢复到事务开始时的状态。
(3)、多版本并发控制(MVCC):InnoDB使用回滚段来支持多版本并发控制。当多个事务同时读取同一行数据时,InnoDB会根据事务的隔离级别返回合适的数据版本。例如,在读已提交(Read Committed)隔离级别下,事务只能看到已经提交的数据;而在可重复读(Repeatable Read)隔离级别下,事务在整个生命周期内都能看到相同的数据版本。
(4)、清理旧版本数据:当事务提交后,回滚段中的旧版本数据不再需要,InnoDB会定期清理这些数据,释放空间。

3、配置参数

innodb_undo_tablespaces:

  • 功能:设置独立的回滚表空间的数量。启用该参数后,回滚段将存储在独立的.ibd文件中,而不是系统表空间中。(表空间中包含三种类型:数据,索引,回滚段)
  • 推荐值:默认为0,表示回滚段存储在系统表空间中。如果你有大量长时间运行的事务,建议启用独立的回滚表空间,以减少系统表空间的碎片化问题。

innodb_undo_log_truncate:

  • 功能:控制是否定期截断回滚段。启用该参数后,InnoDB会定期清理不再需要的回滚段,释放空间。
  • 推荐值:默认为OFF,建议在生产环境中启用该参数,以减少回滚段的占用空间。

innodb_max_undo_log_size:

  • 功能:设置回滚段的最大大小。当回滚段超过该大小时,InnoDB会自动截断回滚段,释放空间。
  • 推荐值:默认为1GB,可以根据工作负载适当调整。

4、优化建议

  • 启用独立回滚表空间:如果你有大量长时间运行的事务,建议启用独立的回滚表空间,以减少系统表空间的碎片化问题。独立的回滚表空间可以更好地管理和优化回滚段的存储。
  • 定期截断回滚段:启用innodb_undo_log_truncate参数,定期清理不再需要的回滚段,释放空间。这有助于减少回滚段的占用空间,提升性能。
  • 调整回滚段大小:根据工作负载调整innodb_max_undo_log_size参数,确保回滚段不会占用过多的空间。对于大事务或长事务较多的场景,可以适当增大该值。

八、审计日志 (Audit Log)

作用:
记录用户的登录尝试、权限变更和其他安全相关的活动。并不是所有版本的MySQL都自带审计日志功能,某些企业版可能包含这个特性,或者可以通过插件实现。

查看:

  • 如果安装了审计插件,可以通过特定的命令或API来访问审计日志。
  • 具体的查看方法取决于所使用的插件或解决方案。

乘风破浪会有时,直挂云帆济沧海!!!

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

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

相关文章

【2025 Rust学习 --- 13 闭包:Rust的Lambda】

Rust的Lambda — 闭包 对整型向量进行排序很容易: integers.sort(); 遗憾的是,当我们想对一些数据进行排序时,它们几乎从来都不是整型向量。例 如,对某种记录型数据来说,内置的 sort 方法一般不适用: st…

鸿蒙面试 2025-01-09

鸿蒙分布式理念?(个人认为理解就好) 鸿蒙操作系统的分布式理念主要体现在其独特的“流转”能力和相关的分布式操作上。在鸿蒙系统中,“流转”是指涉多端的分布式操作,它打破了设备之间的界限,实现了多设备…

一个基于Spring Boot的智慧养老平台

以下是一个基于Spring Boot的智慧养老平台的案例代码。这个平台包括老人信息管理、健康监测、紧急呼叫、服务预约等功能。代码结构清晰,适合初学者学习和参考。 1. 项目结构 src/main/java/com/example/smartelderlycare├── controller│ ├── ElderlyCon…

Taro+react 开发第一节创建 带有redux状态管理的项目

Taro 项目基于 node,请确保已具备较新的 node 环境(>16.20.0),推荐使用 node 版本管理工具 nvm 来管理 node,这样不仅可以很方便地切换 node 版本,而且全局安装时候也不用加 sudo 了。 1.安装 npm inf…

云商城--基础数据处理和分布式文件存储

第2章 基础数据处理和分布式文件存储 1.分布式文件存储系统Ceph学习 ​ 1).掌握Ceph架构 ​ 2).掌握Ceph组件 ​ 3).搭建Ceph集群(了解) 2.Ceph使用 ​ 1).基于Ceph实现文件上传 ​ 2).基于Ceph实现文件下载 3.SKU、SPU管理 ​ 1).掌握SKU和SPU关系 ​ 2).理解商品发…

Vue.js:现代前端开发的灵活框架

大家好!我是 [数擎 AI],一位热爱探索新技术的前端开发者,在这里分享前端和 Web3D、AI 技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步! 开发领域:前端开发 | A…

初学者关于对机器学习的理解

一、机器学习: 1、概念:是指从有限的观测数据中学习(或“猜 测”)出具有一般性的规律,并利用这些规律对未知数据进行预测的方法.机器学 习是人工智能的一个重要分支,并逐渐成为推动人工智能发展的关键因素。 2、使用机器学习模型…

小程序textarea组件键盘弹起会遮挡住输入框

<textarea value"{{remark}}" input"handleInputRemark" ></textarea> 如下会有遮挡&#xff1a; 一行代码搞定 cursor-spacing160 修改后代码 <textarea value"{{remark}}" input"handleInputRemark" cursor-spacin…

树的模拟实现

一.链式前向星 所谓链式前向星&#xff0c;就是用链表的方式实现树。其中的链表是用数组模拟实现的链表。 首先我们需要创建一个足够大的数组h&#xff0c;作为所有结点的哨兵位。创建两个足够大的数组e和ne&#xff0c;一个作为数据域&#xff0c;一个作为指针域。创建一个变…

通过氧化最小化工艺提高SiC MOSFET迁移率的深入分析

标题 Insight Into Mobility Improvement by the Oxidation-Minimizing Process in SiC MOSFETs&#xff08;TED2024&#xff09; 文章的研究内容 文章的研究内容主要围绕氧化最小化工艺&#xff08;oxidation-minimizing process&#xff09;对碳化硅&#xff08;SiC&…

相机和激光雷达的外参标定 - 无标定板版本

1. 实现的效果 通过本软件实现求解相机和LiDAR的外参&#xff0c;即2个传感器之间的三维平移[x, y, z]和三维旋转[roll, pitch, yaw]。完成标定后&#xff0c;可将点云投影到图像&#xff0c;效果图如下&#xff1a; 本软件的优势&#xff1a;&#xff08;1&#xff09;无需特…

git问题

拉取项目代码后&#xff0c;出现 1、找回未commit的代码 2、记录不全&#xff0c;只是显示部分代码记录

Spring bean的生命周期和扩展

接AnnotationConfigApplicationContext流程看实例化的beanPostProcessor-CSDN博客&#xff0c;以具体实例看bean生命周期的一些执行阶段 bean生命周期流程 生命周期扩展处理说明实例化:createBeanInstance 构造方法&#xff0c; 如Autowired的构造方法注入依赖bean 如UserSer…

来自通义万相的创意加速器:AI 绘画创作

来自通义万相的创意加速器&#xff1a;AI 绘画创作 通义万相动手搭建“通义万相”部署方案资源准备对象存储OSS&#xff08;手动部署&#xff09;DashScope 模型服务灵积云服务器ECS&#xff08;手动部署&#xff09;一键部署ROS Web文生图艺术与设计创作广告与营销物料生成教育…

STM32F4分别驱动SN65HVD230和TJA1050进行CAN通信

目录 一、CAN、SN65HVD230DR二、TJA10501、TJA1050 特性2、TJA1050 引脚说明 三、硬件设计1、接线说明2、TJA1050 模块3、SN65HVD230 模块 四、程序设计1、CAN_Init&#xff1a;CAN 外设初始化函数2、CAN_Send_Msg、CAN_Receive_Msg 五、功能展示1、接线图2、CAN 数据收发测试 …

Elasticsearch:在 HNSW 中提前终止以实现更快的近似 KNN 搜索

作者&#xff1a;来自 Elastic Tommaso Teofili 了解如何使用智能提前终止策略让 HNSW 加快 KNN 搜索速度。 在高维空间中高效地找到最近邻的挑战是向量搜索中最重要的挑战之一&#xff0c;特别是当数据集规模增长时。正如我们之前的博客文章中所讨论的&#xff0c;当数据集规模…

时空笔记:CBEngine(微观交通模拟引擎)

CBEngine 是一个微观交通模拟引擎&#xff0c;可以支持城市规模的道路网络交通模拟。CBEngine 能够快速模拟拥有数千个交叉路口和数十万辆车辆的道路网络交通。 以下内容基本翻译自CBEngine — CBLab 1.0.0 documentation 1 模拟演示 1.0 模拟演示结构 config.cfg 定义了 roa…

Notepad++上NppFTP插件的安装和使用教程

一、NppFTP插件下载 图示是已经安装好了插件。 在搜索框里面搜NppFTP&#xff0c;一般情况下&#xff0c;自带的下载地址容易下载失败。这里准备了一个下载连接&#xff1a;Release v0.29.10 ashkulz/NppFTP GitHub 这里我下载的是x86版本 下载好后在nodepad的插件里面选择打…

基于华为ENSP的OSPF不规则区域划分深入浅出(5)

本篇技术博文摘要 &#x1f31f; OSPF不规则区域划分及其问题解决方案涉及多个技术手段&#xff0c;包括隧道、虚链路和路由重发布等。合理的网络设计和配置对于避免网络中出现的环路问题至关重要。通过多进程双向重发布等方式&#xff0c;能够有效地优化路由协议的互通性和网络…

微信小程序——创建滑动颜色条

在微信小程序中&#xff0c;你可以使用 slider 组件来创建一个颜色滑动条。以下是一个简单的示例&#xff0c;展示了如何实现一个颜色滑动条&#xff0c;该滑动条会根据滑动位置改变背景颜色。 步骤一&#xff1a;创建小程序项目 首先&#xff0c;使用微信开发者工具创建一个新…