【MySQL】日志详解
本文使用的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开销。
后续详细讲解。
相关文章:

【MySQL】日志详解
本文使用的MySQL版本是8 日志概览 它们记录了数据库系统中的不同操作和事件,以便于故障排除、性能优化和数据恢复。本文将介绍MySQL中常见的几种日志,同时也会介绍一点常用的选项。 官方文档:MySQL :: MySQL 8.0 Reference Manual :: 7.4 M…...

MyBatis 延迟加载,一级缓存,二级缓存设置
MyBatis不仅提供了一级缓存和二级缓存机制,还支持延迟加载(Lazy Loading),以进一步优化性能。 1. 延迟加载(Lazy Loading) 延迟加载是在需要时才加载数据,而不是在查询时立即加载所有相关数据。…...

Linux 基本指令2
cp 指令 cp[选项]源文件 目标文件 将源文件的内容复制到目标文件中,源文件可以有多个,最后一个文件为目标文件,目标文件也可以是一段路径,若目的地不是一个目录的话会拷贝失败。若没有路径上的目录则会新建一个,若源是…...

联邦学习的基本流程,联邦学习权重聚合,联邦学习权重更新
目录 联邦学习的基本流程是 S_t = np.random.choice(range(K), m, replace=False) 联邦学习权重聚合 model.state_dict() 联邦学习权重更新 下载数据集 https://ossci-datasets.s3.amazonaws.com/mnist/train-images-idx3-ubyte.gz 联邦学习的基本流程是 **1. server初始…...

React保姆级教学
React保姆级教学 一、创建第一个react项目二、JSX基本语法与react基础知识1、 插值语法:2、 循环一个简单列表3、 实现简单条件渲染4、 实现复杂的条件渲染5、 事件绑定6、 基础组件(函数组件)7、 使用useState8、 基础样式控制9、 动态类名1…...

数据结构和矩阵细节用法:double、cell和complex #matlab
矩阵建立 建立矩阵用[]; 矩阵的同一行内的元素用逗号或者空格隔开; 矩阵的不同行的元素用分号隔开 eg. 矩阵 A 1 2 3 4 5 6 7 8 9 在matlab中矩阵A表示为: clc;clear; A[1,2,3;4,5,6;7,8,9]; %或者A[1 2 3;4 5 …...

12. Django 第三方功能应用
12. 第三方功能应用 因为Django具有很强的可扩展性, 所以延伸了第三方功能应用. 通过本章的学习, 读者能够在网站开发过程中快速实现API接口开发, 验证码生成与使用, 站内搜索引擎, 第三方网站实现用户注册, 异步任务和定时任务, 即时通信等功能.12.1 Django Rest Framework框…...

UnityWebRequest获取本地txt文件,其中中文乱码问题(踩坑记录)
Unity获取本地streamingassert下txt文件,遇到点问题,就是用UnityWebRequest下载一个txt文件的时候,原txt在资源管理器用notepad打开显示正常,但是Unity里调试,打印内容却是乱码, 在notepad 转存为utf-8&…...

轮到国产游戏统治Steam榜单
6月10日晚8点,《黑神话:悟空》实体版正式开启全款预售,预售开启不到5分钟,所有产品即宣告售罄。 Steam上,《黑神话:悟空》持续占据着热销榜榜首的位置。 但在《黑神话:悟空》傲人的光环下,还有一款国产游戏取得出色的成绩。 6月10日&#…...

不想搭集群,直接用spark
为了完成布置的作业,需要用到spark的本地模式,根本用不到集群,就不想搭建虚拟机,hadoop集群啥的,很繁琐,最后写作业还用不到集群(感觉搭建集群对于我完成作业来说没有什么意义)&…...

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。
操作环境: MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分:显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏(Edit Text):位于界面顶部中央,用于显示用户输入的表达式和…...

Scikit-learn 基础教程:机器学习的初步指南
Scikit-learn 是一个用于数据挖掘和数据分析的机器学习库,建立在 NumPy、SciPy 和 matplotlib 之上。它提供了简单而高效的工具来进行数据分析和建模。本文将为您介绍 Scikit-learn 的安装方法、核心组件,以及如何应用这些组件进行一个简单的机器学习项目…...

开源WebGIS全流程常用技术栈
1 数据生产 1.1 uDig uDig(http://udig.refractions.net/)是一个基于Java开源的桌面应用框架,它构建在Eclipse RCP和GeoTools(一个开源的Java GIS包)上。可以进行shp格式地图文件的编辑和查看;是一个开源空间数据查看…...

前端开发之HTTP协议认识
上一篇👉: 前端开发之WebSocket通信 文章目录 1. HTTP 1.0 和 HTTP 1.1 之间有哪些区别1.连接方面:2.资源传输优化:3.缓存机制增强:4.主机头识别5.请求方法扩展 2.HTTP 1.1 和 HTTP 2.0 的区别1. 二进制分帧层:2.多路…...

力扣刷题总结 -- 数组26
76. 所有奇数长度子数组的和(简单) 题目要求: 给定一个正整数数组 arr ,计算所有奇数长度子数组的和。 子数组定义为原数组中的一个连续子序列。 返回 arr 中 所有奇数长度子数组的和 。 题目分析: 先得到所有子…...

无线MODBUS通讯模块在供水系统中的应用
一、项目背景 我国是人口大国、农业大国,同时也是贫水大国。由于大量工业废水污染了部分河流、地表的浅层水资源,并且有逐年加重的趋势,再加上农业、绿化等灌溉对水资源的大量消耗,这些因素综合作用进一步加剧了我国水资源紧缺的…...

linux为什么不是实时操作系统
Linux为什么不是实时操作系统? 从我们接触Linux系统开始,一直听到的都是它是非实时操作系统,怎么理解这个非实时呢? 我的理解,非实时,就是中断响应不及时,任务调度不及时。那么,真…...

【STM32】飞控设计
【一些入门知识】 1.飞行原理 【垂直运动】 当 mg>F1F2F3F4,此时做下降加速飞行 当 mg<F1F2F3F4,此时做升高加速飞行 当 mgF1F2F3F4 ,此时垂直上保持匀速飞行。 【偏航飞行】 ω 4 ω 2 ≠ ω 1 ω 3 就会产生水…...

MySQL CDC
一、MySQL CDC概念 MySQL CDC(Change Data Capture),即MySQL变更数据捕获,是一种能够捕获MySQL数据库中数据变化(包括插入、更新和删除操作)的技术。这些变化可以实时或准实时地同步到其他系统或服务中&am…...

手把手教你安装 Vivado2022.2(附安装包)
一、Vivado 2022.2 优势 Vivado 2022.2版本与之前的版本相比,具有以下几个显著的优势: 电源设计管理器(PDM):Vivado 2022.2引入了全新的电源设计管理器(PDM),这是一个下一代功耗评…...

旅行者1号有什么秘密?飞行240多亿公里,为什么没发生碰撞?
旅行者1号有什么秘密?飞行240多亿公里,为什么没发生碰撞? 自古以来,人类就对浩瀚无垠的宇宙充满了好奇与向往。从最初的仰望星空,到如今的深空探测,人类探测宇宙的历史发展可谓是一部波澜壮阔的史诗。 在…...

如何保护云主机安全
在数字化时代,云服务器已成为企业数据存储、处理和传输的重要工具。然而,随着其应用的广泛和深入,云服务器也面临着越来越多的安全威胁。为了应对这些威胁,白名单技术应运而生,成为保护云服务器安全的重要手段。 首先&…...

postman教程-19-mock测试
上一小节我们学习了Postman接口参数化方法,本小节我们讲解一下Postman mock测试的方法。 一、什么叫mock测试 mock测试就是在测试过程中,对某些不容易构造或者不容易获取的对象,用一个虚拟的对象来创建以便于测试的一种测试方法,…...

纳秒级网络库【二】技术选型
在十年之前,已经有网络产品实现7纳秒延迟,所以无需质疑是否能够实现,关键问题是:代价是什么。国内不少量化公司在招聘低延迟总线的开发人员,虽然我不知道他们具体的技术选型,从技术底层来看,并没…...

ESP32基础应用之esp32连接腾讯云并使用微信小程序控制的智能灯
文章目录 1. 项目简介1.1 功能接收1.2 使用资源1.3 测试平台 2 腾讯云物联网开发平台3 esp32设备开发3.1 准备参考例程3.2 vscode平台创建测试工程3.3 修改工程 问题总结使用PowerShell命令行终端生成的二维码不能用 1. 项目简介 1.1 功能接收 实现腾讯云创建项目与设备&…...

Unity Protobuf+RPC+UniTask
远程过程调用(RPC)协议详解 什么是RPC协议RPC的基本原理RPC的关键组件RPC的优缺点Protobuf函数绑定CallEncodeRecvDecodeSocket.Send和Recv项目地址 什么是RPC协议 远程过程调用(Remote Procedure Call,简称RPC)是一种…...

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-通话时长限制
文章目录 前言联系我们场景运用机器人场景普通通话场景 前言 顶顶通呼叫中心中间件限制通话时长有两种写法,分别作用于机器人场景与普通通话场景。 普通场景可分为分机互打、分机外呼手机等。 联系我们 有意向了解呼叫中心中间件的用户,可以点击该链接…...

如何将ai集成到项目中,方法二
上一篇文章:如何将ai集成到radsystems项目中,在项目中引入ai-CSDN博客 上一篇文章内容主要针对于未实现权限分离的项目,这篇文章主要来说一下权限分离的项目怎么做,以及注意的细节。 一、编写前端router.js 二、编写前端askai.vu…...

python的变量的引用与赋值的学习
看代码: a 1 # 初始化变量a,赋值为1 b a # 变量b被赋值为变量a的值,此时b的值也为1 b 2 # 变量b被重新赋值为2 print(a) # 打印变量a的值 执行过程如下: a 1:变量a被赋值为1。b a:变量b被赋值为…...