mysql慢查询日志按天切割归纳
问题描述:
mysql开启慢查询功能,再正常不过,那么存在这样一种情况:慢查询写入的文件位置和文件名是指定好的,如果慢查询时间设定严苛,不出意外,记录慢查询的单个文件大小会日益增大,几十兆或者上百兆,带来的问题也就是慢查询日志分析处理不够方便。
解决思路:
切割日志,再通过定时任务(crontab)按规定时间切分,一般按“天”切分。
测试环境:
mysql5.6和mysql5.7
实现方法:
方法一:通过mysqladmin flush-logs [log_type] (注:mysql5.6无法指定日志类型,见测试过程)
方法二:通定时任务每次去设定慢查询路径实现
说明:以下测试过程是方法一的测试,最终实现脚本见页底。
测试过程:
1. 截取mysql5.7官方文档中的mysqladm部分说明
flush-logs [log_type ...] Flush all logs. The mysqladmin flush-logs command permits optional log types to be given, to specify which logs to flush. Following the flush-logs command, you can provide a space-separated list of one or more of the following log types: binary, engine, error, general, relay, slow. These correspond to the log types that can be specified for the FLUSH LOGS SQL statement.
注意:“[log_type ...]” 这个附加参数仅适用于mysql5.7.x或以上版本,也就是说,mysql5.6可以使用mysqladm flush-logs命令,但不能指定刷新某种指定日志类型,这很重要,因为这样意味着mysql5.6执行该命令,就刷新了所有类型的日志,所以mysql5.6根据具体情况选择使用。
2. 确定一下mysql版本和对应的数据存放目录(开起了binLog和慢查询)
说明:以下只显示二进制日志和慢查询日志文件详情,留意文件时间变化
[root@server-10 ~]# mysql -V
mysql Ver 14.14 Distrib 5.7.23, for Linux (x86_64) using EditLine wrapper
[root@server-10 ~]# cd /var/lib/mysql
[root@server-10 mysql]# touch *
[root@server-10 mysql]# ls -l |grep -E "master-bin|server-10-slow.log"
-rw-r----- 1 mysql mysql 177 Sep 15 10:53 master-bin.000001
-rw-r----- 1 mysql mysql 421 Sep 15 10:53 master-bin.000002
-rw-r----- 1 mysql mysql 885 Sep 15 10:53 master-bin.000003
-rw-r----- 1 mysql mysql 634 Sep 15 10:53 master-bin.000004
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000005
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000006
-rw-r----- 1 mysql mysql 154 Sep 15 10:53 master-bin.000007
-rw-r----- 1 mysql mysql 140 Sep 15 10:53 master-bin.index
-rw-r----- 1 mysql mysql 1473 Sep 15 10:53 server-10-slow.log
3. 【测试】刷新二进制文件
[root@server-10 mysql]# mysqladmin -uroot -p flush-logs binary
Enter password:
[root@server-10 mysql]# ls -l |grep -E "master-bin|server-10-slow.log"
-rw-r----- 1 mysql mysql 177 Sep 15 10:53 master-bin.000001
-rw-r----- 1 mysql mysql 421 Sep 15 10:53 master-bin.000002
-rw-r----- 1 mysql mysql 885 Sep 15 10:53 master-bin.000003
-rw-r----- 1 mysql mysql 634 Sep 15 10:53 master-bin.000004
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000005
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000006
-rw-r----- 1 mysql mysql 202 Sep 15 10:57 master-bin.000007
-rw-r----- 1 mysql mysql 154 Sep 15 10:57 master-bin.000008 //二进制日志已经更新为000008
-rw-r----- 1 mysql mysql 160 Sep 15 10:57 master-bin.index
-rw-r----- 1 mysql mysql 1473 Sep 15 10:53 server-10-slow.log //留意时间未变化,只指定了binary,故慢查询日志没有更新
4. 刷新慢查询日志文件
[root@server-10 mysql]# mysqladmin -uroot -p flush-logs slow
Enter password:
[root@server-10 mysql]# ls -l |grep -E "master-bin|server-10-slow.log"
-rw-r----- 1 mysql mysql 177 Sep 15 10:53 master-bin.000001
-rw-r----- 1 mysql mysql 421 Sep 15 10:53 master-bin.000002
-rw-r----- 1 mysql mysql 885 Sep 15 10:53 master-bin.000003
-rw-r----- 1 mysql mysql 634 Sep 15 10:53 master-bin.000004
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000005
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000006
-rw-r----- 1 mysql mysql 202 Sep 15 10:57 master-bin.000007
-rw-r----- 1 mysql mysql 298 Sep 15 11:04 master-bin.000008
-rw-r----- 1 mysql mysql 160 Sep 15 10:57 master-bin.index
-rw-r----- 1 mysql mysql 1656 Sep 15 11:04 server-10-slow.log //慢查询文件刷新了(文件描述符已经改变),但这里不会生成多个文件
5. 归纳旧慢查询日志,生成新慢查询日志文件
[root@server-10 mysql]# mv server-10-slow.log server-10-slow.log.old
[root@server-10 mysql]# ls -l |grep -E "master-bin|server-10-slow.log"
-rw-r----- 1 mysql mysql 177 Sep 15 10:53 master-bin.000001
-rw-r----- 1 mysql mysql 421 Sep 15 10:53 master-bin.000002
-rw-r----- 1 mysql mysql 885 Sep 15 10:53 master-bin.000003
-rw-r----- 1 mysql mysql 634 Sep 15 10:53 master-bin.000004
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000005
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000006
-rw-r----- 1 mysql mysql 202 Sep 15 10:57 master-bin.000007
-rw-r----- 1 mysql mysql 298 Sep 15 11:04 master-bin.000008
-rw-r----- 1 mysql mysql 160 Sep 15 10:57 master-bin.index
-rw-r----- 1 mysql mysql 1656 Sep 15 11:04 server-10-slow.log.old
[root@server-10 mysql]# mysqladmin -uroot -p flush-logs slow
Enter password:
[root@server-10 mysql]# ls -l |grep -E "master-bin|server-10-slow.log"
-rw-r----- 1 mysql mysql 177 Sep 15 10:53 master-bin.000001
-rw-r----- 1 mysql mysql 421 Sep 15 10:53 master-bin.000002
-rw-r----- 1 mysql mysql 885 Sep 15 10:53 master-bin.000003
-rw-r----- 1 mysql mysql 634 Sep 15 10:53 master-bin.000004
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000005
-rw-r----- 1 mysql mysql 202 Sep 15 10:53 master-bin.000006
-rw-r----- 1 mysql mysql 202 Sep 15 10:57 master-bin.000007
-rw-r----- 1 mysql mysql 442 Sep 15 11:18 master-bin.000008
-rw-r----- 1 mysql mysql 160 Sep 15 10:57 master-bin.index
-rw-r----- 1 mysql mysql 183 Sep 15 11:18 server-10-slow.log //新生成的慢查询日志,新的慢查询会写入该文件中
-rw-r----- 1 mysql mysql 1656 Sep 15 11:04 server-10-slow.log.old
[root@server-10 mysql]# date
Sat Sep 15 11:18:20 CST 2018
注意:不能单纯地仅重命名,上面重命名成了server-10-slow.log.old,如果不刷新,那么新的慢查询语句还会写入server-10-slow.log.old中,linux下存在“文件描述符”这么一个概念,改名不能修改文件描述符。
解决方法:
回到主题:按天切分归纳慢查询日志
方法一:通过mysqladmin flush-logs [log_type] (注:mysql5.6无法指定日志类型,见上文)
新建脚本:cut_slow_log.sh
#!/bin/bash
time=`date -d yesterday +"%Y-%m-%d"`
user="root"
passwd="xxxxxx"
#提前创建好一个存放目录:/var/lib/mysql/slow_log/
mv /var/lib/mysql/server--slow.log /var/lib/mysql/slow_log/server--slow-$time.log
mysqladmin -u$user -p$passwd --socket=/var/lib/mysql/mysql.sock flush-logs slow
每天0点执行该脚本
* * * sh /root/cut_slow_log.sh > /dev/null >&1
方法二:通定时任务每次去设定慢查询路径实现
新建脚本:cut_slow_log.sh
#!/bin/bash time=`date -d yesterday +"%Y-%m-%d"`
host="127.0.0.1"
user="root"
passwd="xxxxxx"
#提前创建好一个存放目录:/var/lib/mysql/slow_log/
mv /var/lib/mysql/server--slow.log /var/lib/mysql/slow_log/server--slow-$time.log
mysql -u$user -p$passwd -e "set global slow_query_log_file='/var/lib/mysql/server-10-slow.log';"
每天0点执行该脚本
* * * sh /root/cut_slow_log.sh > /dev/null >&
结束.
mysql慢查询日志按天切割归纳的更多相关文章
- mysql慢查询日志分析工具 mysqlsla(转)
mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...
- MySQL 慢查询日志分析及可视化结果
MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...
- ELK logstash 处理MySQL慢查询日志(初步)
写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数 ...
- MySQL慢查询日志
实验环境: OS X EI Captian + MySQL 5.7 一.配置MySQL自动记录慢查询日志 查看变量,也就是配置信息 show (global) variables like '%slo ...
- MySQL慢查询日志释疑总结
之前写了一篇"MySQL慢查询日志总结",总结了一些MySQL慢查询日志常用的相关知识,这里总结一下在工作当中遇到关于MySQL慢查询日志的相关细节问题,有些是释疑或自己有疑惑 ...
- 企业级中带你ELK如何实时收集分析Mysql慢查询日志
什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...
- MySQL慢查询日志相关的文件配置和使用。
MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可 ...
- MySQL 慢查询日志配置与简析
MySQL慢查询日志配置与简析 By:授客 QQ:1033553122 <1> 查看是否开启慢查询日志 SHOW VARIABLES LIKE 'slow%'; 说明: a. 如果sl ...
- (6) MySQL慢查询日志的使用
一. 设置方法 使用慢查询日志里捕获 启用之前需要先进行一些设置 方法一:全局变量设置 设置慢查询日志的日志文件位置 set global slow_query_log_file = "D: ...
随机推荐
- CAP理论和Base理论
CAP理论 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容错性) 可靠性, ...
- C#开发WEBService服务 C++开发客户端调用WEBService服务
编写WEBService服务端应用程序并部署 http://blog.csdn.net/u011835515/article/details/47615425 编写调用WEBService的C++客户 ...
- Linux查杀stopped进程
在Linux系统下面,top命令可以查看查看stopped进程.但是不能查看stopped进程的详细信息.那么如何查看stopped 进程,并且杀掉这些stopped进程呢? ps -e j | ...
- webmagic 基本的方法
WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件,并由Spider将它们彼此组织起来.这四大组件对应爬虫生命周期中的下载.处理. ...
- AngularJS学习之旅—AngularJS 服务(八)
1.AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务.2.什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 Angular ...
- WIN提权总结【本地存档-转载】
[ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1 ...
- 研究好vif 和vshow
另外从源头上处理的???,怎么自己排查出错误??必须 ??https://www.jb51.net/article/124116.htm
- 关于idea在运行web项目时部署的位置
(转) 以前一直很好奇,在idea中运行tomcat,把项目部署到其中,运行起来,然后我去tomcat目录下去看,根本找不到我部署的项目 那我的项目是咋运行的啊… - - 后来我就查啊查 ,纠结啊纠结 ...
- day 15 模块、起别名、from导入
模块 '''模块:一系列功能的集合体定义模块:创建一个py文件就是一个模块,该py文件名就是模块名使用模块:在要使用模块的文件中,通过 import 模块名 来导入模块 ''''''import ...
- c# winform 多屏显示
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...