定时发送MySQL的TOP 10慢查询SQL

帮一个开发朋友实现一个功能:他希望 每天能定时发送前一天的TOP 10 的慢查询SQL 给研发的负责人。

因为不太懂数据库,所以最好不要安装第三方的工具。

因此用shell 写了一个脚本,把这个脚本加入到crontab里,即可实现每天发送前一天的TOP 10 慢查询。

#!/bin/bash
MYSQL=`which mysql`
MYSLOW=`which mysqldumpslow`
BACKUPUSER=root
BACKUPPASS=123456
BACKUPPORT=3306
BACKUPIP=127.0.0.1
#需要将/opt/data/3306/logs 替换为实际的慢查询日志的存放路径
LOG_FILE_NAME=/opt/data/3306/logs/`date +%Y%m%d`.log

#前一天的慢查询文件名
LAST_LOG_FILE_NAME=/opt/data/3306/logs/`date +%Y%m%d -d"-1 day"`.log
#存放TOP 10 慢查询的临时文件
MAIL_CONTENT_FILE=/opt/data/3306/logs/mail.log

#定义邮件的主题
SUBJECT="Daily  Mysql Top10 Slow SQL `date +%F' '%T`"

#定义收件人的邮箱
EMAIL="[email protected]"


mycmd="$MYSQL -u$BACKUPUSER -p$BACKUPPASS -h$BACKUPIP -P$BACKUPPORT "

# 因为默认mysql的慢查询日志会不断的增长,因此我们根据日期来设置每天的慢查询文件名。这样即可实现每天一个慢查询文件。
$mycmd  -e "set global slow_query_log_file='$LOG_FILE_NAME'"

$MYSLOW  -s t -t 10 $LAST_LOG_FILE_NAME>>$MAIL_CONTENT_FILE

/usr/bin/dos2unix $MAIL_CONTENT_FILE

/bin/mail -s "$SUBJECT" "$EMAIL"<$MAIL_CONTENT_FILE

rm -rf $MAIL_CONTENT_FILE
# 删除7天前的慢查询日志
rm -rf  /opt/data/3306/logs/`date +%Y%m%d -d"-7 day"`.log



 
 

你可能感兴趣的:(MySQL)