【简单讲解】如何记录rotate MySQL的slow.log文件
你好。
是一名学徒工程师
大家是否也有这样的时刻呢? ?
“好吧,现在我有一些空闲时间,我可能会尝试输入 df 命令。”
“嗯,/目录使用率为95%??”
“哪一种最常见?”
“我、我,这是什么时候的事啊!?MySQL 的slow.log 文件堆积了这么多!?”
“我必须做点什么……但我该怎么办!!!”
在这种情况下,请使用日志轮转。
什么是日志轮换?
首先,我们来看看这些词的含义。
记录…“记录”
旋转……“循环、轮流”
综上所述,替换记录的意思是“替换日志文件”。
man 命令的结果还显示:
logrotate 旨在简化生成大量日志文件的系统的管理。
专为易于管理而设计。 日志文件可以自动轮换、压缩、删除和通过电子邮件发送。
日志文件可以自动轮转、压缩、删除和邮寄。 每个日志文件每天、每周、每月或当它变得太大时都会被处理。
每个日志文件每天、每周、每月或当它变得太大时都会被处理。
换句话说,它是一种避免压缩或删除大量日志文件以免压垮磁盘空间的技术。
目标
在本文中,我们将压缩存储MySQL慢查询的慢日志。
设置如下。
设置详情 | 价值 |
要保留的日志 | /var/lib/mysql/localhost-slow.log |
轮换周期 | 日常的 |
保留代数 | 7(一代) |
日志判断时间慢 | 1.0(秒) |
环境
操作系统/软件包 | 版本 |
核心 | 3.10.0 |
中央操作系统 | 7.2.1 |
MySQL | 8.0.31 |
对数旋转 | 3.8.6 |
混凝土流动
MySQL慢查询日志输出设置
*省略MySQL安装。
检查初始设置
登录 MySQL 后输入以下命令。
显示类似“%slow%”的变量;
○输出结果示例
+--------------------------------------+-------------------- --- -----------+ | 变量名 | +-------------------------- --+- ----------------------------------+ | log_slow_extra | 关闭 | | log_slow_slave_statements | 慢速查询日志 | /var/lib/mysql-slow.log | -----------+------------------------------------------------ -+ 7集合中的行(0.31 秒)
通过打开slow_query_log,慢日志似乎输出到/var/lib/mysql/localhost-slow.log。
设置判断时间为慢查询
设置全局 long_query_time = 1.0;
使用以下命令验证是否已进行更改
显示全局变量如“%query_time%”;
○输出结果
+----------------+----------+ | 变量名称 | +-------------- ---+----------+ | 1.000000 | +----------------+----------+一组 1 行(0.01 秒)
打开慢查询日志输出设置
设置全局 Slow_query_log = 'ON';
如果以下命令的输出与示例输出结果类似,则没有问题。
显示全局变量如“%slow_query%”;
○输出结果示例
+--------------------------------+---------------------------------------- --------+ | 变量名 | +--------------------+------------ - ----------------------+ | Slow_query_log_file | /var/lib/mysql/localhost-slow.log | -------------------+---------------------------------------- -- --+ 2 行一组(0.03 秒)
为 FLUSH LOG 创建用户
创建由“[任何密码]”标识的用户“flush”@“localhost”;
要检查是否已经创建,除了下面命令输出中用户是否存在外,如果实际登录成功就OK了。
从mysql.user中选择用户、主机;
授予用户 FLUSH LOG 权限
将 *.* 上的重新加载授予 'flush'@'localhost';
要检查它是否已创建,请检查以下命令的输出中是否已授予预期权限。
显示 'flush'@'localhost' 的补助金;
○输出结果示例
+------------------------------------------------ ----+ | 资助flush@localhost | +------------------------------------ - ---------------+ | 授予重新加载、处理 *.* 到 `flush`@`localhost` | +------------- -- ----------------------------------+ 一组 1 行(0.04 秒)
调整创建的flush用户登录时的权限
vi /var/lib/mysql/.my.cnf
○编辑内容
[client] user=flush 密码=[4.1.4中输入的密码。]
重新打开日志文件
mysql --defaults-extra-file=/var/lib/mysql/.my.cnf -e "刷新慢日志;"
如果没有输出错误就成功了!
日志轮换设置
- 编辑slow.log轮换配置文件
- 试运行
编辑slow.log轮换配置文件
移动到工作目录
cd /etc/logrotate.d/
编写配置文件
*请创建为root用户
(要求是1)文件所有者/组是root:root 2)文件权限是644)
vi mysql
↓描述内容
/var/lib/mysql/*slow.log { dailyrotate 7 dateextmissingoknotifemptysharedscriptsdelaycompresscopytruncatecompresspostrotate#只要mysqld确实在运行iftest-x/usr/bin/mysqladmin/usr/bin/mysqladmin--defaults- extra-file=/var/lib/mysql/.my.cnf ping &> /dev/null 然后 mysql --defaults-extra-file=/var/lib/mysql/.my.cnf -e "FLUSH SLOW LOGS; “ fi 尾稿 }
*解释
我们将解释上面的设置示例。
*还有很多选择,有兴趣的话请看一下。您可以使其适应您想要执行的条件和情况。
- 每天(默认每周)
每周轮换 - 旋转[任意数字] *这次 7
决定要保留的代数 - missingok
即使日志文件不存在也继续处理而不出错 - notifempty
如果日志文件为空,则不旋转日志文件 - 延迟压缩 *与压缩结合使用,
将日志压缩延迟到下一次循环。指定压缩 - copytruncate复制
日志文件并删除源内容 - compress
使用 gzip 压缩旋转日志 - postrotate ~ endscript
之间写入的命令
(在此示例中,如果建立了与 mysql 的 ping 通信,则将重新加载 Slow.log 文件。)
试运行
现在,剩下要做的就是希望不要发生错误。
logrotate -dv /etc/logrotate.d/mysql
会输出要执行的内容,所以如果没有错误语句就OK了。
最后
这次,我们介绍如何轮转MySQL的slow.log文件!
当服务运行时,日志不可避免地会积累。
不是每个人都能无限扩展磁盘容量,所以请明智地轮换磁盘,节俭生活!