MySQL性能巡检脚本分析报告

主要依赖库

mysql.connector: 用于连接和操作MySQL数据库

pandas: 数据处理和CSV导出

docx: 生成Word格式报告

datetime: 时间处理

核心函数结构

get_mysql_config() - 获取MySQL连接配置

connect_to_mysql(config) - 建立数据库连接

get_global_status(cursor) - 获取全局状态

get_global_variables(cursor) - 获取全局变量

generate_report(conn) - 生成性能报告

create_word_report(report_data, filename) - 创建Word报告

功能特性

连接管理

支持交互式输入MySQL服务器信息(IP、端口、用户名、密码)

默认连接到information_schema数据库获取系统信息

监控指标

连接数: 当前连接数与最大连接数

查询性能: 总查询数和QPS(每秒查询数)

慢查询: 慢查询总数统计

存储引擎: InnoDB缓冲池配置

临时表: 内存和磁盘临时表创建统计

日志: 日志写入请求次数

报告输出

控制台输出: 实时显示各项性能指标

Word文档: 生成格式化的性能报告

CSV文件: 支持数据持久化存储

python 复制代码
import mysql.connector
from mysql.connector import Error
import pandas as pd
from datetime import datetime
from docx import Document
from docx.shared import Pt, RGBColor
from datetime import datetime
import time
import os

def create_word_report(report_data, filename="MySQL性能报告.docx"):
    doc = Document()
    
    # 标题
    doc.add_heading('MySQL 性能巡检报告', 0)
    doc.add_paragraph(f"生成时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")

    # 性能指标
    doc.add_heading('📊 性能指标', level=1)
    table = doc.add_table(rows=1, cols=2)
    hdr_cells = table.rows[0].cells
    hdr_cells[0].text = '指标'
    hdr_cells[1].text = '值'

    for key, value in report_data.items():
        if key != "时间":
            row_cells = table.add_row().cells
            row_cells[0].text = key
            row_cells[1].text = str(value)

    # 设置表格字体大小
    for row in table.rows:
        for cell in row.cells:
            for paragraph in cell.paragraphs:
                paragraph.style.font.size = Pt(11)

    # 保存文档
    doc.save(filename)
    print(f"✅ 报告已保存为: {filename}")
def get_mysql_config():
    host = input("请输入MySQL服务器IP地址: ")
    port = int(input("请输入MySQL端口号(默认3306): ") or 3306)
    user = input("请输入MySQL用户名: ")
    password = input("请输入MySQL密码: ")
    return {
        'host': host,
        'port': port,
        'user': user,
        'password': password,
        'database': 'information_schema'
    }

def connect_to_mysql(config):
    try:
        conn = mysql.connector.connect(**config)
        if conn.is_connected():
            print("✅ 成功连接到 MySQL")
            return conn
    except Error as e:
        print(f"❌ 连接失败: {e}")
        return None

def get_global_status(cursor):
    cursor.execute("SHOW GLOBAL STATUS")
    return dict(cursor.fetchall())

def get_global_variables(cursor):
    cursor.execute("SHOW GLOBAL VARIABLES")
    return dict(cursor.fetchall())

def generate_report(conn):
    cursor = conn.cursor()
    status = get_global_status(cursor)
    variables = get_global_variables(cursor)

    # 计算 QPS
    time.sleep(1)
    status_after = get_global_status(cursor)
    qps = int(status_after['Queries']) - int(status['Queries'])

    report = {
        "时间": datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        "当前连接数": status.get('Threads_connected', 'N/A'),
        "最大连接数": variables.get('max_connections', 'N/A'),
        "总查询数": status.get('Queries', 'N/A'),
        "QPS (每秒查询)": qps,
        "慢查询总数": status.get('Slow_queries', 'N/A'),
        "InnoDB 缓冲池大小": variables.get('innodb_buffer_pool_size', 'N/A'),
        "临时表在内存中创建数": status.get('Created_tmp_tables', 'N/A'),
        "临时表在磁盘中创建数": status.get('Created_tmp_disk_tables', 'N/A'),
        "日志写入次数": status.get('Innodb_log_write_requests', 'N/A')
    }

    print("\n📊 MySQL 性能报告\n")
    for key, value in report.items():
        print(f"{key}: {value}")

    # 生成 Word 报告
    create_word_report(report)

    # 可选:保存为 CSV 文件
    report_df = pd.DataFrame([report])
    report_df.to_csv("remote_mysql_performance_report.csv", mode='a', index=False,
                     header=not os.path.exists("remote_mysql_performance_report.csv"))

    cursor.close()

def main():
    config = get_mysql_config()
    conn = connect_to_mysql(config)
    if conn:
        generate_report(conn)
        conn.close()

if __name__ == "__main__":
    main()
相关推荐
tian_jiangnan35 分钟前
Flink 流计算进阶:手写一套通用的 Redis/MySQL /Kafka数据源封装工具类
redis·mysql·flink
sevenll071 小时前
SqlKit - 覆盖 50+ 数据库的 AI 智能体 SQL 桌面客户端
数据库·人工智能·sql·智能体
数智化管理手记3 小时前
手工统计指标误差大、效率低?指标管理系统如何告别人工算数痛点?
大数据·运维·数据库·人工智能·云计算
ShiXZ2139 小时前
Redis 常用指令全集:redis-cli 实战速查手册
数据库·redis·缓存
晓子文集10 小时前
Tushare接口文档:期货日线行情(fut_daily)
大数据·数据库·金融数据·量化投资·tushare
WA内核拾荒者10 小时前
WhatsApp 账号异常检测的自动化告警系统设计
数据库·python·自动化
龙仔72514 小时前
人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)
linux·数据库·笔记·备份·人大金仓
老杨聊技术14 小时前
CentOS 7 安装 MySQL 8 保姆级教程
linux·mysql·centos
sunxr.22714 小时前
Mysql-----最后一次作业
数据库·mysql
普通网友15 小时前
Python FastAPI 异步数据库管理
数据库·fastapi