【快速说明】如何轮换 MySQL 的 slow.log 文件

你好。

正在接受培训的有抱负的工程师
我是系统解决方案部门的Hota,一名

 

你有没有过这样的经历?

“嗯,我闲着无聊,就试试输入df命令吧。”

“什么?/ 目录的使用率达到了 95%?为什么?!”

“让我想想,还有什么更多呢?”

“这……这到底是什么时候发生的?!怎么会堆积了这么多 MySQL slow.log 文件?!”

“我必须做点什么……但我该做什么呢?!”

在这种情况下,对数旋转是解决办法。

什么是对数旋转?

首先,让我们从这个词的含义开始。

日志...“记录”

轮流……“循环,轮流”

根据以上内容,轮换记录指的是“轮换日志文件”。

man 命令的输出还显示:

logrotate旨在简化生成大量日志文件的系统的管理。它设计
简洁易用,支持日志文件的自动轮换

每个日志文件都会按日、周、月或文件过大时进行处理

换句话说,这是一种防止因压缩或删除大量日志文件而占用过多磁盘空间的方法。

目标

本文将压缩存储 MySQL 慢查询的慢日志。

设置如下:

设置详情 价值
需要保留的日志 /var/lib/mysql/localhost-slow.log
自转周期 日常的
保留的世代数 第七代
慢日志确定时间 1.0(秒)

环境

操作系统/软件包 版本
核心 3.10.0
CentOS 7.2.1
MySQL 8.0.31
对数旋转 3.8.6

具体流程

MySQL慢查询日志输出设置

* 省略了 MySQL 安装。

检查初始设置

登录 MySQL 后,输入以下命令:

显示类似“%slow%”的变量;

○输出结果示例

+--------------------------+-----------------------------------+ | Variable_name | Value | +--------------------------+-----------------------------------+ | log_slow_admin_statements | OFF | | log_slow_extra | OFF | | log_slow_replica_statements | OFF | | log_slow_slave_statements | OFF | | slow_launch_time | 2 | /var/lib/mysql/localhost-slow.log | +-----------------------------+-----------------------------------+ 7 rows in set (0.31 sec)

启用 slow_query_log 后,慢查询日志将输出到 /var/lib/mysql/localhost-slow.log。

 

设置时间以确定查询是否为慢查询

设置全局变量 long_query_time = 1.0;

请使用以下命令验证更改是否已生效:

显示类似 '%query_time%' 的全局变量;

○ 输出结果

+-----------------+----------+ | 变量名 | 值 | +-----------------+----------+ | 查询耗时 | 1.000000 | +-----------------+----------+ 1 行结果 (0.01 秒)

 

启用慢查询日志输出设置

设置全局慢查询日志 = '开启';

如果以下命令的输出与示例输出类似,则说明没有问题。

显示类似 '%slow_query%' 的全局变量;

○输出结果示例

+---------------------+-----------------------------------+ | 变量名 | 值 | +---------------------+-----------------------------------+ | slow_query_log | 开启 |

 

 

为 FLUSH LOG 创建一个用户

创建用户“flush”@“localhost”,密码为“[任意密码]”;

要确认用户是否已创建,请检查以下命令的输出中是否存在该用户,如果登录成功,则说明创建成功。

从 mysql.user 表中选择用户和主机名;

 

 

授予用户清除日志的权限

GRANT RELOAD ON *.* TO 'flush'@'localhost';

要检查创建是否成功,请检查以下命令的输出,看看是否已授予预期的权限。

显示对 'flush'@'localhost' 的授权;

○输出结果示例

+----------------------------------------------------+ | 授予 flush@localhost 权限 | +----------------------------------------------------+ | 授予 `flush`@`localhost` 对 *.* 的 RELOAD 和 PROCESS 权限 | +----------------------------------------------------+ 1 行结果 (耗时 0.04 秒)

当创建的刷新用户登录时,调整权限。

vi /var/lib/mysql/.my.cnf

编辑内容

[客户端] 用户名=刷新密码=[在 4.1.4 中输入的密码。]

 

重新打开日志文件

mysql --defaults-extra-file=/var/lib/mysql/.my.cnf -e "FLUSH SLOW LOGS;"

如果没有输出错误,则表示成功!

日志轮换设置

  1. 编辑 slow.log 轮播配置文件
  2. 测试运行

编辑 slow.log 轮播配置文件

切换到工作目录
cd /etc/logrotate.d/
写入配置文件

*请以 root 用户身份创建此文件
(所需条件为:① 文件所有者/组为 root:root,② 文件权限设置为 644)。

vi mysql

↓描述

/var/lib/mysql/*slow.log { daily rotate 7 dateext missingok notifempty sharedscripts delaycompress copytruncate compress postrotate # 仅当 mysqld 确实在运行时执行 if test -x /usr/bin/mysqladmin /usr/bin/mysqladmin --defaults-extra-file=/var/lib/mysql/.my.cnf ping &> /dev/null then mysql --defaults-extra-file=/var/lib/mysql/.my.cnf -e "FLUSH SLOW LOGS;" fi endscript }

※解释

以上示例设置仅用于说明。
*还有更多选项可供使用,如果您感兴趣,请自行研究。您可以根据自身需求和实际情况自定义设置。

  1. 每日轮换(默认是每周轮换)
    每周
  2. 旋转 [任意数字] *在这种情况下,7
    是要保留的代数。
  3. missingok
    ,处理过程也会继续进行,而不会显示错误
  4. notifempty
    日志文件为空,则不会进行轮换。
  5. delaycompress(与 compress 一起使用)
    会将日志压缩延迟到下一次轮换。请与 compress 一起使用指定。
  6. 截断
    日志文件,并删除原始文件的内容。
  7. 压缩
    滚动日志。
  8. `postrotate` 和 `endscript`
    之间编写的命令
    (在本例中,如果 ping 通 `mysql` 成功,则该命令会重新加载 `slow.log` 文件。)

测试运行

现在我们只能祈祷不要出现任何错误。

logrotate -dv /etc/logrotate.d/mysql

执行详情将会输出,只要没有错误信息就没问题。

最后

这次,我们介绍了如何轮换 MySQL slow.log 文件!

服务运行时,日志不可避免地会不断累积。

并非每个人都能无限扩展磁盘容量,所以一定要明智地轮换使用磁盘,过节俭的生活!

如果您觉得这篇文章对您有帮助,请点个“赞”!
8
加载中...
8票,平均分:1.00/18
6,181
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

最多

我是一名实习工程师。