Linux之MySQL日志
前言
数据库就像一个庞大的图书馆,而日志则是记录这个图书馆内每一本书的目录。正如在图书馆中找到特定书籍一样,数据库日志帮助我们追溯数据的变更、定位问题和还原状态。
在MySQL中,日志是非常重要的一个组成部分,它记录了数据库运行状态的各种信息,包括错误信息、查询信息、事务信息等等,是进行异常排查、性能优化、数据恢复和备份的关键基础。
MySQL日志分类及介绍
MySQL中的日志主要分为两种类型:Server层和引擎层的日志(本次课程主要介绍Server层日志)。
Server层日志简介
用于记录MySQL Server层的各种操作和异常情况
- Error Log (错误日志) :记录
MySQL服务的启动、运行或停止过程中出现的问题和错误信息。用于了解服务器的状态和故障排除。 - Binary Log (二进制日志):记录对
MySQL数据库执行的更改操作,包括语句的发生时间、执行时长等信息,主要用于数据库恢复和主从复制。 - Relay Log ( 中继日志):用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的中间文件,从服务器通过读取中继日志的内容来同步主服务器上的操作。
- **DDL Log **:记录数据定义语句执行的元数据操作。
- General Log(查询日志) :记录所有连接到数据库的客户端发送给数据库服务器的指令,包括连接和断开连接信息、执行的查询和
SQL语句等。 - Slow Query Log (慢查询日志):记录执行时间超过阈值的
SQL查询语句,用于识别性能瓶颈、定位慢查询并进行优化。
InnoDB层日志简介
-
重做日志(redo log):
InnoDB使用重做日志来确保事务的持久性。当事务提交时,InnoDB会将该事务对数据库的修改记录到重做日志中。在数据库发生崩溃或意外关闭时,InnoDB可以通过重做日志来恢复未提交的事务,以保持数据的一致性。 -
回滚日志(undo log):
InnoDB使用回滚日志来实现事务的原子性和隔离性。当事务执行时,InnoDB会为该事务创建一个回滚日志,记录事务执行前的数据状态。如果事务需要回滚,InnoDB可以使用回滚日志将数据恢复到事务执行前的状态。此外,回滚日志还用于支持多版本并发控制(MVCC),使不同事务可以同时读取和修改相同的数据而不会相互干扰。
Server层日志
错误日志
错误日志是MySQL中最重要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。
该日志是默认开启的,默认存放目录/var/log/,默认的日志文件名为mysqld.log。查看日志位置:
show variables like '%log_error%'

切换至root用户,然后编辑/var/lib/mysql/auto.cnf。随机修改server_uuid信息,然后再重启mysqld服务信息,最后通过查看错误日志信息。
sudo vim /var/lib/mysql/auto.cnf
# 修改成功之后,退出并保存
# 重启mysql服务
sudo systemctl restart mysql
设置拥有者为mysql
sudo chown mysql auto.cnf
注意:修改之前,先保存好原有的
server_uuid,防止忘记。
重启mysql服务之后,通过查看错误信息后发现是修改了server_uuid导致服务无法正常启动。
# 查看mysql日志
sudo tail -f /var/log/mysql/error.sql

二进制日志
- 介绍
二进制日志(BINLOG)记录了所有的DDL(数据定义语言)和DML(数据操作语言)语句,但不包括数据查询(SELECT、SHOW)语句。
作用:1)灾难时的数据恢复;2)
MySQL的主从复制。在MySQL8版本中,默认二进制是开启的;在MySQL5.7版本中需要手动开启。
查看命令如下:
show variables like '%log_bin%';

修改/etc/mysql/mysql.conf.d/mysqld.cnf,开启log_bin二进制日志功能。在[mysqld]配置中添加以下信息:
[mysqld]
...
# 开启log_bin
log_bin=mysql_bin
# 设置唯一id
server-id=1
# 设置log_bin的日志格式(默认ROW)
binlog_format=ROW
最后,保存并退出,重启mysql服务。再次登陆mysql查看修改情况:
# 重启mysql服务
sudo systemctl restart mysql
# 再次登陆mysql
mysql -u root -p
# 输入root密码

主要参数介绍
| 参数 | 说明 |
|---|---|
| log_bin | 是否开启log_bin日志,NO表示开启,OFF表示关闭 |
| log_bin_basename | binlog日志的基本文件名,产生的bin-log文件名即为bin-log.* |
| log_bin_index | binlog文件的索引文件,管理所有binlog文件 |
切换到/var/lib/mysql目录下,查看二进制日志文件。(注意:请使用root账号切换目录)
# 切换root账号
su root
# 切换目录
cd /var/lib/mysql
# 查看目录下的文件信息
ll

- 日志格式
MySQL服务器中提供了多种格式来记录二进制日志,具体格式及特点如下:
| 日志格式 | 说明 |
|---|---|
| STATEMENT | 基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中。 |
| ROW | 基于行的日志记录,记录的是每一行的数据变更。(默认) |
| MIXED | 混合了STATEMENT和ROW两种格式,默认采用STATEMENT,在某些特殊情况下会自动切换为ROW进行记录。 |
查看binlog的日志格式命令如下:
show variables like '%binlog_format%';

创建一个数据库db1,并在数据库下创建t_score成绩表。
mysql> create database db1;
mysql> use db1;
mysql> create table t_score(id int primary key auto_increment,name varchar(20) not null,course varchar(20) not null,score float default 0);
mysql> insert into t_score(name,course,score) values('张三','语文',99),('张三','数学',98),('里斯','语文',90),('里斯','数学',87);
mysql> commit;

- 日志查看
由于日志是以二进制方式存储的,不能直接读取,需要通过二进制日志查询工具mysqlbinlog来查看,具体语法:
mysqldbinlog [参数选项] logfilename
参数选项说明:
| 参数 | 说明 |
|---|---|
| -d | 指定数据库名称,只列出指定的数据库相关操作 |
| -o | 忽略点日志中的前n行命令 |
| -v | 将行事件(数据变更)重构为SQL语句 |
| -w | 将行事件(数据变更)重构为SQL语句,并输出注释信息 |
示例1:查看上一步骤的操作日志
切换到/var/lib/mysql目录,执行以下命令,查看执行日志:
# 切换目录
cd /var/lib/mysql
# 通过mysqlbinlog命令查看日志信息(看不到有效信息)
mysqlbinlog mysql_bin.000001
# 通过配置指定参数再次查看(可以清晰的看到SQL语句)
mysqlbinlog -v mysql_bin.000001

示例2:更换日志格式为STATEMENT
修改/etc/mysql/mysql.conf.d/mysqld.cnf文件。
# 编辑mysql配置文件
vim /etc/mysql/mysql.conf.d/mysqld.cnf
将[mysqld]配置中binlog_format=ROW修改成binlog_format=STATEMENT,其他配置不变。
[mysqld]
...
# 设置log_bin的日志格式(默认ROW)
binlog_format=STATEMENT
修改完成之后,重启mysql服务。(重要!!!)
这时可以在/var/lib/mysql目录下看到一个新的二进制日志文件。

注意:这里因为修改了日志格式,重启
mysql服务之后,将重新产生一个全新的二进制日志文件,如图上所示mysql-bin.000002。
基于日志格式STATEMENT,修改t_score表中所有人的成绩后,再次查看日志情况。
mysql> update t_score set score=score+1;
mysql> commit;# 切换目录
cd /var/lib/mysql
# 查看日志
mysqlbinlog -v mysql-bin.000002

- 日志删除
对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空间。可以通过以下几种方式清理日志:
| 指令 | 说明 |
|---|---|
| reset master | 删除全部binlog日志,删除之后,日志编号将从binlog.000001重新开发 |
| purge master logs to 'binlog.******************' | 删除 ****************** 编号之前的所有日志 |
| purge master logs before 'yyyy-mm-dd hh24:mi:ss' | 删除日志为 “yyyy-mm-dd hh24:mi:ss”之前产生的日志 |
示例1:删除指定编号之前的所有日志
mysql> purge master logs to 'mysql-bin.000002'

示例2:删除全部日志
mysql> reset master
mysql8.0以下版本查看当前数据库日志binlog保存时效 以天为单位,默认0永不过期,最多只能设置99天。
show variables like '%expire_logs_days%';
mysql8.0以上版本通过设置全局参数binlog_expire_logs_seconds修改binlog保存时间,以秒为单位;默认30天。
show variables like '%binlog_expire_logs_seconds%'
SHOW VARIABLES LIKE 'log_bin';
示例2:数据备份和恢复
数据备份
mysqldump -u root -p db1 t_score > backup_t_score.sqlroot:链接名
db1:数据库名
t_score:表名
backup_t_score.sql:备份文件名
查询日志
查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下,查询日志是未开启的。
show variables like '%general%';
如果需要开启查询日志,修改/etc/mysql/mysql.conf.d/mysqld.cnf文件。可以设置以下配置:
[mysqld]
# 该选项用来开启查询日志,可选值:0或1,0代表关闭,1代表开启
general_log=1
# 设置日志的文件名,如果没有指定,默认的文件名为host_name.log
general_log_file=mysql_query.log
修改完毕之后,需要重启mysql服务。

使用tail命令实时查看mysql_query.log日志文件信息。
tail -f mysql_query.log
然后再登录到mysql,执行以下操作后,在切换到mysql_query.log日志文件中查看信息。
mysql> show databases;
mysql> use db1;
mysql> show tables;
mysql> select * from t_score;
mysql> select * from t_score where id = 1;
mysql> update t_score set score = score - 1;
....

慢查询日志
慢查询日志记录了所有执行时间超过参数long_query_time设置值并且扫描记录数不小于min_examined_row_limit的所有的SQL语句的日志,默认未开启。long_query_time默认为10秒,最小为0,精度可以到微秒。
show variables like '%slow_query%';

如果需要开启查询日志,修改/etc/mysql/mysql.conf.d/mysqld.cnf文件。可以设置以下配置:
[mysqld]
# 慢查询日志
slow_query_log=1
# 执行时间参数
long_query_time=2
修改完毕之后,需要重启mysql服务。
使用tail命令实时查看zking-slow.log日志文件信息。
tail -f zking-slow.log
然后再登录到mysql,切换至db1数据库并创建t_log表(参考资料db.txt)。将资料中t_log.sql上传至虚拟机并导入到数据库中。
# 上传t_log.sql
rz t_log.sql
# 导入数据
mysql -uroot -密码 数据库名 < t_log.sql
最后登录mysql,执行以下SQL语句并查看慢查询日志文件信息。
mysql> select * from t_log limit 120000,10;

默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。可以使用log_slow_admin_statements和更改此行为log_queries_not_using_indexes,如下所示:
[mysqld]
# 记录执行较慢的管理语句
log_slow_admin_statements=1
# 记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1相关文章:
Linux之MySQL日志
前言 数据库就像一个庞大的图书馆,而日志则是记录这个图书馆内每一本书的目录。正如在图书馆中找到特定书籍一样,数据库日志帮助我们追溯数据的变更、定位问题和还原状态。 在MySQL中,日志是非常重要的一个组成部分,它记录了数据…...
Redis集群模式—主从集群、哨兵集群、分片集群
主从集群 主从模式中,包括一个主节点(Master)和一个或多个从节点(Slave)。主节点负责处理所有写操作和读操作,而从节点则复制主节点的数据,并且只能处理读操作。当主节点发生故障时,…...
并发工具类(二):CyclicBarrier
1、CyclicBarrier 介绍 从字面上看 CyclicBarrier 就是 一个循环屏障,它也是一个同步助手工具,它允许多个线程 在执行完相应的操作后彼此等待共同到达一个屏障点。 CyclicBarrier可以被循环使用,当屏障点值变为0之后,可以在接下来…...
Spring Cloud全解析:负载均衡之Ribbon简介
Ribbon简介 Ribbon是一种客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起,提供了一系列完善的配置如连接超时、重试等,Ribbon会自动的帮助基于某种规则(如简单轮询、随机连接等)去连接那些机器,也可以自定义的负载均衡…...
Kettle安装与使用指南
1. 介绍 什么是Kettle? Kettle,全称Pentaho Data Integration (PDI),是Pentaho BI套件的一部分。它提供了一个可视化的ETL工具,允许用户通过图形界面设计复杂的数据集成流程。Kettle支持多种数据源,包括关系型数据库…...
教育行业解决方案:智能PPT在教育行业的创新应用
在信息化时代,教育行业面临着巨大的变革。随着人工智能技术的不断发展,传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者,推出了歌者 PPT &彩漩 PPT,为教师、学生和家长提供了一种全新的教育体验,实现了…...
Matlab程序练习
Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序: 主文件:main.m clear; start_num 100; end_num 999; div_num 21; res div(start_num,end_num,div_num); fprintf("[%d,%d]之间能被%d整除的数的个数为%d个\n",start_num,end_…...
cesium可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?
废话:你的球是不是很丑?是不是没有科技感?是不是没有好看的影像? 因果: 因:客户问,底图可不可以改变颜色,想让球更漂亮一些。 答:可以改变影像饱和度,透明度…...
MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?
通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析,核心逻辑如下: 通过注解配置的MappedStatement 核心逻辑就在这个里面了: 继承BaseMapper的MappedStatement 我们看看这个类,里…...
Netty系列-2 NioServerSocketChannel和NioSocketChannel介绍
背景 本文介绍Netty的通道组件NioServerSocketChannel和NioSocketChannel,从源码的角度介绍其实现原理。 1.NioServerSocketChannel Netty本质是对NIO的封装和增强,因此Netty框架中必然包含了对于ServerSocketChannel的构建、配置以及向选择器注册&am…...
智能客服的四大优势,提升企业服务效率
在这个信息化快速发展的时代,客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求,于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式,还提高了服务效率和客户满意度。本文将深入探讨智能客…...
AutoGPT开源项目解读
AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统,能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md,下述代理和智能体两个名词可互换 项目简介:一个创建和运行智能体的工具,这些智能体…...
Linux离线安装fontconfig
Linux离线下载yum包,安装字体库 一、下载安装包 以CentOS Linux release 7.9.2009下载fontconfig的rpm包的为例 http://mirror.centos.org/centos/7/按提示跳转历史库 找到对应版本的centos https://vault.centos.org/7.9.2009/os/x86_64/Packages/在Packages目…...
海山数据库(He3DB)+AI:(一)神经网络基础
文章目录 1 引言2 基本结构2.1 神经元2.2 模型结构 3 训练过程3.1 损失函数3.2 反向传播3.3 基于梯度的优化算法 4 总结 1 引言 神经网络可以被视为一个万能的拟合器,通过深层的隐藏层实现输入数据到输出结果的映射。神经网络的思想源于对大脑的模拟,在…...
CSS中选择器有哪些?(史上最全选择器)
CSS选择器是用来选择和应用样式到HTML元素上的工具。以下是所有主要的CSS选择器的详细分类和描述: 1. 基本选择器 通配符选择器 (*):选择所有元素。例如,* { color: red; } 会将所有元素的文字颜色设置为红色。元素选择器:选择指…...
本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师
话接上篇: 本地部署 AI 智能体,Dify 搭建保姆级教程(上):工作流 Agent,把 AI 接入个人微信 相信大家已经在本地搭建好 Dify 了。 今日分享,继续介绍 Dify 的另外两项重要功能: 知…...
HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版
这篇文章是高级题库答案纯享版,只有需要选择的选项。如果需要查看所有选项,可以点击下方链接跳转。以考代学,还是推荐点击下方链接,查看完整的题库,边看边学习鸿蒙应用开发。此题库已更新完毕,笔者将不继续…...
基于PHP的文件包含介绍
引言:在实际开发过程中,经常会遇到部分模块功能需要重复使用的情况,比如数据库的增删改查,文件包含通过将需要重复使用的功能模块代码引入其他文件的内容,实现重用代码、分离配置等。然而,如果文件包含操作…...
K7系列FPGA多重启动(Multiboot)
Xilinx 家的 FPGA 支持多重启动功能(Multiboot),即可以从多个 bin 文件中进行选择性加载,从而实现对系统的动态更新,或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...
关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)
一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1,T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1,R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚...
XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
系统设计 --- MongoDB亿级数据查询优化策略
系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log,共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题,不能使用ELK只能使用…...
多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验
一、多模态商品数据接口的技术架构 (一)多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如,当用户上传一张“蓝色连衣裙”的图片时,接口可自动提取图像中的颜色(RGB值&…...
【git】把本地更改提交远程新分支feature_g
创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
MySQL用户和授权
开放MySQL白名单 可以通过iptables-save命令确认对应客户端ip是否可以访问MySQL服务: test: # iptables-save | grep 3306 -A mp_srv_whitelist -s 172.16.14.102/32 -p tcp -m tcp --dport 3306 -j ACCEPT -A mp_srv_whitelist -s 172.16.4.16/32 -p tcp -m tcp -…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
