问题描述

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. CAP理论和Base理论

    CAP理论 Consistency(一致性), 数据一致更新,所有数据变动都是同步的 Availability(可用性), 好的响应性能 Partition tolerance(分区容错性) 可靠性, ...

  2. C#开发WEBService服务 C++开发客户端调用WEBService服务

    编写WEBService服务端应用程序并部署 http://blog.csdn.net/u011835515/article/details/47615425 编写调用WEBService的C++客户 ...

  3. Linux查杀stopped进程

      在Linux系统下面,top命令可以查看查看stopped进程.但是不能查看stopped进程的详细信息.那么如何查看stopped 进程,并且杀掉这些stopped进程呢? ps -e j | ...

  4. webmagic 基本的方法

    WebMagic的结构分为Downloader.PageProcessor.Scheduler.Pipeline四大组件,并由Spider将它们彼此组织起来.这四大组件对应爬虫生命周期中的下载.处理. ...

  5. AngularJS学习之旅—AngularJS 服务(八)

    1.AngularJS 服务(Service) AngularJS 中你可以创建自己的服务,或使用内建服务.2.什么是服务? 在 AngularJS 中,服务是一个函数或对象,可在你的 Angular ...

  6. WIN提权总结【本地存档-转载】

    [ web提权 ] 1.能不能执行cmd就看这个命令:net user,net不行就用net1,再不行就上传一个net到可写可读目录,执行/c c:\windows\temp\cookies\net1 ...

  7. 研究好vif 和vshow

    另外从源头上处理的???,怎么自己排查出错误??必须 ??https://www.jb51.net/article/124116.htm

  8. 关于idea在运行web项目时部署的位置

    (转) 以前一直很好奇,在idea中运行tomcat,把项目部署到其中,运行起来,然后我去tomcat目录下去看,根本找不到我部署的项目 那我的项目是咋运行的啊… - - 后来我就查啊查 ,纠结啊纠结 ...

  9. day 15 模块、起别名、from导入

    模块 '''模块:一系列功能的集合体​定义模块:创建一个py文件就是一个模块,该py文件名就是模块名​使用模块:在要使用模块的文件中,通过 import 模块名 来导入模块 '''​'''import ...

  10. c# winform 多屏显示

    using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using Sy ...