问题描述

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. Jmeter设置代理,抓包之app请求

    步骤: 1. Jmeter选择测试计划,添加线程组,添加http请求,添加监听器-察看结果树 2. 添加http代理服务器,右键添加非测试元件-添加http代理服务器 3. 端口改为8889,目标控制 ...

  2. 连接到github

    1,创建秘钥 $ ssh-keygen -t rsa -C "youremail@example.com"执行成功后,会在~/.ssh/目录下生成id_rsa和id_rsa.pub ...

  3. Cs231n课堂内容记录-Lecture 8 深度学习框架

    Lecture 8  Deep Learning Software 课堂笔记参见:https://blog.csdn.net/u012554092/article/details/78159316 今 ...

  4. Scrapy案例02-腾讯招聘信息爬取

    目录 1. 目标 2. 网站结构分析 3. 编写爬虫程序 3.1. 配置需要爬取的目标变量 3.2. 写爬虫文件scrapy 3.3. 编写yield需要的管道文件 3.4. setting中配置请求 ...

  5. 初学Django项目可能会遇到的问题

    1. 出现莫名其妙的 app01 我项目中的app名字并不是app01,可是运行python manage.py makemigrations的时候总是提示app01不是已安装的app Applyin ...

  6. velocity模板引擎 -- java.io.FileNotFoundException: velocity.log (Permission denied)

    问题原因是velocity的日志框架导致(velocity是使用自己封装的日志框架记录日志的),velocity在初始化Logger时,如果没有读取到配置文件,则会使用默认的velocity.log做 ...

  7. git添加/删除远程仓库

    注意:仓库只有管理员建的你才有权限上传,不然自己建的也没用,没权限上传 1.远程仓库路径查询 git remote -v 2.添加远程仓库 git remote add origin <你的项目 ...

  8. Java中的CAS原理

    前言:在对AQS框架进行分析的过程中发现了很多CAS操作,因此有必要对CAS进行一个梳理,也便更清楚的了解其原理. 1.CAS是什么 CAS,是compare and swap的缩写,中文含义:比较交 ...

  9. web框架开发-Django视图层

    视图函数 一个视图函数,简称视图,是一个简单的Python 函数,它接受Web请求并且返回Web响应.响应可以是一张网页的HTML内容,一个重定向,一个404错误,一个XML文档,或者一张图片. . ...

  10. JAVA—枚举(Enum)学习总结

    1.枚举(Enumeration) 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式.这种传统接口已被迭代器取代,虽然Enumeration 还未被遗弃,但在现代代码 ...