Mysql-日志介绍 日志配置
环境部署
docker run -d -p 3306:3306 --privileged=true -v $(pwd)/logs:/var/lib/logs -v $(pwd)/conf:/etc/mysql/conf.d -v $(pwd)/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=654321 --name mysql mysql:5.7
运行指令的目录下新建好这些文件:

日志类型
| 日志类型 | 写出到日志的信息 |
|---|---|
| ErrorLog(错误日志) | mysqld 错误日志(记录了mysqld开始,停止,运行中的错误日志)。 |
| General query log (查询日志) | 记录了msqld在做什么事情,用户建立连接和用户执行SQL都会被记录。 |
| Binary log(二进制日志) | 对于数据库的任何修改事件都会记录到这里,二进制日志用于恢复,复制和审计。 |
| Relay log(中继日志) | 中继日志和二进制日志相似,记录了一些对数据库改变的操作事件,同时维护了一个已经使用过的中继日志索引。 |
| SlowQueryLog | 慢查询日志,记录慢查询 比long_query_time(可配置)长的都为慢查询。 |
| DDL log (metadata log) | 记录了比如修改表结构或者重命名这些对元数据进行修改的操作。 |
查看日志变量
通过下面两条指令可以查看各种日志的启用情况
show variables like "log_%";
show variables like "%_log";

ErrorLog
默认开启,错误日志记录了运行过程中遇到的所有严重的错误信息,以及 MySQL每次启动和关闭的详细信息。
默认是stderr也就是输出到控制台.

如果我们需要输出到目录我们需要修改这个配置:
[mysqld]
#设置输出路径
log-error=/var/lib/logs/log-err.log
这里注意可能回报错误,因为没有权限在这个路径写东西,放到这个目录/var/lib/logs下即可:

重启服务器我们可以看到日志的输出变为了文件路径:

同时我们可以根据log-warnings去配置输出那些信息,默认为2我们可以看到:

log_warnings 为0, 表示不记录告警信息。
log_warnings 为1, 表示告警信息写入错误日志。
log_warnings 大于1, 表示各类告警信息,例如:有关网络故障的信息和重新连接信息写入错误日志。
比如我们做下面的配置,可以看到值被修改为了1,这里的配置log-error 和 log_error都会生效,统一一下就可以
[mysqld]
log-error=/var/lib/logs/log-err.log
log_warnings=1

二进制日志
binlog记录了数据库所有的ddl语句和dml语句,但不包括select和show语句内容因为不是更新操作(这些日志由General query log 来记录),语句以事件的形式保存,描述了数据的变更顺序,binlog还包括每个更新语句的执行时间信息。
如果是DDL语句,则直接记录到binlog日志,而DML语句,必须通过事务提交才能记录到binlog日志中。
binlog主要用于实现mysql主从复制、数据备份、数据恢复。
配置中mysql-bin是binlog日志文件的basename,如果不指定则会取pid-file的名称。binlog日志文件的完整名称:mysql-bin.000001。
pid-file是服务器从中写入其进程ID的文件的路径名。服务器在数据目录中创建文件,除非给出一个绝对路径名来指定其他目录。如果您指定此变量,则必须指定一个值。如果不指定此变量,则MySQL将使用默认值host_name.pid,其中host_name是主机的名称。
[mysqld]
server_id=42
log-bin=mysql-bin
server-id的作用: 1.mysql的同步数据中是包含server-id的,用于标识该语句最初从哪个server写入,所以server-id一定要有 2.每一个同步中的slave在master上都有对应的一个master线程,该线程就是通过slave的server-id来标识的;每个slave在master端最多有一个master线程,如果两个slave的server-id相同,则后一个连接成功时,前一个会被踢掉,slave主动连接master之后,如果slave上面执行了slave stop;则连接断开,但是master上对应的线程并没有退出;当slave start之后,master不能再创建一个线程而保留原来的线程,那样同步就可能有问题. 3.在mysql做主主同步时,多个主需要构成一个环状,但是同步的时候又要保证一条数据不会陷入死循环,这里就是靠server-id来实现的
binlog日志文件的完整名称:mysql-bin.000001……mysql-bin.999999,也就是在追加binlog的时候会在后面进行编号。在这几种情况下这个编号会继续往下编:
- msql服务启动或者重启
- 服务器刷新了binlog日志
- binlog的size达到了我们预设的max_binlog_size
为了跟踪使用了哪些二进制日志文件,mysqld还创建了一个包含二进制日志文件名称的二进制日志索引文件。默认情况下,它与二进制日志文件相同,扩展名为‘.index’。您可以使用log_bin_index[=file_name]选项更改二进制日志索引文件的名称。
开启上面的配置以后我们可以看到二进制日志被开启,并且生产了index文件

我们去docker挂在的目录看一下这些文件

General query log 通用查询日志
general query log 默认关闭,由于通用查询日志会记录用户的所有操作,其中还包含增删查改等信息,在并发操作大的环境下会产生大量的信息从而导致不必要的磁盘IO,会影响MySQL的性能的。如果不是为了调试数据库,不建议开启查询日志。
show global variables like '%general_log%';

[mysqld]
#控制是否开启
general_log={0|1}
#这个变量定义了慢查询或者查询日志的输出的方式 可以是文件也可以是表 也可以是都输出 TABLE,FILE
log_output={FILE|TABLE|NONE}
#general_log_file如果没有指定,默认名是host_name.log
general_log_file=/var/lib/mysql/general_log.log

log_output='FILE'表示将日志存入文件,默认值是'FILE' log_output='TABLE'表示将日志存入数据库,这样日志信息就会被写入到mysql.general_log 或者mysql.slow_log表中.
SlowQueryLog 慢查询日志
slow query log 默认关闭,通过以下设置开启。记录执行时间超过long_query_time秒的所有查询,便于收集查询时间比较长的SQL语句。
show global status like '%Slow_queries%';
show variables like '%slow_query%';
show variables like 'long_query_time%';
[mysqld]
#这个和普通查询日志一样的
log_output={FILE|TABLE|NONE}
# 开启慢查询日志
slow_query_log={0|1}
# 慢查询的阈值,单位秒
long_query_time=10
# 日志记录文件
# 如果没有给出file_name值, 默认为主机名,后缀为-slow.log。
# 如果给出了文件名,但不是绝对路径名,文件则写入数据目录。
slow_query_log_file=/var/lib/mysql/slow_query_log.log

默认情况下,不会记录管理类的日志语句,也不会记录不使用索引进行查询的查询,可以通过下面两个参数开启
#记录管理员
log_slow_admin_statements=ON
#记录没有使用索引的语句
log_queries_not_using_indexes=ON
记录管理类指令 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX,
OPTIMIZE TABLE, and REPAIR TABLE.这些操作。
DDL log (metadata log)
DDL日志或元数据日志记录由数据定义语句生成的影响表分区的元数据操作,例如 ALTER TABLE t3 DROP PARTITION p2,我们必须确保分区被完全删除,其定义从表t3的分区列表中删除。MySQL使用此日志从分区元数据操作中间发生的崩溃中恢复,就比如我们在修改或者删除表的时候发送了异常,mysqld会借助这个日志将数据库恢复到之前的状态。分区元数据操作的记录被写入MySQL数据目录中的文件ddl_log.log。DDL 日志是一个二进制文件,不被人为的阅读修改,也没有其他配置项可以配置它,且在成功启动mysqld 后会被删除,只有在记录元数据时才会被重新创建。因此,这个文件可能不会出现在一个完全正常运行的MySQL服务器上。
Relay log(中继日志)
show variables like '%relay%';

和binlog非常的类似也是记录了数据库的变化,也会维护一个索引用来记录那些中继日志被使用过了。我的理解是它其实就是binlog的一种中间状态,用于在从数据库进行同步数据。
原图链接

出现下面这几种情况,中继日志会创建一个新的文件:
- 每次负责复制的线程开始的时候,会创建一个新的中继日志,这样不会丢失之前的中继日志。
- 当日志被刷到磁盘的时候
- 当中继日志超过文件存储大小上限的时候
相关文章:
Mysql-日志介绍 日志配置
环境部署 docker run -d -p 3306:3306 --privilegedtrue -v $(pwd)/logs:/var/lib/logs -v $(pwd)/conf:/etc/mysql/conf.d -v $(pwd)/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD654321 --name mysql mysql:5.7运行指令的目录下新建好这些文件: 日志类型 日…...
计算机网络的体系结构的各层在整个过程中起到什么作用?
ps:本文章的图片内容来源都是来自于湖科大教书匠的视频,声明:仅供自己复习,里面加上了自己的理解 这里附上视频链接地址:1.6 计算机网络体系结构(4)—专用术语_哔哩哔哩_bilibili 目录 &#x…...
如何在业务代码中优雅的使用策略模式?
策略模式介绍 假设你正在开发一个电商平台,其中涉及到商品的折扣策略。优惠策略有很多种可能,如领取优惠券抵扣、返现促销、拼团优惠等。最初的实现可能会在购物车类中嵌入各种折扣逻辑,导致代码的可维护性和扩展性下降。 下面代码在业务开…...
“docker-credential-desktop.exe“: executable file not found in $PATH 错误解决
"docker-credential-desktop.exe": executable file not found in $PATH 错误解决 1. 错误信息和解决方法 1. 错误信息和解决方法 错误信息, error getting credentials - err: exec: "docker-credential-desktop.exe": executable file not …...
openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs
文章目录 openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs概述笔记END openssl3.2/test/certs - 055 - all DNS-like CNs allowed by CA1, no DNS SANs 概述 openssl3.2 - 官方demo学习 - test - certs 笔记 /*! * \file D:\my_dev\my_local_…...
长虹智能电视6000iD、6080iD、3000iD、U2系列等 ZLM61HiPJ机芯升级刷机方法,附刷机数据
机芯:ZLM61HiPJ 适用机型:UD39B6000iD、UD42B6000iD、UD50B6000iD、UD55B6000iD、UD42C6000iD、UD42C6080iD、UD49C6000iD、UD49C6080iD、UD55C6000iD、UD55C6080iD、UD50C6000iD、UD58C3000iD、42U2 LE42C19S-UD、LE50C29SD-UD、 UD49C6000iD(LJM2W)、…...
六、VTK创建平面vtkPlaneSource
vtkPlaneSource创建位于平面中的四边形数组 先看看效果图: vtkPlaneSource 创建一个 m x n 个四边形数组,这些四边形在平面中排列为规则平铺。通过指定一个原点来定义平面,然后指定另外两个点,这两个点与原点一起定义平面的两个轴。这些轴不必是正交的 - 因此您可以创建平行…...
LiveGBS流媒体平台GB/T28181常见问题-如何配置使用自己已有的redis服务替换redis版本升级redis版本
LiveGBS如何配置使用自己已有的redis服务替换redis版本升级redis版本 1、Redis服务2、如何切换REDIS?2.1、停止启动REDIS2.2、配置信令服务2.3、配置流媒体服务2.4、启动 3、搭建GB28181视频直播平台 1、Redis服务 在LivGBS中Redis作为数据交换、数据订阅、数据发布的高速缓存…...
stm32产品架构
文章目录 前言一、pandas是什么?二、使用步骤 1.引入库2.读入数据 总结 前言 起因是我在看野火的ucosiii,然后他是基于i.mx芯片。然后我就很疑惑i.mx是什么芯片,看了下好像是ARM-M7(或者叫ARMCM7)架构的芯片。然后我又疑惑ARM-M7又是什么架…...
数据结构——双链表
双链表中节点类型的描述: 双链表的初始化(带头结点) 、 双链表的插入操作 后插操作 InsertNextDNode(p, s): 在p结点后插入s结点 按位序插入操作: 思路:从头结点开始,找到某个位序的前驱结点ÿ…...
Git 对文件名大小写不敏感的问题解决方案
目录 一、Git 对文件名大小写不敏感1.1 问题描述1.2 原因分析1.3 解决方案方式一:使用git命令进行修改方式二:关闭git 忽略大小写配置 (可以当前项目设置,也可以全局设置 --global) 二、新的问题(重复的目录…...
Java复习系列之阶段三:框架原理
1. Spring 1.1 核心功能 1. IOC容器 IOC,全称为控制反转(Inversion of Control),是一种软件设计原则,用于减少计算机代码之间的耦合度。控制反转的核心思想是将传统程序中对象的创建和绑定由程序代码直接控制转移到…...
【Python】01快速上手爬虫案例一:搞定豆瓣读书
文章目录 前言一、VSCodePython环境搭建二、爬虫案例一1、爬取第一页数据2、爬取所有页数据3、格式化html数据4、导出excel文件 前言 实战是最好的老师,直接案例操作,快速上手。 案例一,爬取数据,最终效果图: 一、VS…...
JavaEE 网络编程
JavaEE 网络编程 文章目录 JavaEE 网络编程引子1. 网络编程-相关概念1.1 基本概念1.2 发送端和接收端1.3 请求和响应1.4 客户端和服务端 2. Socket 套接字2.1 数据包套接字通信模型2.2 流套接字通信模型2.3 Socket编程注意事项 3. UDP数据报套接字编程3.1 DatagramSocket3.2 Da…...
5.rk3588用cv读取图片(C++)
rk3588自带了cv,不需要重新安装,执行以下操作即可: 一、读取图片 1.读取某张图片 #define HAVE_OPENCV_VIDEO #define HAVE_OPENCV_VIDEOIO#include <opencv2/opencv.hpp> #include <iostream> #include <opencv2/opencv.h…...
Github 无法正常访问?一招解决
查询IP网址: https://ip.chinaz.com/ 主页如下: 分别查询以下三个网址的IP: github.com github.global.ssl.fastly.net assets-cdn.github.com 修改 hosts 文件: 将 /etc/hosts 复制到 home 下 sudo cp /etc/hosts ./ gedit hosts 在底下…...
架构师的36项修炼-08系统的安全架构设计
本课时讲解系统的安全架构。 本节课主要讲 Web 的攻击与防护、信息的加解密与反垃圾。其中 Web 攻击方式包括 XSS 跨站点脚本攻击、SQL 注入攻击和 CSRF 跨站点请求伪造攻击;防护手段主要有消毒过滤、SQL 参数绑定、验证码和防火墙;加密手段,…...
docker 构建应用
docker 应用程序开发手册 开发 docker 镜像 Dockerfile 非常容易定义镜像内容由一系列指令和参数构成的脚本文件每一条指令构建一层一个 Dockerfile 文件包含了构建镜像的一套完整指令指令不区分大小写,但是一般建议都是大写从头到尾按顺序执行指令必须以 FROM 指…...
Go语言grpc服务开发——Protocol Buffer
文章目录 一、Protocol Buffer简介二、Protocol Buffer编译器安装三、proto3语言指南四、序列化与反序列化五、引入grpc-gateway1、插件安装2、定义proto文件3、生成go文件4、实现Service服务5、gRPC服务启动方法6、gateway服务启动方法7、main函数启动8、验证 相关参考链接&am…...
【开源】基于JAVA语言的实验室耗材管理系统
目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 耗材档案模块2.2 耗材入库模块2.3 耗材出库模块2.4 耗材申请模块2.5 耗材审核模块 三、系统展示四、核心代码4.1 查询耗材品类4.2 查询资产出库清单4.3 资产出库4.4 查询入库单4.5 资产入库 五、免责说明 一、摘要 1.1…...
Docker 离线安装指南
参考文章 1、确认操作系统类型及内核版本 Docker依赖于Linux内核的一些特性,不同版本的Docker对内核版本有不同要求。例如,Docker 17.06及之后的版本通常需要Linux内核3.10及以上版本,Docker17.09及更高版本对应Linux内核4.9.x及更高版本。…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
关于iview组件中使用 table , 绑定序号分页后序号从1开始的解决方案
问题描述:iview使用table 中type: "index",分页之后 ,索引还是从1开始,试过绑定后台返回数据的id, 这种方法可行,就是后台返回数据的每个页面id都不完全是按照从1开始的升序,因此百度了下,找到了…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...
cf2117E
原题链接:https://codeforces.com/contest/2117/problem/E 题目背景: 给定两个数组a,b,可以执行多次以下操作:选择 i (1 < i < n - 1),并设置 或,也可以在执行上述操作前执行一次删除任意 和 。求…...
spring:实例工厂方法获取bean
spring处理使用静态工厂方法获取bean实例,也可以通过实例工厂方法获取bean实例。 实例工厂方法步骤如下: 定义实例工厂类(Java代码),定义实例工厂(xml),定义调用实例工厂ÿ…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
