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()
相关推荐
Elastic 中国社区官方博客5 分钟前
使用 NVIDIA cuVS 在 Elasticsearch 中实现 GPU 加速的向量索引:在 10 分钟内处理 1.38 亿个向量
大数据·数据库·elasticsearch·搜索引擎·全文检索·安全威胁分析
我们从未走散16 分钟前
AI 生图平台如何避免资损:用“扣款与凭据同事务”构建三态账本
开发语言·数据库·php
Shadow(⊙o⊙)1 小时前
MySQL复合查询
数据库·mysql
L·S·P6 小时前
25MB 管理 100+ 种数据库:开源轻量客户端 DBX 介绍与上手
数据库·mysql·开源·database·dbx
笃行3508 小时前
KingbaseES KSQL Developer 的连接管理、数据处理与对象管理
数据库
ha_lydms9 小时前
MaxCompute中加密与解密函数
大数据·数据库·数据仓库·hadoop·dataworks·maxcompute·odps
Shadow(⊙o⊙)9 小时前
MySQL内置函数
数据库·mysql
笃行3509 小时前
金仓 KingbaseES PL/SQL 开发全攻略:异常处理、数据类型、调试优化与过程语句
数据库
夜雪一千10 小时前
MySQL 常用 DEFAULT 默认值一览表
mysql
快乐的木子李10 小时前
mysql-26.7.0-linux26.7.0下载安装
数据库·mysql