MySQL六大日志的功能介绍。
前言
首先,MySQL的日志应该包括二进制日志(Binary Log)、错误日志(Error Log)、查询日志(General Query Log)、慢查询日志(Slow Query Log)、重做日志(Redo Log)和回滚日志(Undo Log)。不过我不确定是否这六个是正确的,或者有没有遗漏或者不同的分类方式。
-
二进制日志(Binary Log):这个我记得是用来记录所有对数据库的更改操作的,比如INSERT、UPDATE、DELETE等,主要用于主从复制(Replication)和某些数据恢复场景。二进制日志是逻辑日志,记录的是SQL语句或者行的变更。不过具体细节可能要看不同的格式设置,比如statement、row或者mixed模式。
-
错误日志(Error Log):这个应该记录MySQL运行过程中出现的错误信息,比如启动、关闭过程中的问题,或者运行时的严重错误。比如当MySQL无法启动时,查看错误日志就能找到原因。
-
查询日志(General Query Log):这个日志会记录所有的客户端连接和执行的SQL语句,不管是SELECT还是其他操作。不过开启这个日志可能会对性能有影响,因为所有查询都会被记录,所以在生产环境中可能不会一直开启。
-
慢查询日志(Slow Query Log):这个记录执行时间超过设定阈值的查询,以及可能没有使用索引的查询。这个日志对优化数据库性能很有帮助,可以通过分析慢查询日志找到需要优化的SQL语句。
-
重做日志(Redo Log):这个是InnoDB存储引擎特有的日志,用于事务的持久性。当发生系统崩溃时,可以通过重做日志来恢复未写入数据文件的事务操作。重做日志是物理日志,记录的是数据页的修改。
-
回滚日志(Undo Log):同样属于InnoDB,用于事务的回滚和MVCC(多版本并发控制)。当事务需要回滚时,Undo Log可以恢复到事务开始前的状态。同时,在MVCC中,其他事务可能需要读取旧版本的数据,这时Undo Log提供了所需的历史版本。
-
二进制日志:记录所有数据变更操作,用于主从复制和数据恢复。可以用于时间点恢复(PITR),将数据库恢复到某个特定时间点的状态。此外,二进制日志还支持多种格式,比如基于语句(statement)、基于行(row)或者混合模式(mixed)。
-
错误日志:记录MySQL服务启动、运行、停止时的错误信息,警告信息,或者其他诊断信息。比如,当数据库无法启动时,查看错误日志可以找到具体的错误原因,如配置错误、端口被占用等。
-
查询日志:记录所有连接到MySQL服务器的客户端请求和执行的SQL语句。这个日志对于审计和调试非常有用,但因为记录所有操作,可能会占用大量磁盘空间,影响性能,所以通常只在需要调试的时候开启。
-
慢查询日志:记录执行时间超过long_query_time参数设置的阈值,或者没有使用索引的查询语句。帮助DBA优化数据库性能,通过分析这些慢查询,可以找出需要优化的SQL语句或者索引缺失的情况。
-
重做日志(Redo Log):InnoDB引擎使用,保证事务的持久性。在事务提交时,先将变更写入重做日志,然后再慢慢刷新到磁盘的数据文件中。当系统崩溃时,通过重做日志可以恢复那些已经提交但尚未写入数据文件的事务,确保数据不丢失。重做日志是循环写入的,有固定的大小。
-
回滚日志(Undo Log):同样由InnoDB引擎管理,用于事务回滚和MVCC。当事务需要回滚时,利用Undo Log中的信息撤销已经执行的操作。此外,在并发事务中,当其他事务需要读取数据的历史版本时,Undo Log提供旧版本的数据,从而实现一致性读。
不过,有没有可能混淆了重做日志和二进制日志?比如,二进制日志是服务器层的,而重做日志是存储引擎层的。它们的用途不同,二进制日志用于复制和恢复,而重做日志用于崩溃恢复。
另外,事务的ACID特性中,持久性(Durability)是通过重做日志来保证的,原子性(Atomicity)是通过回滚日志实现的。隔离性(Isolation)则通过锁和MVCC来实现,其中MVCC又依赖Undo Log,通常情况下,日志之间是相互作用的,以保证数据库的并发数据的可靠性问题。
所以,这六大日志各自在数据库的不同方面发挥作用,比如数据恢复、性能优化、错误诊断、事务处理等。理解每个日志的作用,有助于在运维和开发过程中更好地利用这些日志解决问题。
MySQL的六大日志在数据库的运行、维护和优化中扮演着关键角色。以下是它们的详细功能介绍:
1. 二进制日志(Binary Log)
- 功能:
- 主从复制:记录所有对数据库的更改操作(如INSERT、UPDATE、DELETE),从库通过重放这些操作实现数据同步。
- 数据恢复:支持时间点恢复(PITR),可将数据库恢复到特定时间点的状态。
- 审计:追踪数据变更历史,用于安全审计。
- 日志格式:
- Statement-Based:记录SQL语句(节省空间,但可能因函数调用导致主从不一致)。
- Row-Based:记录行级别的变更(安全,但日志量大)。
- Mixed:混合模式,自动选择最优方式。
- 配置参数:
[mysqld] log_bin = /var/lib/mysql/mysql-bin # 启用二进制日志 binlog_format = ROW # 设置日志格式
2. 错误日志(Error Log)
- 功能:
- 错误诊断:记录MySQL启动、运行、关闭过程中的错误和警告信息。
- 运维监控:帮助快速定位服务异常(如权限问题、端口冲突、存储引擎崩溃等)。
- 默认路径:
- Linux:
/var/log/mysql/error.log - Windows:
C:\ProgramData\MySQL\MySQL Server 8.0\Data\<hostname>.err
- Linux:
- 配置参数:
[mysqld] log_error = /var/log/mysql/error.log # 指定错误日志路径
3. 查询日志(General Query Log)
- 功能:
- 全量SQL记录:记录所有客户端连接和执行的SQL语句(包括SELECT、CONNECT等)。
- 调试与审计:用于分析应用行为或排查异常请求。
- 注意:开启后可能显著增加磁盘I/O和空间占用。
- 配置参数:
[mysqld] general_log = ON # 启用查询日志 general_log_file = /var/log/mysql/query.log
4. 慢查询日志(Slow Query Log)
- 功能:
- 性能优化:记录执行时间超过阈值(默认10秒)或未使用索引的SQL。
- 索引分析:通过日志发现缺失索引或低效查询。
- 配置参数:
[mysqld] slow_query_log = ON # 启用慢查询日志 slow_query_log_file = /var/log/mysql/slow.log long_query_time = 2 # 超过2秒的查询视为慢查询 log_queries_not_using_indexes = ON # 记录未使用索引的查询
5. 重做日志(Redo Log)
- 功能:
- 崩溃恢复:确保事务的持久性(Durability),在系统崩溃后通过重做日志恢复已提交但未写入磁盘的事务。
- 物理日志:记录数据页的物理修改(如页号、偏移量、修改内容)。
- 结构:
- 日志文件组:通常由
ib_logfile0和ib_logfile1组成,循环写入。 - Write-Ahead Logging (WAL):事务提交前必须将日志写入磁盘。
- 日志文件组:通常由
- 配置参数:
[mysqld] innodb_log_file_size = 512M # 单个重做日志文件大小 innodb_log_files_in_group = 2 # 日志文件数量
6. 回滚日志(Undo Log)
- 功能:
- 事务回滚:保存事务修改前的旧值,支持事务的原子性(Atomicity)。
- MVCC实现:为其他事务提供数据的历史版本,实现一致性非锁定读(Read View)。
- 存储位置:默认在系统表空间(
ibdata1)或独立Undo表空间。 - 配置参数:
[mysqld] innodb_undo_directory = /var/lib/mysql/undo # Undo日志路径 innodb_undo_tablespaces = 2 # Undo表空间数量
对比总结
| 日志类型 | 存储引擎 | 主要功能 | 数据级别 |
|---|---|---|---|
| 二进制日志 | MySQL Server | 主从复制、时间点恢复 | 逻辑日志(SQL/行) |
| 错误日志 | MySQL Server | 错误诊断与监控 | 文本日志 |
| 查询日志 | MySQL Server | 全量SQL审计与调试 | 文本日志 |
| 慢查询日志 | MySQL Server | 性能优化与索引分析 | 文本日志 |
| 重做日志 | InnoDB | 崩溃恢复、事务持久性 | 物理日志(数据页) |
| 回滚日志 | InnoDB | 事务回滚、MVCC支持 | 逻辑日志(旧数据) |
应用场景示例
- 主从同步异常:检查二进制日志是否正常生成及传输。
- 数据库崩溃恢复:依赖重做日志恢复未落盘的事务。
- 性能调优:分析慢查询日志优化SQL和索引。
- 事务回滚:通过Undo Log撤销未提交的事务操作。
理解这些日志的作用和配置方式,有助于高效运维MySQL数据库,保障数据安全与系统稳定。
结束语
本篇是一个总结性的文章,后面会详细分析二进制日志、重做日志以及回滚日志以及MVCC的原理。
相关文章:
MySQL六大日志的功能介绍。
前言 首先,MySQL的日志应该包括二进制日志(Binary Log)、错误日志(Error Log)、查询日志(General Query Log)、慢查询日志(Slow Query Log)、重做日志(Redo …...
二级指针略解【C语言】
以int** a为例 1.二级指针的声明 a 是一个指向 int*(指向整型的指针)的指针,即二级指针。 通俗的讲,a是一个指向指针的指针,对a解引用会是一个指针。 它可以用于操作动态分配的二维数组、指针数组或需要间接修改指针…...
鸿蒙状态管理概述
状态管理 状态管理之v1LocalStorageLocalStorageLink的框架行为LocalStorageProp的框架行为LocalStorage使用场景 AppStorageStorageLink的框架行为StorageProp的框架行为AppStorage的使用场景 PersistentStorageEnvironmentEnvironment内置参数 WatchWatch的使用场景 $$语法$$…...
【核心算法篇十三】《DeepSeek自监督学习:图像补全预训练方案》
引言:为什么自监督学习成为AI新宠? 在传统监督学习需要海量标注数据的困境下,自监督学习(Self-Supervised Learning)凭借无需人工标注的特性异军突起。想象一下,如果AI能像人类一样通过观察世界自我学习——这正是DeepSeek图像补全方案的技术哲学。根据,自监督学习通过…...
由浅入深学习大语言模型RLHF(PPO强化学习- v1浅浅的)
最近,随着DeepSeek的爆火,GRPO也走进了视野中。为了更好的学习GRPO,需要对PPO的强化学习有一个深入的理解,那么写一篇文章加深理解吧。纵观网上的文章,要么说PPO原理,各种复杂的公式看了就晕,要…...
网络安全三件套
一、在线安全的四个误解 Internet实际上是个有来有往的世界,你可以很轻松地连接到你喜爱的站点,而其他人,例如黑客也很方便地连接到你的机器。实际上,很多机器都因为自己很糟糕的在线安全设置无意间在机器和系统中留下了“…...
瑞芯微RV1126部署YOLOv8全流程:环境搭建、pt-onnx-rknn模型转换、C++推理代码、错误解决、优化、交叉编译第三方库
目录 1 环境搭建 2 交叉编译opencv 3 模型训练 4 模型转换 4.1 pt模型转onnx模型 4.2 onnx模型转rknn模型 4.2.1 安装rknn-toolkit 4.2.2 onn转成rknn模型 5 升级npu驱动 6 C++推理源码demo 6.1 原版demo 6.2 增加opencv读取图片的代码 7 交叉编译x264 ffmepg和op…...
【ISO 14229-1:2023 UDS诊断(会话控制0x10服务)测试用例CAPL代码全解析⑤】
ISO 14229-1:2023 UDS诊断【会话控制0x10服务】_TestCase05 作者:车端域控测试工程师 更新日期:2025年02月15日 关键词:UDS诊断、0x10服务、诊断会话控制、ECU测试、ISO 14229-1:2023 TC10-005测试用例 用例ID测试场景验证要点参考条款预期…...
python-leetcode 35.二叉树的中序遍历
给定一个二叉树的根节点root,返回它的中序遍历。 方法一:递归 二叉树的中序遍历:按照访问左子树——根节点——右子树的方式遍历这棵树,而在访问左子树或者右子树的时候我们按照同样的方式遍历,直到遍历完整棵树。因此整个遍历过…...
glob 用法技巧
目录 处理大量文件节省内存 匹配多个文件扩展名 遍历多种格式文件 遍历某一个文件: 查找当前目录和子目录 6. 排除特定文件 7. 大小写不敏感匹配 8. 获取绝对路径 9. 处理特殊字符 处理大量文件节省内存 技巧:用 iglob 替代 glob,逐…...
CodeGPT 使用教程(适用于 VSCode)
CodeGPT 使用教程(适用于 VSCode) CodeGPT 是一个 VSCode 插件,可以让你在代码编辑器中直接调用 GPT 进行代码补全、优化、调试等操作。以下是详细的安装和使用步骤: 1. 安装 CodeGPT 方式 1:从 VSCode 插件市场安装…...
以下是MySQL中常见的增删改查语句
以下是MySQL中常见的增删改查语句: 增加数据(INSERT) 基本语法: INSERT INTO table_name (column1, column2,...) VALUES (value1, value2,...); 示例:向名为 students 的表中插入一条学生记录, id 为1&am…...
Vue3 与 TypeScript 实战:核心细节与最佳实践
引言 Vue3 的 Composition API 与 TypeScript 的强类型支持完美契合,极大提升了代码的可维护性和开发体验。本文将深入探讨 Vue3 TypeScript 的关键细节,并通过实际代码示例展示如何高效结合二者。 一、组合式 API 与类型推导 Vue3 的 setup 函数与 T…...
23种设计模式 - 解释器模式
模式定义 解释器模式(Interpreter Pattern)是一种行为型设计模式,用于为特定语言(如数控系统的G代码)定义文法规则,并构建解释器来解析和执行该语言的语句。它通过将语法规则分解为多个类,实现…...
常用的 React Hooks 的介绍和示例
目录 1. useState2. useEffect3. useContext4. useReducer5. useCallback6. useMemo7. useRef8. useImperativeHandle9. useLayoutEffect10. useDebugValue 常用的 React Hooks 的介绍和示例: 1. useState useState 是一个用于在函数组件中添加状态的 Hook。 impo…...
ChatGLM-6B模型
ChatGLM-6B 是由 清华大学人工智能研究院(THU AI) 和 智源研究院(BAAI) 开发的一款中文对话生成大语言模型。它是ChatGLM系列的一个版本,其核心特点是基于GLM(General Language Model)架构&…...
编译安装php
前置准备 这里的可能不全,每个人安装的模块不一致,依赖也不不相同,按实际情况调整 yum install libxml2 -y yum install libxml2-devel -y yum install openssl-devel -y yum install sqlite-devel -y yum install libcurl-devel -yyum ins…...
【JavaEE进阶】Spring MVC(3)
欢迎关注个人主页:逸狼 创造不易,可以点点赞吗 如有错误,欢迎指出~ 返回响应 返回静态页面 //RestController Controller RequestMapping("/response") public class ResponseController {RequestMapping("/returnHtmlPage&…...
30 款 Windows 和 Mac 下的复制粘贴软件对比
在日常电脑操作中,复制粘贴是极为高频的操作,一款好用的复制粘贴软件能极大提升工作效率。以下为你详细介绍 30 款 Windows 和 Mac 下的复制粘贴软件,并对比它们的优缺点,同时附上官网下载地址,方便大家获取软件。 Pa…...
【LLAMA】羊驼从LLAMA1到LLAMA3梳理
every blog every motto: Although the world is full of suffering, it is full also of the overcoming of it 0. 前言 LLAMA 1到3梳理 1. LLAMA 1 论文: LLaMA: Open and Efficient Foundation Language Models 时间: 2023.02 1.1 前言…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【WiFi帧结构】
文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成:MAC头部frame bodyFCS,其中MAC是固定格式的,frame body是可变长度。 MAC头部有frame control,duration,address1,address2,addre…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Linux 内存管理实战精讲:核心原理与面试常考点全解析
Linux 内存管理实战精讲:核心原理与面试常考点全解析 Linux 内核内存管理是系统设计中最复杂但也最核心的模块之一。它不仅支撑着虚拟内存机制、物理内存分配、进程隔离与资源复用,还直接决定系统运行的性能与稳定性。无论你是嵌入式开发者、内核调试工…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
【JVM】Java虚拟机(二)——垃圾回收
目录 一、如何判断对象可以回收 (一)引用计数法 (二)可达性分析算法 二、垃圾回收算法 (一)标记清除 (二)标记整理 (三)复制 (四ÿ…...
通过MicroSip配置自己的freeswitch服务器进行调试记录
之前用docker安装的freeswitch的,启动是正常的, 但用下面的Microsip连接不上 主要原因有可能一下几个 1、通过下面命令可以看 [rootlocalhost default]# docker exec -it freeswitch fs_cli -x "sofia status profile internal"Name …...
