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

本文介绍如何使用bash脚本结合crontab,定时获取并发送前一天的数据库慢查询TOP10给研发负责人,无需安装第三方工具。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

帮一个开发朋友实现一个功能:他希望 每天能定时发送前一天的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="Xxxxx@XXX.com"


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





                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值