mysql 数据库慢查询日志分析是优化数据库性能的重要方式之一,随着时间积累,慢查询日志会变得越来越大,作一个每天自动切割的任务,将脚本放在/etc/logrotate.d/下,步骤如下:
刷新慢查询日志的一般步骤
- 查看慢查询日志路径
select @@datadir;
;
- 重命名慢查询日志
mv a b
;
- 登陆数据库
flush slow logs;
logrotate实现
修改my.cnf
,方便自动轮询日志时候自动加载用户名密码
[client] user=root password=123456 socket=/var/lib/mysql/mysql.sock
|
在/etc/logrotate.d/下新建任务
输入以下内容:
/var/log/mysql/*log { daily rotate 7 missingok notifempty delaycompress create 644 mysql mysql postrotate MYCNF_FILE=/root/.my.cnf MYSQLADMIN=/usr/bin/mysqladmin if test -x $MYSQLADMIN && $MYSQLADMIN --defaults-file="$MYCNF_FILE" ping >/dev/null then $MYSQLADMIN --defaults-file="$MYCNF_FILE" flush-logs fi endscript }
|
重新加载cron配置
这样子就新建好了慢查询日志每天分割,保留7天
crontab实现
#!/bin/bash mysql='' user='' password='' ip='' archived_log=slow.`date +%Y%m%d%H`.log slowlog=`$mysql -u$user -p$password -h$ip -e"show global variables like 'slow%';" 2> /dev/null | grep 'slow_query_log_file' | awk -F ' ' {'print $2'}` datadir=`mysql -u$user -p$password -e"show global variables like 'data%';" 2> /dev/null | grep datadir | awk -F ' ' {'print $2'}` echo $slowlog echo $datadir echo ${datadir}/${slowlog} echo ${datadir}/${archived_log} mv ${datadir}/${slowlog} ${datadir}/${archived_log} $mysql -u$user -p$password -h$ip -e"flush slow logs" echo "归档成功,路径为"{archived_log}
|
测试
[root@NB-flexgw1:/root] + mysql=mysql + user=root + password=root + ip=localhost ++ date +%Y%m%d%H + archived_log=slow.2020060211.log ++ mysql -uroot -proot -hlocalhost '-eshow global variables like '\''slow%'\'';' ++ grep slow_query_log_file ++ awk -F ' ' '{print $2}' + slowlog=dataslow.log ++ mysql -uroot -proot '-eshow global variables like '\''data%'\'';' ++ grep datadir ++ awk -F ' ' '{print $2}' + datadir=/alidata/mysql/data/ + echo dataslow.log dataslow.log + echo /alidata/mysql/data/ /alidata/mysql/data/ + echo /alidata/mysql/data//dataslow.log /alidata/mysql/data//dataslow.log + echo /alidata/mysql/data//slow.2020060211.log /alidata/mysql/data//slow.2020060211.log + mv /alidata/mysql/data//dataslow.log /alidata/mysql/data//slow.2020060211.log + mysql -uroot -proot -hlocalhost '-eflush slow logs' mysql: [Warning] Using a password on the command line interface can be insecure. + echo '归档成功,路径为{archived_log}' 归档成功,路径为{archived_log}
|
新的慢日志产生,对系统不会造成影响,查看归档后的日志
[root@NB-flexgw1:/root] -rw-r----- 1 mysql mysql 162702214 6月 2 11:40 /alidata/mysql/data/slow.2020060211.log
|