【Mysql高级】日志(上)系统出现问题,如何及时发现?


前言

MySQL 的日志种类非常多,包括通用查询日志、慢查询日志、错误日志、二进制日志、中继日志、重做日志和回滚日志,内容比较多,而且都很重要,所以我们来花两节课的时间学习一下。
这节课,我会先具体讲一讲通用查询日志慢查询日志错误日志


一、通用查询日志

1,概述

通用查询日志记录了所有用户的连接开始时间和截止时间,以及发给 MySQL 数据库服务器的所有 SQL 指令。当我们的数据发生异常时,开启通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题。

举个小例子,在超市项目实施的过程中,超市的 1 号门店在 12 月 1 日销售了 5 件化妆品,但是当天对应的历史库存并没有减少,这个时候我们想到了检查通用查询日志,看看当天到底发生了什么。
12 月 1 日下午,门店的收银台销售了 5 件化妆品,但是由于网络故障,流水没有及时上传到总部。12月2日上午,门店的网络恢复了,流水得以上传总部,这个时候,对应化妆品的库存才被消减掉。这样,我们就确定了故障的原因,也就是超市的网络问题,而系统本身是没有问题的。你看,通用查询日志可以帮助我们了解操作发生的具体时间和操作的细节,对找出异常发生的原因极其关键。

下面我来具体介绍一下控制通用查询日志的系统变量。通过这些量,你会清楚怎么控制定用查询日志的开启和关闭,以及保存日志的文件是哪个。

mysql> SHOW VARIABLES like "%general%";
+------------------+----------------------------------------------+
| Variable_name    | Value                                        |
+------------------+----------------------------------------------+
| general_log      | OFF                                          |
| general_log_file | /www/mysql_data/mysql-5.7.27/data/cz1998.log |
+------------------+----------------------------------------------+
2 rows in set (0.06 sec)

在这个查询的结果中,有 2 点需要我们注意一下。

  1. 系统变量 general_log 的值是 OFF,表示通用查询日志处于关闭状态。在 MySQL 中,这个参数的默认值是关闭的。因为一旦开启记录通用查询日志,MySQL 会记录所有的接起止和相关的 SQL 操作,这样会消耗系统资源并且占用磁盘空间。我们可以通过手云修改变量的值,在需要的时候开启日志。

  2. 通用查询日志文件的名称是 cz1998.log。这样我们就知道在哪里可以查看通用查询日志的内容了。下面我们来看看如何开启通用查询日志,把所有连接的起止和连接的 SQL 操作都记录下来。这个操作可以帮助我们追踪 SQL 操作故障的原因。

2,开启通用日志查询

我们可以通过设置系统变量的值,来开启通用查询日志,并且指定通用查询日志的文件夹’’/www/mysql_data/mysql-5.7.27/data/cz19981.log’’

mysql> set GLOBAL general_log = ON;
Query OK, 0 rows affected (0.24 sec)

mysql> SET @@global.general_log_file = '/www/mysql_data/mysql-5.7.27/data/cz19981.log'
    -> ;
Query OK, 0 rows affected (0.26 sec)

mysql> SHOW VARIABLES like "%general%";
+------------------+-----------------------------------------------+
| Variable_name    | Value                                         |
+------------------+-----------------------------------------------+
| general_log      | ON                                            |
| general_log_file | /www/mysql_data/mysql-5.7.27/data/cz19981.log |
+------------------+-----------------------------------------------+
2 rows in set (0.07 sec)

结果显示,日志已经开启,并且日志文件是 我们文件所指定的cz19981.log,我们查看下 日志文件:

###这是连接信息
2022-02-10T14:08:58.747354Z	  723 Connect	root@112.24.220.133 on  using TCP/IP
2022-02-10T14:08:58.796518Z	  723 Query	SET NAMES utf8mb4
2022-02-10T14:08:58.841941Z	  723 Init DB	blog
2022-02-10T14:08:58.891873Z	  723 Init DB	blog
###这是查询所有的表
2022-02-10T14:08:58.937343Z	  723 Query	SHOW FULL TABLES WHERE Table_type != 'VIEW'
2022-02-10T14:08:58.993906Z	  718 Init DB	blog
2022-02-10T14:08:59.034453Z	  718 Query	SHOW TABLE STATUS
###更新信息
2022-02-10T14:18:28.495893Z	  724 Query	UPDATE `blog`.`ms_admin` SET `username` = 'mszlu' WHERE `id` = 2
2022-02-10T14:18:28.535568Z	  724 Query	SELECT * FROM `blog`.`ms_admin` WHERE `id` = 2

在通用查询日志里面,我们可以清楚地看到,账号“root”是什么时间登录的
服务器,登录之后做了什么 SQL 操作,针对的是哪个数据表等信息。

3,删除查询日志

##关闭日志
set GLOBAL general_log =  'OFF'
##将日志文件移动到备份文件夹,然后就就空间位置



##打开日志文件
set GLOBAL general_log =  'ON'

这个时候,你会发现,MySQL已经给我们准备好了一个新的通用查询日志文件
“cz19981.log”,并且记录了我们第一个查询的语句

二,慢查询日志

1,概述

慢查询日志用来记录执行时间超过指定时长的查询。它的主要作用是,帮助我们发现那些执行时间特别长的 SQL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。,

2,配置文件设置

mysql配置文件 /etc/my.cnf

slow_query_log=1 -- 表示开启慢查询日志,系统将会对慢查询进行记录。
slow_query_log_file="mysql-slow.log" --表示慢查询日志的名称是"mysql-slow.log"
Long_query_time=10 -- 表示慢查询的标准是查询执行时间超过10秒

除了刚刚的这些变量,控制慢查询日志的还有一个系统变量:min_examined_row_limit这个变量的意思是,查询扫描过的最少记录数。这个变量和查询执行时间,共同组成了判别一个查询是否是慢查询的条件。如果查询扫描过的记录数大于等于这个变量的值,并且查询执行时间超过 long_query_time 的值,那么,这个查询就被记录到慢查询日志中;反之,则不被记录到慢查询日志中。

mysql> SHOW VARIABLES like "min%";
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| min_examined_row_limit | 0     |
+------------------------+-------+
1 row in set (0.06 sec)

这个值默认是 0。与 long_query_time=10 合在一起,表示只要查询的执行时间超过 10秒钟,哪怕一个记录也没有扫描过,都要被记录到慢查询日志中。你也可以根据需要,通过修改“my.ini”文件,来修改查询时长,或者通过 SET 指令,用 SQL 语句修改“min_examined_row_limit”的值。

这是慢查询的一个日志:

在这里插入图片描述
在这里插入图片描述


三,错误日志

1,概述
日志记录了 MySQL 服务器启动、停止运行的时间,以及系统启动、运行和停止过程中的诊断信息,包括错误、警告和提示等。当我们的数据库服务器发生系统故障时,错误日志是发现问题、解决故障的首选。错误日志默认是开启的。我们可以在 MySQL 的配置文件“/etc/my.cnf”中配置它:

Error Logging. 
log-error="GJTECH-PC.err"
这段代码指定了错误日志的文件名。如果没有指定文件夹,默认就是数据目录:

总结

  • 通用查询日志:可以记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助。

  • 慢查询日志:可以记录运行时间和检查记录数超过指定值的查询,方便我们对查询进行优化

  • 错误日志:它记录了服务器启动、运行和停止过程中的诊断信息,方便我们了解服务器的状态,从而对服务器进行维护。

注意:
lunix下配置文件是:/etc/my.cnf
windows下配置文件是:my.ini
本文是lunix环境。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

学长代码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值