文章目录

    • **Prometheus 监控 MySQL **
      • **1. 目标**
      • **2. 环境准备**
        • **2.1 所需组件**
        • **2.2 权限要求**
      • **3. 部署 mysqld_exporter**
        • **3.1 下载与安装**
        • **3.2 创建配置文件**
        • **3.3 创建 Systemd 服务**
        • **3.4 验证 Exporter**
      • **4. 配置 Prometheus**
        • **4.1 添加 Job 到 `prometheus.yml`**
        • **4.2 重载 Prometheus**
      • **5. 核心监控指标说明**
      • **6. 告警规则配置**
        • **6.1 创建告警规则文件**
        • **6.2 在 `prometheus.yml` 中加载规则**
      • **7. Grafana 仪表盘配置**
      • **8. 维护与优化**
        • **8.1 定期检查**
        • **8.2 安全加固**
        • **8.3 性能调整**
      • **9. 故障排查**
        • **9.1 Exporter 无数据**
        • **9.2 Prometheus 未抓取**
      • **10. 附录**

**Prometheus 监控 MySQL **

1. 目标

  • 实时监控 MySQL 关键性能指标(如连接数、查询吞吐量、复制状态等)。
  • 设置告警规则,及时发现数据库异常。
  • 通过 Grafana 可视化监控数据。

2. 环境准备

2.1 所需组件
组件作用安装位置
Prometheus Server指标采集与存储监控服务器
mysqld_exporter暴露 MySQL 指标MySQL 服务器
Grafana数据可视化监控服务器
Alertmanager告警通知管理监控服务器
2.2 权限要求
  • MySQL 用户需具备 PROCESS, REPLICATION CLIENT, SELECT 权限:
    CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'YourStrongPassword';
    GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';
    FLUSH PRIVILEGES;
    

3. 部署 mysqld_exporter

3.1 下载与安装
# 下载最新版 (替换版本号)
VERSION="0.15.1"
wget https://github.com/prometheus/mysqld_exporter/releases/download/v${VERSION}/mysqld_exporter-${VERSION}.linux-amd64.tar.gz
tar xvf mysqld_exporter-${VERSION}.linux-amd64.tar.gz
sudo mv mysqld_exporter-${VERSION}.linux-amd64/mysqld_exporter /usr/local/bin/
3.2 创建配置文件

创建 .my.cnf 文件存储数据库连接信息:

sudo tee /etc/.mysqld_exporter.cnf <<EOF
[client]
user=exporter
password=YourStrongPassword
host=localhost
port=3306
EOF
sudo chmod 600 /etc/.mysqld_exporter.cnf  # 限制权限
3.3 创建 Systemd 服务

/etc/systemd/system/mysqld_exporter.service

[Unit]
Description=MySQL Prometheus Exporter
After=network.target[Service]
User=mysqld_exporter
ExecStart=/usr/local/bin/mysqld_exporter \--config.my-cnf=/etc/.mysqld_exporter.cnf \--collect.global_status \--collect.info_schema.innodb_metrics \--collect.slave_status \--collect.info_schema.processlistRestart=always[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl start mysqld_exporter
sudo systemctl enable mysqld_exporter
3.4 验证 Exporter

访问指标接口:
curl http://localhost:9104/metrics
应输出包含 mysql_ 前缀的指标。


4. 配置 Prometheus

4.1 添加 Job 到 prometheus.yml
scrape_configs:- job_name: 'mysql'static_configs:- targets: ['mysql-server-ip:9104']  # Exporter 地址relabel_configs:- source_labels: [__address__]target_label: instancereplacement: 'mysql-primary'  # 实例标识
4.2 重载 Prometheus
curl -X POST http://localhost:9090/-/reload  # 或重启服务

5. 核心监控指标说明

指标名称含义告警建议
mysql_global_status_threads_connected当前连接数> 80% max_connections
mysql_global_status_threads_running活跃连接数持续 > 100
mysql_global_status_slow_queries慢查询计数短时间内突增
mysql_global_variables_max_connections最大连接数规划容量参考
mysql_slave_status_slave_io_running主从 IO 线程状态≠ 1 (异常)
mysql_info_schema_innodb_row_lock_time_avg平均行锁等待时间> 500ms

6. 告警规则配置

6.1 创建告警规则文件

/etc/prometheus/rules/mysql_alerts.yml

groups:
- name: MySQL-Alertsrules:- alert: MySQLHighConnectionsexpr: mysql_global_status_threads_connected / mysql_global_variables_max_connections * 100 > 80for: 5mlabels:severity: warningannotations:summary: "MySQL 高连接数 ({{ $value }}%)"description: "实例 {{ $labels.instance }} 连接数超过 80% 限制"- alert: MySQLReplicationFailureexpr: mysql_slave_status_slave_io_running != 1 or mysql_slave_status_slave_sql_running != 1for: 1mlabels:severity: criticalannotations:summary: "MySQL 复制中断 ({{ $labels.instance }})"
6.2 在 prometheus.yml 中加载规则
rule_files:- "/etc/prometheus/rules/mysql_alerts.yml"

7. Grafana 仪表盘配置

  1. 导入官方 Dashboard:
    • ID 7362 (MySQL Overview)
  2. 配置 Prometheus 为数据源。

8. 维护与优化

8.1 定期检查
  • 验证 Exporter 状态:systemctl status mysqld_exporter
  • 检查指标收集延迟:prometheus_target_interval_length_seconds
  • 审核 MySQL 用户权限(每年至少一次)。
8.2 安全加固
  • 使用 TLS 加密 Exporter 通信:
    mysqld_exporter --web.config.file=/path/to/web-config.yml
    
    web-config.yml 示例:
    tls_server_config:cert_file: server.crtkey_file: server.key
    
8.3 性能调整
  • 限制采集的指标(减少负载):
    --no-collect.info_schema.tables  # 禁用表统计
    
  • 调整 Prometheus 抓取间隔(默认 15s):
    scrape_interval: 30s  # prometheus.yml
    

9. 故障排查

9.1 Exporter 无数据
  • 检查 MySQL 用户权限。
  • 测试连接:mysql --defaults-file=/etc/.mysqld_exporter.cnf -e "SHOW STATUS"
  • 查看 Exporter 日志:journalctl -u mysqld_exporter -f
9.2 Prometheus 未抓取
  • 访问 http://prom-server:9090/targets 检查 Target 状态。
  • 验证网络连通性:telnet mysql-server-ip 9104

10. 附录

  • mysqld_exporter 官方文档
    https://github.com/prometheus/mysqld_exporter
  • MySQL 监控关键指标指南
    https://prometheus.io/docs/guides/mysqld-exporter/

按照此文档,可实现 MySQL 的全面监控与告警,确保数据库稳定性。部署后需通过压力测试验证监控有效性,并根据业务特点调整告警阈值。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/908648.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/908648.shtml
英文地址,请注明出处:http://en.pswp.cn/news/908648.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MCP Resource模块详解

MCP Resource模块详解 摘要 MCP Resource模块是模型上下文协议的核心组件&#xff0c;通过标准化URI接口为AI模型提供安全可控的只读数据访问能力。其核心设计包括数据隔离架构和客户端驱动的访问控制&#xff0c;支持文本/二进制编码格式&#xff0c;适用于配置文件读取、数据…

Docker 容器化基础:镜像、容器与仓库的本质解析

Docker 概念与容器化技术 Docker 是一种容器化平台&#xff0c;能够将应用程序及其依赖项打包成一个容器&#xff0c;确保在任何环境中都能一致运行。容器化技术通过操作系统级别的虚拟化&#xff0c;为应用程序提供了一个独立的运行环境。 容器化技术的核心优势 一致性&…

解决SQL Server SQL语句性能问题(9)——SQL语句改写(2)

9.4.3. update语句改写 与Oracle类似,SQL Server中,update语句被用户相关技术人员广泛应用于现实日常工作中。但是,有些情况下,尤其是海量数据场景中,update语句也许会带来性能方面的严重问题或极大隐患。因此,为了解决和消除update语句导致的性能问题或隐患,我们将需对…

Unity VR/MR开发-VR/开发SDK选型对比分析

视频讲解链接&#xff1a; 【XR马斯维】Unity开发VR/MR用哪些SDK&#xff1f;【UnityVR/MR开发教程--入门】_哔哩哔哩_bilibili

Python 高效图像帧提取与视频编码:实战指南

Python 高效图像帧提取与视频编码:实战指南 在音视频处理领域,图像帧提取与视频编码是基础但极具挑战性的任务。Python 结合强大的第三方库(如 OpenCV、FFmpeg、PyAV),可以高效处理视频流,实现快速帧提取、压缩编码等关键功能。本文将深入介绍如何优化这些流程,提高处理…

java复习 05

我的天啊一天又要过去了&#xff0c;没事的还有时间&#xff01;&#xff01;&#xff01; 不要焦虑不要焦虑&#xff0c;事实证明只要我认真地投入进去一切都还是来得及的&#xff0c;代码多实操多复盘&#xff0c;别叽叽喳喳胡思乱想多多思考&#xff0c;有迷茫前害怕后的功…

《Go小技巧易错点100例》第三十五篇

本期分享&#xff1a; 1.循环依赖导致栈溢出 2.无法捕获子协程的panic 循环依赖导致栈溢出 在Go语言开发中&#xff0c;我们经常会遇到结构体之间需要相互引用的情况。当两个结构体直接或间接地相互包含对方作为自己的字段时&#xff0c;就会形成循环依赖。 但是在Go语言中…

React 第五十五节 Router 中 useAsyncError的使用详解

前言 useAsyncError 是 React Router v6.4 引入的一个钩子&#xff0c;用于处理异步操作&#xff08;如数据加载&#xff09;中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误&#xff1a;捕获在 loader 或 action 中发生的异步错误替…

.NET 9中的异常处理性能提升分析:为什么过去慢,未来快

一、为什么要关注.NET异常处理的性能 随着现代云原生、高并发、分布式场景的大量普及&#xff0c;异常处理&#xff08;Exception Handling&#xff09;早已不再只是一个冷僻的代码路径。在高复杂度的微服务、网络服务、异步编程环境下&#xff0c;服务依赖的外部资源往往不可…

第二十九章 数组

第二十九章 数组 数组。所有编程语言中都少不了数组,Shell语言也不例外,只不过支持程度非常有限。即便如此,在解决某些编程问题时,数组也能发挥大作用。 什么是数组 数组是一种可以一次存放多个值的变量,其组织形式类似与表格。数组中的每个变量叫做元素,每个元素都含…

ffmpeg(五):裁剪与合并命令

裁剪&#xff08;剪切&#xff09; 精准裁剪&#xff08;有转码&#xff0c;支持任意起止时间&#xff09; # 从第 10 秒到第 30 秒&#xff0c;重新编码 ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c:v libx264 -c:a aac output.mp4快速裁剪&#xff08;无转码&#x…

20、typedef和typename

在C中&#xff0c;typedef和typename有不同的用途和语法。以下是它们的主要区别&#xff1a; typedef typedef用于为现有类型定义一个新的名字。它通常用于简化复杂类型声明&#xff0c;使代码更易读。 示例&#xff1a; typedef unsigned long ulong; typedef int (*func_…

僵尸进程是什么?怎么回收?孤儿进程?

僵尸进程是什么&#xff1f; 僵尸进程的定义&#xff1a;对于多进程程序&#xff0c;当子进程结束运行但父进程还未读取其退出状态时&#xff0c;子进程就处于僵尸态。此时&#xff0c;内核不会立即释放该子进程的进程表表项&#xff0c;以满足父进程后续查询子进程退出信息的…

[AI绘画]sd学习记录(二)文生图参数进阶

目录 7.高分辨率修复&#xff1a;以小博大8.细化器&#xff08;Refiner&#xff09;&#xff1a;两模型接力9.随机数种子&#xff08;Seed&#xff09;&#xff1a;复现图片吧 本文接续https://blog.csdn.net/qq_23220445/article/details/148460878?spm1001.2014.3001.5501…

C++学习思路

C++知识体系详细大纲 一、基础语法 (一)数据类型 基本数据类型 整数类型(int, short, long, long long)浮点类型(float, double, long double)字符类型(char, wchar_t, char16_t, char32_t)布尔类型(bool)复合数据类型 数组结构体(struct)联合体(union)枚举类型…

34、协程

在Linux系统中&#xff0c;协程是一种轻量级的线程&#xff0c;它们允许在多个任务之间切换&#xff0c;而不需要操作系统的线程调度。协程可以分为有栈协程和无栈协程&#xff0c;以及对称协程和非对称协程。 有栈协程 有栈协程每个协程都有自己的栈空间&#xff0c;允许协程…

DeepSeek 赋能金融科技,重塑开放银行生态新图景

目录 一、金融科技开放银行生态建设的现状与挑战二、DeepSeek 技术解析2.1 DeepSeek 的技术原理与特点2.2 与其他相关技术的对比优势 三、DeepSeek 在开放银行生态建设中的具体应用场景3.1 智能客服与财富管理3.2 风控与合规管理3.3 生态协同与数据共享 四、DeepSeek 应用案例分…

【QT控件】输入类控件详解

目录 一、QLineEdit 二、Text Edit 三、Combo Box 四、Spin Box 五、Date Edit & Time Edit 六、Dial 七、Slider QT专栏&#xff1a;QT_uyeonashi的博客-CSDN博客 一、QLineEdit QLineEdit 用来表示单行输入框. 可以输入一段文本, 但是不能换行 核心属性 核心信号…

【Oracle】存储过程

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 存储过程基础概述1.1 存储过程的概念与特点1.2 存储过程的组成结构1.3 存储过程的优势 2. 基础存储过程2.1 简单存储过程2.1.1 创建第一个存储过程2.1.2 带变量的存储过程 2.2 带参数的存储过程2.2.1 输入参…

【MATLAB代码】制导方法介绍与例程——三点法|三维空间,动态目标导引(订阅专栏后可直接查看源代码)

三点法导引是一种导弹制导策略,通过计算导弹、目标和制导站之间的相对位置来确保导弹准确追踪移动目标。该方法利用三角定位和动态调整,实时更新导弹的飞行路径,以提高命中率,广泛应用于军事导弹和无人机等领域。文中有完整的matlab源代码,订阅专栏后即可查看 文章目录 代…