当前位置: 首页 > article >正文

Mysql 设置 慢SQL时间并触发邮件

Mysql 设置 慢SQL时间,并触发邮件

1. 临时设置(会话级别)
SET SESSION long_query_time = 2; -- 设置慢查询时间为2秒
2. 全局设置
这样所有会话都会受到影响:
SET GLOBAL long_query_time = 2; -- 设置慢查询时间为2秒
3. 检查当前设置
SHOW VARIABLES LIKE 'long_query_time';
-- 或者
select @@long_query_time;

以上的问题,MySQL 服务重启后 失效。

4. 配置文件配置

为了确保设置在服务器重启后仍然有效,可以在 MySQL 配置文件(如 my.cnf 或 my.ini)中添加以下行:

[mysqld]
slow_query_log = 1
slow_query_log_file = /path/to/your/slow-query.log
long_query_time = 2  # 设置慢查询时间为2秒
log_queries_not_using_indexes = 1  # 可选:记录未使用索引的查询

5. 重启MySQL服务

保存配置文件并重启MySQL服务以使更改生效。

6. 编写Python 触发邮件代码
import time
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

# 配置邮件发送信息
SMTP_SERVER = 'smtp.example.com'
SMTP_PORT = 587
SMTP_USER = 'your-email@example.com'
SMTP_PASSWORD = 'your-email-password'
FROM_EMAIL = 'your-email@example.com'
TO_EMAIL = 'recipient-email@example.com'

# 慢查询日志文件路径
SLOW_QUERY_LOG_FILE = '/path/to/your/slow-query.log'

# 记录上次读取的位置
last_position = 0

def send_email(subject, body):
    msg = MIMEMultipart()
    msg['From'] = FROM_EMAIL
    msg['To'] = TO_EMAIL
    msg['Subject'] = subject
    msg.attach(MIMEText(body, 'plain'))
    
    with smtplib.SMTP(SMTP_SERVER, SMTP_PORT) as server:
        server.starttls()
        server.login(SMTP_USER, SMTP_PASSWORD)
        server.sendmail(FROM_EMAIL, TO_EMAIL, msg.as_string())

def monitor_slow_query_log():
    global last_position
    with open(SLOW_QUERY_LOG_FILE, 'r') as file:
        file.seek(last_position)
        while True:
            line = file.readline()
            if not line:
                time.sleep(1)  # 等待1秒后再次检查
                continue
            last_position = file.tell()
            if 'Query_time:' in line:
                query_time = float(line.split('Query_time:')[1].split()[0])
                if query_time > 2:  # 假设慢查询时间阈值为2秒
                    slow_query = line.strip()
                    send_email('Slow Query Detected', f'Slow Query: {slow_query}')

if __name__ == '__main__':
    monitor_slow_query_log()

确保你已经安装了所需的Python库(如 smtplib 和 email),然后运行脚本:

7. 运行Python 代码
python monitor_slow_query_log.py
8. 使用系统工具

如果你不想编写脚本,可以使用一些系统工具来监控文件变化并发送邮件。例如,使用 inotifywait 和 mail 命令:
安装 inotify-tools
在Linux上安装 inotify-tools:

sudo apt-get install inotify-tools

9. 创建 monitor_slow_query.sh脚本
#!/bin/bash

SLOW_QUERY_LOG_FILE="/path/to/your/slow-query.log"
SMTP_SERVER="smtp.example.com"
SMTP_PORT=587
SMTP_USER="your-email@example.com"
SMTP_PASSWORD="your-email-password"
FROM_EMAIL="your-email@example.com"
TO_EMAIL="recipient-email@example.com"

inotifywait -m -e modify "$SLOW_QUERY_LOG_FILE" |
while read path action file; do
    tail -n 1 "$SLOW_QUERY_LOG_FILE" | grep 'Query_time:' | while read line; do
        query_time=$(echo $line | awk '{print $2}' | cut -d':' -f2)
        if (( $(echo "$query_time > 2" | bc -l) )); then
            echo "Slow Query: $line" | mail -s "Slow Query Detected" -S smtp="$SMTP_SERVER:$SMTP_PORT" -S smtp-auth=login -S smtp-auth-user="$SMTP_USER" -S smtp-auth-password="$SMTP_PASSWORD" -S from="$FROM_EMAIL" "$TO_EMAIL"
        fi
    done
done

执行脚本

chmod +x monitor_slow_query.sh
./monitor_slow_query.sh


http://www.kler.cn/a/509616.html

相关文章:

  • QT笔记- Qt6.8.1 Android编程 添加AndroidManifest.xml文件以支持修改权限
  • C++速览之智能指针
  • AI在SEO中的关键词优化策略探讨
  • 【服务治理中间件】consul介绍和基本原理
  • 【Uniapp-Vue3】@import导入css样式及scss变量用法与static目录
  • Golang Gin系列-3:Gin Framework的项目结构
  • HTTP / 2
  • 用户中心项目教程(四)---Vue脚手架完成前端初始化
  • Python基于Django的图像去雾算法研究和系统实现(附源码,文档说明)
  • 脚本工具:PYTHON
  • 人工智能之数学基础:线性表达和线性组合
  • 【大数据2025】MapReduce
  • 解决conda create速度过慢的问题
  • DETRs with Collaborative Hybrid Assignments Training论文阅读与代码
  • 【LeetCode: 226. 翻转二叉树 + 二叉树】
  • 若依入门使用
  • WEB攻防-通用漏洞_XSS跨站_绕过修复_http_only_CSP_标签符号
  • Redis的线程模型是什么
  • Qt QML专栏目录结构
  • 基于Python的心电图报告解析与心电吸引子绘制
  • 嵌入式工程师必学(7):SWD仿真接口(for ARM)的使用方法
  • wps数据分析000002
  • 密码机服务器在云计算中的应用与挑战
  • 【时时三省】(C语言基础)柔性数组
  • SAP 固定资产常用的数据表有哪些,他们是怎么记录数据的?
  • springCloudGateway+nacos自定义负载均衡-通过IP隔离开发环境