使用 Zabbix 监控 MySQL 存储空间和性能指标的完整实践指南

news2025/6/2 18:15:11

目录

引言

一、最终目标支持功能

二、监控方案设计

2.1 技术选型

2.2 设计思路

三、实现步骤

3.1 准备工作

3.11 创建 MySQL 监控账号

3.12 配置 .my.cnf 文件

 3.2 编写统一脚本

 3.3 配置 Zabbix Agent UserParameter

 3.4 Zabbix 前端配置建议

四、总结


引言

MySQL 数据库作为众多业务系统的核心组件,其性能与存储状况直接影响系统的稳定性和响应速度。对于运维工程师而言,实时监控 MySQL 的性能指标和存储空间使用情况尤为关键。本文将分享如何使用 Zabbix 结合自定义脚本,监控 MySQL 的关键性能指标(如 QPS、TPS)及存储空间使用(包括数据库空间大小、日志文件大小等),帮助你搭建精准且高效的数据库监控体系。

一、最终目标支持功能

支持如下参数调用:

参数含义
QPS每秒查询数
TPS每秒事务数
dbsize所有数据库空间使用(MB)
dbsize[<库名>]某个数据库空间使用(MB)

二、监控方案设计

2.1 技术选型

  • Zabbix Agent:用于在数据库服务器采集指标数据。

  • 自定义 Shell 脚本:通过 MySQL 命令查询系统状态和文件大小,输出给 Zabbix。

  • MySQL 只读监控账号:用于查询性能指标和表空间信息。

2.2 设计思路

  • 统一脚本根据参数动态返回不同指标值,避免分散管理。

  • 采用 .my.cnf 文件存储数据库连接信息,保证安全。

  • Zabbix Agent 通过 UserParameter 调用脚本,实现灵活监控。

三、实现步骤

3.1 准备工作

3.11 创建 MySQL 监控账号
-- 创建用户(如已存在可跳过)
CREATE USER 'zbx_monitor'@'localhost' IDENTIFIED BY '你的安全密码';

-- 授权所需权限:
-- 1. SHOW DATABASES            — 用于数据库自动发现(LLD)
-- 2. PROCESS                   — 用于查询当前线程等状态
-- 3. REPLICATION CLIENT        — 允许读取主从状态
-- 4. SELECT ON *.*             — 允许查看库大小、InnoDB 统计、慢查询数等
GRANT SHOW DATABASES, PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'zbx_monitor'@'localhost';

-- 强烈建议刷新权限以立即生效
FLUSH PRIVILEGES;
3.12 配置 .my.cnf 文件

/var/lib/zabbix/.my.cnf 文件中写入: 

[client]
user=zbx_monitor
password=your_password

并设置权限:

chmod 600 /var/lib/zabbix/.my.cnf

 3.2 编写统一脚本

# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh
#!/bin/bash

METRIC="$1"
DB_NAME="$2"

MY_CNF="/var/lib/zabbix/.my.cnf"
MYSQL_HOST="192.168.1.129"
MYSQL_PORT="3306"

MYSQL_CMD="mysql --defaults-extra-file=$MY_CNF -h$MYSQL_HOST -P$MYSQL_PORT -Nse"
MYSQLADMIN_CMD="mysqladmin --defaults-extra-file=$MY_CNF -h$MYSQL_HOST"

get_qps() {
  Uptime=$($MYSQLADMIN_CMD status | awk '{print $2}')
  Questions=$($MYSQLADMIN_CMD status | awk '{print $6}')
  [[ "$Uptime" -gt 0 ]] && awk "BEGIN {printf \"%.2f\", $Questions / $Uptime}" || echo 0
}

get_tps() {
  Uptime=$($MYSQLADMIN_CMD status | awk '{print $2}')
  rollback=$($MYSQLADMIN_CMD extended-status | awk '/Com_rollback/{print $4}')
  commit=$($MYSQLADMIN_CMD extended-status | awk '/Com_commit/{print $4}')
  total=$((rollback + commit))
  [[ "$Uptime" -gt 0 ]] && awk "BEGIN {printf \"%.2f\", $total / $Uptime}" || echo 0
}

get_db_size() {
  if [[ -z "$DB_NAME" ]]; then
    RESULT=$($MYSQL_CMD "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) FROM information_schema.tables;")
  else
    RESULT=$($MYSQL_CMD "SELECT ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) FROM information_schema.tables WHERE table_schema='$DB_NAME';")
  fi
  echo "${RESULT:-0}"
}

case "$METRIC" in
  qps) get_qps ;;
  tps) get_tps ;;
  dbsize) get_db_size ;;
  *) echo "Unsupported metric"; exit 1 ;;
esac

设置执行权限:

chmod +x /usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh

3.3 配置 Zabbix Agent UserParameter

编辑 
# vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/userparameter_mysql.conf
UserParameter=mysql.qps,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh qps
UserParameter=mysql.tps,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh tps
UserParameter=mysql.dbsize,/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh dbsize
UserParameter=mysql.dbsize[*],/usr/local/zabbix/etc/zabbix_agentd.conf.d/scripts/mysql_monitor.sh dbsize "$1"

重启 Agent:

systemctl restart zabbix-agent

 3.4 Zabbix 前端配置建议

  • 创建监控项:

    • mysql.qps(单位:ops)

    • mysql.tps(单位:ops)

    • mysql.dbsize(单位:MB)

    • mysql.dbsize[your_db](单位:MB,按需添加)

  • 设定更新间隔如 1m5m

  • 设置合适的触发器阈值,例如:

    {host:mysql.qps.last()} > 1000
    {host:mysql.dbsize.last()} > 10240
    

四、总结

本文提供了一个简洁且实用的 Zabbix + MySQL 监控方案,重点解决 MySQL 存储空间及关键性能指标采集问题。通过集中管理的脚本和灵活的 Zabbix 配置,能够帮助运维快速构建稳定、全面的数据库监控体系,提升问题预警能力和故障响应速度。

欢迎关注与交流,如需脚本模板或更多指标监控实现,欢迎留言。 

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

    如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

    相关文章

    【技能拾遗】——家庭宽带单线复用布线与配置(移动2025版)

    &#x1f4d6; 前言&#xff1a;在家庭网络拓扑中&#xff0c;客厅到弱电箱只预埋了一根网线&#xff0c;由于已将广电的有线电视取消并改用IPTV。现在需要解决在客厅布置路由器和观看IPTV问题&#xff0c;这里就用到单线复用技术。 目录 &#x1f552; 1. 拓扑规划&#x1f55…

    异步日志监控:FastAPI与MongoDB的高效整合之道

    title: 异步日志监控:FastAPI与MongoDB的高效整合之道 date: 2025/05/27 17:49:39 updated: 2025/05/27 17:49:39 author: cmdragon excerpt: FastAPI与MongoDB整合实现日志监控系统的实战指南。首先配置MongoDB异步连接,定义日志数据模型。核心功能包括日志写入接口、聚合…

    在 Android 上备份短信:保护您的对话

    尽管我们的Android手机有足够的存储空间来存储无数的短信&#xff0c;但由于设备故障、意外删除或其他意外原因&#xff0c;您可能会丢失重要的对话。幸运的是&#xff0c;我们找到了 5 种有效的 Android SMS 备份解决方案&#xff0c;确保您的数字聊天和信息保持安全且可访问。…

    标题:2025海外短剧爆发年:APP+H5双端系统开发,解锁全球流量与变现新大陆

    描述&#xff1a; 2025年出海新风口&#xff01;深度解析海外短剧系统开发核心&#xff08;APPH5双端&#xff09;&#xff0c;揭秘高效开发策略与商业化路径&#xff0c;助您抢占万亿美元市场&#xff01; 全球娱乐消费模式正在剧变。2025年&#xff0c;海外短剧市场已从蓝海…

    解决RAGFlow(v0.19.0)有部分PDF无法解析成功的问题。

    ragflow版本为&#xff1a;v0.19.0 1.解析的时候报错&#xff1a;Internal server error while chunking: Coordinate lower is less than upper。 看报错怀疑是分片的问题&#xff0c;于是把文档的切片方法中的“建议文本块大小”数值&#xff08;默认512&#xff09;调小&…

    c#基础08(数组)

    文章目录 数组数组概念声明数组初始化数组赋值给数组访问数组元素 集合动态数组(ArrayList)使用foreach循环C#数组细节多维数组传递数组给函数参数数组 数组 数组概念 数组是一个存储相同类型元素的固定大小的顺序集合。数组是用来存储数据的集合&#xff0c;通常认为数组是一…

    嵌入式学习--江协stm32day3

    这是我目前为止认为最重要的模块--TIM定时器&#xff0c;这里我们主要学习通用定时器 最小的计数计时单元为时基单元&#xff0c;包括PSC&#xff0c;ARR&#xff0c;CNT CK_PSC&#xff08;Prescaler&#xff0c;预分频器&#xff09;&#xff1a;作用是对输入时钟信号进行分…

    4.8.1 利用Spark SQL实现词频统计

    在利用Spark SQL实现词频统计的实战中&#xff0c;首先需要准备单词文件并上传至HDFS。接着&#xff0c;可以通过交互式方法或创建Spark项目来实现词频统计。交互式方法包括读取文本文件生成数据集&#xff0c;扁平化映射得到新数据集&#xff0c;然后将数据集转成数据帧&#…

    PyTorch中nn.Module详解

    直接print(dir(nn.Module))&#xff0c;得到如下内容&#xff1a; 一、模型结构与参数 parameters() 用途&#xff1a;返回模块的所有可训练参数&#xff08;如权重、偏置&#xff09;。示例&#xff1a;for param in model.parameters():print(param.shape)named_parameters…

    动态表单开发避坑:改变input的值不会触发change事件即时修复策略-WdatePicker ——仙盟创梦IDE

    原始传统模式 onchange <input onchange"未来之窗东方仙盟change(this)" oni > <script>function 未来之窗东方仙盟change(onj){console.log("未来之窗东方仙盟change",onj.value)} </script> 测试 原始传统模式 oninput <input …

    10.安卓逆向2-frida hook技术-frida基本使用-frida指令(用于hook)

    免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 工具下载&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码&#xff1…

    动态设置微信小程序页面标题(navigationBarTitleText属性)

    前言&#xff1a; 最近在公司进行小程序研发的时候&#xff0c;产品给出了一个动态加载页面标题的需求&#xff0c;经过调研之后将结果在这里与各位伙伴进行分享。 代码展示&#xff1a; 在.json文件中进行初始配置&#xff1a; { "usingComponents": {}, &q…

    Flutter下的一点实践

    目录 1、背景2、refena创世纪代码3、localsend里refena的刷新3.1 初始状态3.2 发起设备扫描流程3.3 扫描过程3.3 刷新界面 4.localsend的设备扫描流程4.1 UDP广播设备注册流程4.2 TCP/HTTP设备注册流程4.3 localsend的服务器初始化工作4.4总结 1、背景 在很久以前&#xff0c;…

    VScode ios 模拟器安装cocoapods

    使用 Homebrew 安装&#xff08;推荐&#xff09; 如果你有 Homebrew&#xff0c;直接用它安装更稳定&#xff1a; brew install cocoapods

    Redis最佳实践——安全与稳定性保障之数据持久化详解

    Redis 在电商应用的安全与稳定性保障之数据持久化全面详解 一、持久化机制深度解析 1. 持久化策略矩阵 策略触发方式数据完整性恢复速度适用场景RDB定时快照分钟级快容灾备份/快速恢复AOF实时追加日志秒级慢金融交易/订单关键操作混合模式RDBAOF同时启用秒级中等高安全要求场…

    K 值选对,准确率翻倍:KNN 算法调参的黄金法则

    目录 一、背景介绍 二、KNN 算法原理 2.1 核心思想 2.2 距离度量方法 2.3 算法流程 2.4算法结构&#xff1a; 三、KNN 算法代码实现 3.1 基于 Scikit-learn 的简单实现 3.2 手动实现 KNN&#xff08;自定义代码&#xff09; 四、K 值选择与可视化分析 4.1 K 值对分类…

    技术栈ES的介绍和使用

    目录 1. 全文搜索引擎&#xff08;Elastic Search&#xff09;的由来2. Elastic Search 概述2.1 Elastic Search 介绍2.2 Elastic Search 功能2.3 Elastic Search 特点 3. 安装 Elastic Search3.1 ES 的安装3.2 安装 kibana3.3 ES 客户端的安装 4. Elastic Search 基本概念4.1 …

    Windows版本的postgres安装插件http

    1、下载安装包 这里使用安装 pgsql-http 的扩展 源码地址&#xff1a;GitHub - pramsey/pgsql-http: HTTP client for PostgreSQL, retrieve a web page from inside the database. 编译的安装地址&#xff1a;http extension for windows updated to include PostgreSQL17 …

    uni-app学习笔记十六-vue3页面生命周期(三)

    uni-app官方文档页面生命周期部分位于页面 | uni-app官网。 本篇再介绍2个生命周期 1.onUnload&#xff1a;用于监听页面卸载。 当页面被关闭时&#xff0c;即页面的缓存被清掉时触发加载onUnload函数。 例如:在demo6页面点击跳转到demo4&#xff0c;在demo4页面回退不了到d…

    优化的两极:凸优化与非凸优化的理论、应用与挑战

    在机器学习、工程设计、经济决策等众多领域&#xff0c;优化问题无处不在。而在优化理论的世界里&#xff0c;凸优化与非凸优化如同两个截然不同的 “王国”&#xff0c;各自有着独特的规则、挑战和应用场景。今天&#xff0c;就让我们深入探索这两个优化领域的核心差异、算法特…