问题描述

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慢查询日志按天切割归纳的更多相关文章

  1. mysql慢查询日志分析工具 mysqlsla(转)

    mysql数据库的慢查询日志是非常重要的一项调优辅助日志,但是mysql默认记录的日志格式阅读时不够友好,这是由mysql日志记录规则所决定的,捕获一条就记录一条,虽说记录的信息足够详尽,但如果将浏览 ...

  2. MySQL 慢查询日志分析及可视化结果

    MySQL 慢查询日志分析及可视化结果 MySQL 慢查询日志分析 pt-query-digest分析慢查询日志 pt-query-digest --report slow.log 报告最近半个小时的 ...

  3. ELK logstash 处理MySQL慢查询日志(初步)

    写在前面:在做ELK logstash 处理MySQL慢查询日志的时候出现的问题: 1.测试数据库没有慢日志,所以没有日志信息,导致 IP:9200/_plugin/head/界面异常(忽然出现日志数 ...

  4. MySQL慢查询日志

    实验环境: OS X EI Captian + MySQL 5.7 一.配置MySQL自动记录慢查询日志 查看变量,也就是配置信息 show (global) variables like '%slo ...

  5. MySQL慢查询日志释疑总结

      之前写了一篇"MySQL慢查询日志总结",总结了一些MySQL慢查询日志常用的相关知识,这里总结一下在工作当中遇到关于MySQL慢查询日志的相关细节问题,有些是释疑或自己有疑惑 ...

  6. 企业级中带你ELK如何实时收集分析Mysql慢查询日志

    什么是Mysql慢查询日志? 当SQL语句执行时间超过设定的阈值时,便于记录到指定的日志文件中或者表中,所有记录称之为慢查询日志 为什么要收集Mysql慢查询日志? 数据库在运行期间,可能会存在这很多 ...

  7. MySQL慢查询日志相关的文件配置和使用。

    MySQL慢查询日志提供了超过指定时间阈值的查询信息,为性能优化提供了主要的参考依据,是一个非常实用的功能,MySQL慢查询日志的开启和配置非常简单,可以指定记录的文件(或者表),超过的时间阈值等就可 ...

  8. MySQL 慢查询日志配置与简析

    MySQL慢查询日志配置与简析 By:授客 QQ:1033553122   <1> 查看是否开启慢查询日志 SHOW VARIABLES LIKE 'slow%'; 说明: a. 如果sl ...

  9. (6) MySQL慢查询日志的使用

    一. 设置方法 使用慢查询日志里捕获 启用之前需要先进行一些设置 方法一:全局变量设置 设置慢查询日志的日志文件位置 set global slow_query_log_file = "D: ...

随机推荐

  1. OpenCL的buffer以及sub-buffer

    buffer,sub-buffer和image对比 相同点:都是OCL memory对象 维度 特性关键词 buffer 一维 array of bytes sub-buffer 一维 views i ...

  2. C语言检测指定文件是否存在的代码

    内容之余,将做工程过程中比较常用的一些内容片段珍藏起来,下面资料是关于C语言检测指定文件是否存在的内容,希望能对小伙伴们有所用. #include <stdbool.h> #include ...

  3. Android远程桌面助手扩展之微信跳一跳辅助

    微信跳一跳的外挂辅助已是五花八门,万能的TB上也有了各种明码标价的代练.微信小程序游戏的火爆甚至带火了手游外挂产业.另一方面,跳一跳游戏也在不断更新,防止使用外挂刷高分.Android远程桌面助手支持 ...

  4. 南京邮电大学java程序设计作业在线编程第八次作业

    程序设计类课程作业平台 王利国 主页 教学资源 我的作业列表 程序设计课 账户 王利国的"Java语言程序设计第8次作业(2018)"详细 主页 我的作业列表 作业结果详细 总分: ...

  5. KASAN实现原理【转】

    1. 前言 KASAN是一个动态检测内存错误的工具.KASAN可以检测全局变量.栈.堆分配的内存发生越界访问等问题.功能比SLUB DEBUG齐全并且支持实时检测.越界访问的严重性和危害性通过我之前的 ...

  6. 安装和使用git遇到的问题总结

    一,centos7下安装(因为centos7下用yum安装git的版本太低了,所以只能下载源代码,然后用源代码安装) 下载编译工具 yum -y groupinstall "Developm ...

  7. python3 Counter类(计数器)

    Counter(计数器):用于追踪值的出现次数 Counter类继承dict类,所以它能使用dict类里面的方法 创建一个Counter类 import collections obj = colle ...

  8. 如何使用PowerDesigner建表

    说明 个人认为,直接使用数据库管理工具如Navicat直接建表,如果后期需要进行库的迁移,不是那么方便,不如直接在PowerDesigner里面建表,更自由一些 版本:PowerDesigner15 ...

  9. C# -- 使用委托 delegate 执行异步操作

    C# -- 使用委托 delegate 执行异步操作 委托是一种安全地封装方法的类型,它与 C 和 C++ 中的函数指针类似. 与 C 中的函数指针不同,委托是面向对象的.类型安全的和保险的. 委托的 ...

  10. “软到不行”的WWDC2018

    转载请标明来源:https://www.cnblogs.com/zhanggui/p/9154542.html 简介 一年一度的WWDC于北京时间6月5号凌晨1点在加利福利亚州圣何塞的麦克恩利会议中心 ...