当前位置: 首页 > news >正文

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_basenamebinlog日志的基本文件名,产生的bin-log文件名即为bin-log.*
log_bin_indexbinlog文件的索引文件,管理所有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日志

前言 数据库就像一个庞大的图书馆&#xff0c;而日志则是记录这个图书馆内每一本书的目录。正如在图书馆中找到特定书籍一样&#xff0c;数据库日志帮助我们追溯数据的变更、定位问题和还原状态。 在MySQL中&#xff0c;日志是非常重要的一个组成部分&#xff0c;它记录了数据…...

Redis集群模式—主从集群、哨兵集群、分片集群

主从集群 主从模式中&#xff0c;包括一个主节点&#xff08;Master&#xff09;和一个或多个从节点&#xff08;Slave&#xff09;。主节点负责处理所有写操作和读操作&#xff0c;而从节点则复制主节点的数据&#xff0c;并且只能处理读操作。当主节点发生故障时&#xff0c;…...

并发工具类(二):CyclicBarrier

1、CyclicBarrier 介绍 从字面上看 CyclicBarrier 就是 一个循环屏障&#xff0c;它也是一个同步助手工具&#xff0c;它允许多个线程 在执行完相应的操作后彼此等待共同到达一个屏障点。 CyclicBarrier可以被循环使用&#xff0c;当屏障点值变为0之后&#xff0c;可以在接下来…...

Spring Cloud全解析:负载均衡之Ribbon简介

Ribbon简介 Ribbon是一种客户端的软件负载均衡算法&#xff0c;将Netflix的中间层服务连接在一起&#xff0c;提供了一系列完善的配置如连接超时、重试等&#xff0c;Ribbon会自动的帮助基于某种规则(如简单轮询、随机连接等)去连接那些机器&#xff0c;也可以自定义的负载均衡…...

Kettle安装与使用指南

1. 介绍 什么是Kettle&#xff1f; Kettle&#xff0c;全称Pentaho Data Integration (PDI)&#xff0c;是Pentaho BI套件的一部分。它提供了一个可视化的ETL工具&#xff0c;允许用户通过图形界面设计复杂的数据集成流程。Kettle支持多种数据源&#xff0c;包括关系型数据库…...

教育行业解决方案:智能PPT在教育行业的创新应用

在信息化时代&#xff0c;教育行业面临着巨大的变革。随着人工智能技术的不断发展&#xff0c;传统教学方式正在被重新定义。彩漩科技作为 AI 技术的先行者&#xff0c;推出了歌者 PPT &彩漩 PPT&#xff0c;为教师、学生和家长提供了一种全新的教育体验&#xff0c;实现了…...

Matlab程序练习

Part1 1.求 [100,999] 之间能被 21整除的数的个数。 程序&#xff1a; 主文件&#xff1a;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可不可以改变影像底图颜色,如何给地球底图影像添加一层滤镜蒙版?

废话&#xff1a;你的球是不是很丑&#xff1f;是不是没有科技感&#xff1f;是不是没有好看的影像&#xff1f; 因果&#xff1a; 因&#xff1a;客户问&#xff0c;底图可不可以改变颜色&#xff0c;想让球更漂亮一些。 答&#xff1a;可以改变影像饱和度&#xff0c;透明度…...

MyBatis-MappedStatement什么时候生成?QueryWrapper如何做到动态生成了SQL?

通过XML配置的MappedStatement 这部分MappedStatement主要是由MybatisXMLMapperBuilder进行解析&#xff0c;核心逻辑如下&#xff1a; 通过注解配置的MappedStatement 核心逻辑就在这个里面了&#xff1a; 继承BaseMapper的MappedStatement 我们看看这个类&#xff0c;里…...

Netty系列-2 NioServerSocketChannel和NioSocketChannel介绍

背景 本文介绍Netty的通道组件NioServerSocketChannel和NioSocketChannel&#xff0c;从源码的角度介绍其实现原理。 1.NioServerSocketChannel Netty本质是对NIO的封装和增强&#xff0c;因此Netty框架中必然包含了对于ServerSocketChannel的构建、配置以及向选择器注册&am…...

智能客服的四大优势,提升企业服务效率

在这个信息化快速发展的时代&#xff0c;客户服务的重要性越来越凸显。传统的客服方式已经无法满足企业日益增长的服务需求&#xff0c;于是智能客服服务应运而生。智能客服服务不仅改变了企业与客户的互动方式&#xff0c;还提高了服务效率和客户满意度。本文将深入探讨智能客…...

AutoGPT开源项目解读

AutoGPT开源项目解读 (qq.com) AutoGPT旨在创建一个自动化的自我改进系统&#xff0c;能够自主执行和学习各种任务 项目基本信息 首先阅读项目的README.md&#xff0c;下述代理和智能体两个名词可互换 项目简介&#xff1a;一个创建和运行智能体的工具&#xff0c;这些智能体…...

Linux离线安装fontconfig

Linux离线下载yum包&#xff0c;安装字体库 一、下载安装包 以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 引言 神经网络可以被视为一个万能的拟合器&#xff0c;通过深层的隐藏层实现输入数据到输出结果的映射。神经网络的思想源于对大脑的模拟&#xff0c;在…...

CSS中选择器有哪些?(史上最全选择器)

CSS选择器是用来选择和应用样式到HTML元素上的工具。以下是所有主要的CSS选择器的详细分类和描述&#xff1a; 1. 基本选择器 通配符选择器 (*)&#xff1a;选择所有元素。例如&#xff0c;* { color: red; } 会将所有元素的文字颜色设置为红色。元素选择器&#xff1a;选择指…...

本地部署 AI 智能体,Dify 搭建保姆级教程(下):知识库 RAG + API 调用,我捏了一个红楼解读大师

话接上篇&#xff1a; 本地部署 AI 智能体&#xff0c;Dify 搭建保姆级教程&#xff08;上&#xff09;&#xff1a;工作流 Agent&#xff0c;把 AI 接入个人微信 相信大家已经在本地搭建好 Dify 了。 今日分享&#xff0c;继续介绍 Dify 的另外两项重要功能&#xff1a; 知…...

HarmonyOS应用开发者高级认证,Next版本发布后最新题库 - 答案纯享版

这篇文章是高级题库答案纯享版&#xff0c;只有需要选择的选项。如果需要查看所有选项&#xff0c;可以点击下方链接跳转。以考代学&#xff0c;还是推荐点击下方链接&#xff0c;查看完整的题库&#xff0c;边看边学习鸿蒙应用开发。此题库已更新完毕&#xff0c;笔者将不继续…...

基于PHP的文件包含介绍

引言&#xff1a;在实际开发过程中&#xff0c;经常会遇到部分模块功能需要重复使用的情况&#xff0c;比如数据库的增删改查&#xff0c;文件包含通过将需要重复使用的功能模块代码引入其他文件的内容&#xff0c;实现重用代码、分离配置等。然而&#xff0c;如果文件包含操作…...

K7系列FPGA多重启动(Multiboot)

Xilinx 家的 FPGA 支持多重启动功能&#xff08;Multiboot&#xff09;&#xff0c;即可以从多个 bin 文件中进行选择性加载&#xff0c;从而实现对系统的动态更新&#xff0c;或系统功能的动态调整。 这一过程可以通过嵌入在 bit 文件里的 IPROG 命令实现上电后的自动加载。而…...

关于武汉芯景科技有限公司的RS232通信接口芯片XJ3243EEUI开发指南(兼容MAX3243EEUI)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、典型应用电路 三、功能描述 1.Transmitter 通过T1&#xff0c;T2可以将TTL电平转换为RS232电平 2.Receiver 通过R1&#xff0c;R2可以将RS232电平转换为TTL电平 3.工作模式控制 4.INVALID引脚...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

pam_env.so模块配置解析

在PAM&#xff08;Pluggable Authentication Modules&#xff09;配置中&#xff0c; /etc/pam.d/su 文件相关配置含义如下&#xff1a; 配置解析 auth required pam_env.so1. 字段分解 字段值说明模块类型auth认证类模块&#xff0c;负责验证用户身份&am…...

鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序

一、开发准备 ​​环境搭建​​&#xff1a; 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 ​​项目创建​​&#xff1a; File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据

微软PowerBI考试 PL300-在 Power BI 中清理、转换和加载数据 Power Query 具有大量专门帮助您清理和准备数据以供分析的功能。 您将了解如何简化复杂模型、更改数据类型、重命名对象和透视数据。 您还将了解如何分析列&#xff0c;以便知晓哪些列包含有价值的数据&#xff0c;…...

基于鸿蒙(HarmonyOS5)的打车小程序

1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...

第八部分:阶段项目 6:构建 React 前端应用

现在&#xff0c;是时候将你学到的 React 基础知识付诸实践&#xff0c;构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段&#xff0c;你可以先使用模拟数据&#xff0c;或者如果你的后端 API&#xff08;阶段项目 5&#xff09;已经搭建好&#xff0c;可以直接连…...

HTTPS证书一年多少钱?

HTTPS证书作为保障网站数据传输安全的重要工具&#xff0c;成为众多网站运营者的必备选择。然而&#xff0c;面对市场上种类繁多的HTTPS证书&#xff0c;其一年费用究竟是多少&#xff0c;又受哪些因素影响呢&#xff1f; 首先&#xff0c;HTTPS证书通常在PinTrust这样的专业平…...

stm32进入Infinite_Loop原因(因为有系统中断函数未自定义实现)

这是系统中断服务程序的默认处理汇编函数&#xff0c;如果我们没有定义实现某个中断函数&#xff0c;那么当stm32产生了该中断时&#xff0c;就会默认跑这里来了&#xff0c;所以我们打开了什么中断&#xff0c;一定要记得实现对应的系统中断函数&#xff0c;否则会进来一直循环…...

深入浅出JavaScript中的ArrayBuffer:二进制数据的“瑞士军刀”

深入浅出JavaScript中的ArrayBuffer&#xff1a;二进制数据的“瑞士军刀” 在JavaScript中&#xff0c;我们经常需要处理文本、数组、对象等数据类型。但当我们需要处理文件上传、图像处理、网络通信等场景时&#xff0c;单纯依赖字符串或数组就显得力不从心了。这时&#xff…...

关于 ffmpeg设置摄像头报错“Could not set video options” 的解决方法

若该文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/148515355 长沙红胖子Qt&#xff08;长沙创微智科&#xff09;博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV…...