You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux服务器下Python执行多MySQL存储过程并异常邮件告警方案咨询

实现多MySQL存储过程调用+错误邮件告警+每日定时执行

没问题,我帮你一步步搞定这个需求!咱们分三个核心部分来落地:批量调用存储过程、捕获错误并发送告警邮件、配置每日自动执行的定时任务。

1. 批量调用多个MySQL存储过程

你现在的脚本只能执行单个存储过程,其实扩展起来很简单——把要执行的存储过程名放进一个列表,然后循环逐个执行就行。如果存储过程涉及写操作,记得执行后提交事务;要是只读的话,也可以根据业务调整是否需要提交。

2. 错误捕获与邮件告警

我们用Python的try-except块覆盖所有可能的异常场景(数据库连接失败、存储过程执行报错等),把错误详情收集起来后,用smtplib发送告警邮件。你需要提前准备好邮箱的SMTP配置(比如用163/QQ邮箱,记得开启SMTP服务并获取授权码,不是登录密码哦)。

3. 配置Linux每日定时任务

最后用Linux自带的crontab来设置脚本每日自动运行,这是服务器上最常用的定时任务工具,配置起来很方便。

完整示例脚本

#!/usr/bin/python
import MySQLdb
import smtplib
from email.mime.text import MIMEText
from email.header import Header

# 核心配置信息,替换成你自己的实际内容
DB_CONFIG = {
    'host': 'localhost',
    'user': 'your_username',
    'password': 'your_password',
    'db': 'bddname'
}
# 按执行顺序列出所有要运行的存储过程
PROCEDURES = ['proc_order_stat', 'proc_user_clean', 'proc_data_sync']
# 邮件告警配置
EMAIL_CONFIG = {
    'smtp_server': 'smtp.163.com',  # 示例为163邮箱SMTP服务器,其他邮箱自行替换
    'smtp_port': 465,
    'sender': 'your_alert_email@163.com',
    'sender_password': 'your_email_auth_code',  # 邮箱SMTP授权码
    'receivers': ['ops_team@example.com', 'your_personal_email@xxx.com']  # 告警收件人列表
}

def send_alert_email(error_content):
    """封装发送告警邮件的逻辑"""
    msg = MIMEText(error_content, 'plain', 'utf-8')
    msg['From'] = Header("MySQL存储过程执行告警", 'utf-8')
    msg['To'] = Header("运维负责人", 'utf-8')
    msg['Subject'] = Header("【紧急】每日存储过程执行失败", 'utf-8')

    try:
        # 建立SSL加密的SMTP连接
        smtp_client = smtplib.SMTP_SSL(EMAIL_CONFIG['smtp_server'], EMAIL_CONFIG['smtp_port'])
        smtp_client.login(EMAIL_CONFIG['sender'], EMAIL_CONFIG['sender_password'])
        smtp_client.sendmail(EMAIL_CONFIG['sender'], EMAIL_CONFIG['receivers'], msg.as_string())
        print("告警邮件发送成功")
    except smtplib.SMTPException as e:
        print(f"邮件发送失败: {str(e)}")

def run_procedures():
    db_conn = None
    cursor = None
    error_list = []
    try:
        # 初始化数据库连接
        db_conn = MySQLdb.connect(**DB_CONFIG)
        cursor = db_conn.cursor()

        # 循环执行每个存储过程
        for proc_name in PROCEDURES:
            try:
                print(f"开始执行存储过程: {proc_name}")
                # 如果存储过程需要参数,改成 CALL {proc_name}(%s, %s) 并传入参数元组
                cursor.execute(f"CALL {proc_name}()")
                db_conn.commit()  # 有写操作必须提交事务
                print(f"存储过程 {proc_name} 执行完成")
            except MySQLdb.MySQLError as e:
                db_conn.rollback()  # 出错后回滚事务
                err_msg = f"存储过程 {proc_name} 执行失败: 错误码[{e.args[0]}],错误信息:{e.args[1]}"
                error_list.append(err_msg)
                print(err_msg)

    except MySQLdb.MySQLError as e:
        err_msg = f"数据库连接失败: 错误码[{e.args[0]}],错误信息:{e.args[1]}"
        error_list.append(err_msg)
        print(err_msg)
    except Exception as e:
        err_msg = f"未知异常: {str(e)}"
        error_list.append(err_msg)
        print(err_msg)
    finally:
        # 无论成功失败,都要关闭游标和连接
        if cursor:
            cursor.close()
        if db_conn:
            db_conn.close()

        # 收集到错误就发送告警邮件
        if error_list:
            full_error = "\n\n".join(error_list)
            send_alert_email(full_error)

if __name__ == "__main__":
    run_procedures()

脚本使用步骤

  1. 替换配置:把脚本里的DB_CONFIG、PROCEDURES、EMAIL_CONFIG换成你自己的实际信息。
  2. 添加执行权限:给脚本加可执行权限:chmod +x your_script.py
  3. 手动测试:先手动运行脚本验证功能:python your_script.py,检查存储过程是否正常执行,错误场景下是否能收到告警邮件。

配置每日定时任务(crontab)

  1. 打开crontab编辑界面:crontab -e
  2. 添加一行定时规则,比如每天凌晨1点执行脚本:
0 1 * * * /usr/bin/python3 /absolute/path/to/your_script.py >> /absolute/path/to/script_run.log 2>&1
  • 规则解释:0 1 * * * 代表每天凌晨1点执行;/usr/bin/python3 是你的Python解释器路径(可以用which python3查看);/absolute/path/to/your_script.py 是脚本的绝对路径;>> /absolute/path/to/script_run.log 2>&1 是把脚本的输出和错误日志写入指定文件,方便后续排查问题。
  1. 保存退出后,crontab会自动生效,用crontab -l可以查看已设置的定时任务。

注意事项

  • 确保服务器能访问邮箱的SMTP服务器(比如开放465/587端口)。
  • 如果存储过程需要传入参数,修改cursor.execute的语句,比如cursor.execute(f"CALL {proc_name}(%s, %s)", (param1, param2))。
  • 定期检查脚本日志,确保定时任务正常运行。

内容的提问来源于stack exchange,提问作者user8772487

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 08:55:58