Zabbix 7.4 安装完整教程:Linux 系统使用外置 MySQL 数据库实战指南

Zabbix 7.4 完整安装教程,使用外置 MySQL 8.0 数据库。覆盖 RHEL 9 / Rocky 9 / Alma 9 仓库配置、MySQL 安装与调优、Zabbix Server 安装、初始表结构导入、Web UI 配置、Agent 批量部署、模板与 LLD、MySQL 主从与备份、10 大常见故障排查。

📞 IT 峰哥团队 · 企业信息化落地服务

IT 峰哥深耕企业 IT 基础设施领域多年,专注为各类型企业提供网络安全规划、设备选型、上网行为管理、超融合部署、文档加密、考勤门禁、视频监控等信息化项目整包落地服务。从方案设计、设备选型、上门实施到后期运维,全程跟进。

承接规模:小微企业 / 成长型企业 / 中大型企业,均提供定制化方案
服务范围:防火墙、上网行为、AP+AC、域控、NAS、超融合、文档加密、人脸考勤、视频监控、机房动环等
合作流程:需求沟通 → 方案设计 → 设备选型 → 落地实施 → 持续运维

📱 17712677007(微信同号)

📞 24 小时全天候响应 · 紧急项目优先安排

Zabbix 7.4 外置 MySQL 数据库安装实战指南

一、为什么选择 Zabbix + 外置 MySQL 这个组合

Zabbix 是目前企业级开源监控领域事实上的”瑞士军刀”——从 1998 年诞生至今,已经成为全球数十万企业 IT 基础设施监控的事实标准。根据 DB-Engines 等业内公开排名,Zabbix 长期稳居”网络监控”细分类别第一,覆盖网络设备、服务器、应用程序、服务、数据库、虚拟化、容器、云资源、IoT 等几乎所有可观测性场景。

Zabbix 官方同时支持 MySQL/MariaDB、PostgreSQL、SQLite、Oracle、IBM DB2 五大数据库后端。**默认安装路径**是使用 Zabbix 自带的 SQLite 或本机 MySQL——开发测试、几十台小规模监控完全够用。但当监控规模上升到 1000+ 主机、数万监控项、秒级采集时,**把数据库从 Zabbix Server 拆出去做”外置”** 几乎是企业生产的必选路径。

外置数据库的核心收益有四点:

  • 性能隔离:Zabbix Server 的轮询、trap 接收、告警计算、LLD(低层发现)会大量消耗 CPU/MySQL 连接数。拆出去后,Zabbix Server 进程专心做监控逻辑,MySQL 进程专心做数据存储与查询,互不抢资源。
  • 容量扩展:Zabbix 的历史数据(history/trends)增长极快——按每主机 100 个监控项、每 60 秒采集一次算,一天约 1440 万条记录,一年下来趋势表可达 10GB+。外置 MySQL 后,磁盘、内存、备份策略都可以独立扩容,不受 Zabbix Server 主机限制。
  • 高可用与灾备:外置 MySQL 可以做主从复制、双主、MGR、Galera Cluster、共享存储等高可用方案。Zabbix Server 主机故障时,重建一台接入现有 MySQL 集群即可恢复;MySQL 故障时也能用主从切换保住历史数据。
  • 运维解耦:DBA 团队接管数据库(备份、慢查询优化、主从延迟监控、版本升级),监控团队专心 Zabbix 配置、模板、告警逻辑。专业化分工让两边都更高效。

本文以 Zabbix 7.4(2024 年发布的当前稳定主线)+ MySQL 8.0(当前主流 LTS)+ RHEL 9 / Rocky Linux 9 / AlmaLinux 9 这一当前最主流的 RHEL 衍生发行版为示例,完整演示”外置 MySQL”的安装、配置、调优、常见故障排查全过程。所有路径与命令均经过官方源验证,具体版本号以 Zabbix 官方下载页与 MySQL 官方仓库最新发布为准

二、Zabbix 7.4 的核心组件与架构

在开始安装之前,先把 Zabbix 的核心组件画清楚,能避免后面配置时搞混”这个进程跑在哪台机器”。

组件作用默认端口部署位置
Zabbix Server主进程,轮询/Trap 接收、告警计算、历史数据写入10051 (Server 监听 Agent 主动模式)外置 MySQL 时单台独立部署
Zabbix Agent / Agent2部署在被监控主机,采集本地指标10050每台被监控端
Zabbix Proxy分布式代理,汇总远程分支网络后回传 Server10051可选,分支/弱网/跨网段场景
Zabbix Web (Frontend)PHP Web UI,配置 + 看板 + 告警展示8080 (默认,可改 80/443)与 Server 同机或独立 Nginx+PHP
MySQL/MariaDB配置库、用户库、历史/趋势数据存储3306本文重点:与 Zabbix Server 拆开部署
Zabbix Sender主动推送数据到 Server/Proxy脚本/批处理用
Zabbix Get主动拉取监控项值测试运维调试

Zabbix 7.4 相比 7.0/6.0 LTS 有几项关键升级:

  • 原生 HTTP/HTTPS Agent:监控项类型直接支持 HTTP,无需外部脚本,对 REST API 监控更友好。
  • Zabbix 7.4 LTS 性能优化:历史数据并行写入器(history writer)从 1 个增加到 4 个,告警队列、LLD 速度大幅提升。
  • Items 同步采集:7.4 引入了同步采集模式(poller 同步处理),降低延迟、提高实时性。
  • 模板体系升级:官方模板从 100+ 增加到 300+,覆盖云原生(K8s、AWS、Azure)、数据库(PG/MySQL/Oracle/Mongo)、中间件(Nginx/Redis/Kafka)、网络(Juniper/Arista/Cisco/Huawei)的开箱即用监控。

外置 MySQL 的标准部署结构是:Zabbix Server 主机一台(4C8G 起)+ MySQL 主机一台(4C8G+ 起步,按监控规模扩容)。开发测试可以两台合一,生产环境强烈建议分开。

三、安装前必查清单

在执行任何命令之前,先对照下面 6 项确认环境就绪,缺一项都可能导致半路返工。

  1. 操作系统:RHEL 9.x / Rocky Linux 9.x / AlmaLinux 9.x 任一,社区主流 64-bit。Ubuntu 22.04 LTS/24.04 LTS 路径类似但包名和路径不同(apt vs dnf),本文以 dnf 路径为主。
  2. 主机互通与时间同步:Zabbix Server 与 MySQL 数据库服务器之间 3306 端口互通;两台机器 NTP/chrony 时间同步,偏差控制在 10 秒内(Zabbix 内部用时间戳计算数据点)。
  3. 防火墙放行:Zabbix Server 入站 10051(接收 Agent 主动模式)+ 8080/443(Web UI 访问);MySQL 主机入站 3306 仅对 Zabbix Server IP 开放;Agent 主机入站 10050。
  4. SELinux 状态:RHEL 9 默认 enforcing,建议保持并按需放行 Zabbix 规则(详见第七章),不要图省事直接关 SELinux。
  5. 主机名规划:给 Zabbix Server 一个固定主机名(如 zabbix-prod-01),MySQL 主机一个固定名(如 mysql-zabbix-01),/etc/hosts 里互相加解析(DNS 不可用时),避免 Zabbix Server 找不到 MySQL 主机。
  6. YUM/DNF 仓库就绪:MySQL 8.0 官方仓库(mysql80-community-release-el9-X.noarch.rpm)已装;Zabbix 仓库通过 dnf config-manager 添加(详见第四章),所有主机能联网访问 repo.zabbix.comrepo.mysql.com

所有项确认后,下一步进入 MySQL 服务器的安装与配置。

四、外置 MySQL 8.0 数据库安装(独立主机)

先装数据库,目的是让 Zabbix Server 安装时就能指向一个已经就绪的 MySQL 实例。

4.1 安装 MySQL 8.0 社区版

# 卸载系统自带的 MariaDB(如有)
dnf remove -y mariadb* mysql* 2>/dev/null
dnf module disable -y mysql mariadb

# 装 MySQL 8.0 官方仓库
dnf install -y https://repo.mysql.com/mysql80-community-release-el9-1.noarch.rpm
# 注意:MySQL 8.4 / 8.0 仓库名是 mysql80,yum 仓库即使 MySQL 8.4 也是 mysql80
# 不同小版本升级:dnf install -y https://repo.mysql.com/mysql84-community-release-el9-1.noarch.rpm

# 装 MySQL Server 与客户端工具
dnf install -y mysql-community-server mysql-community-client

# 启动 + 开机自启
systemctl enable --now mysqld

# 查看临时 root 密码
grep "temporary password" /var/log/mysqld.log | awk '{print $NF}'

首次启动会生成临时 root 密码,从 /var/log/mysqld.log 里 grep password 拿到。第一次登录必须用临时密码 + 立即修改。

4.2 安全加固(mysql_secure_installation)

mysql_secure_installation

# 交互式回答:
# - Change root password? → Y(设复杂密码,至少 12 位,大小写+数字+符号)
# - Remove anonymous users? → Y
# - Disallow root login remotely? → Y(远程用应用账号,root 仅本机)
# - Remove test database? → Y
# - Reload privilege tables now? → Y

4.3 创建 Zabbix 专用数据库与账号

mysql -u root -p

-- 创建字符集为 utf8mb4 的数据库(Zabbix 要求 utf8mb4_bin 排序规则)
CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

-- 单独账号、最小权限、限制来源 IP(仅允许 Zabbix Server 内网 IP)
CREATE USER 'zabbix'@'10.0.1.%' IDENTIFIED BY 'ZbxStr0ngP@ssw0rd_2026';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'10.0.1.%';

-- 如果 Server 跑在多台(如双机热备),按需加更多用户
CREATE USER 'zabbix'@'10.0.1.21' IDENTIFIED BY 'ZbxStr0ngP@ssw0rd_2026';
GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'10.0.1.21';

FLUSH PRIVILEGES;

-- 关键:Zabbix 7.4 导入表结构前必须开启 log_bin_trust_function_creators
SET GLOBAL log_bin_trust_function_creators = 1;
EXIT;

**生产环境强烈建议**:把 SET GLOBAL log_bin_trust_function_creators = 1 写入 MySQL 配置文件 /etc/my.cnf.d/zabbix.cnf,重启后生效,避免每次手设。

4.4 MySQL 关键参数调优(Zabbix 场景)

MySQL 默认参数是面向 OLTP 通用场景的,对 Zabbix 这种”大量写 + 周期性大查询(看板、报表)”的工作负载不够好。推荐在 /etc/my.cnf.d/zabbix-tuning.cnf 里加:

[mysqld]
# 字符集与时区
character-set-server = utf8mb4
collation-server = utf8mb4_bin
default-time-zone = '+08:00'

# InnoDB 缓冲池(推荐 50-70% 物理内存;64GB 机器可设 24-32G)
innodb_buffer_pool_size = 16G
innodb_buffer_pool_instances = 8

# 日志与刷盘
innodb_log_file_size = 2G
innodb_log_buffer_size = 64M
innodb_flush_log_at_trx_commit = 2
sync_binlog = 0

# 连接与线程
max_connections = 500
thread_cache_size = 50
table_open_cache = 4000

# 临时表与排序
tmp_table_size = 256M
max_heap_table_size = 256M

# 慢查询
slow_query_log = 1
long_query_time = 2

# 二进制日志(高可用 + 时点恢复)
log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 14
binlog_format = ROW
log_bin_trust_function_creators = 1

# 性能模式(可选,调试用)
performance_schema = ON

重启 MySQL 让配置生效:systemctl restart mysqld。**innodb_buffer_pool_size 是 Zabbix 数据库性能的第一关键参数**,监控规模越大(历史数据越多),这个值越要调高。

五、Zabbix 7.4 Server 主机安装(连接外置 MySQL)

MySQL 就绪后,开始装 Zabbix Server 本体。本节操作都在 Zabbix Server 主机执行。

5.1 添加 Zabbix 7.4 官方仓库

Zabbix 7.4 官方对 RHEL 系发行版(含 Rocky Linux 9 / AlmaLinux 9 / Oracle Linux 9)的标准仓库路径是 repo.zabbix.com/zabbix/7.4/stable/rocky/9/。直接配 baseurl 是 Zabbix 官方文档长期推荐方式,比下载 release RPM 更可控:

# 装 dnf-utils(提供 config-manager 命令)
dnf install -y dnf-utils

# 添加 Zabbix 7.4 仓库(EL9 路径,同时适用 RHEL 9 / Rocky 9 / Alma 9)
dnf config-manager --add-repo https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64/zabbix.repo

# 验证仓库(应能看到 zabbix, zabbix-non-supported 两个仓库)
dnf repolist | grep zabbix

如果 zabbix.repo 文件下载下来是空或内容不完整,可手写:

cat > /etc/yum.repos.d/zabbix.repo <<'EOF'
[zabbix]
name=Zabbix 7.4 Official Repository (EL9)
baseurl=https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64
enabled=1
gpgcheck=0
gpgkey=https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64/RPM-GPG-KEY-ZABBIX
EOF

dnf clean all
dnf repolist | grep zabbix

**注意**:写 gpgcheck=0 是临时方案(很多 GPG key 路径有版本差异)。生产环境应把 Zabbix 官方 GPG key 装到 /etc/pki/rpm-gpg/ 再改回 gpgcheck=1

5.2 安装 Zabbix Server + Frontend + Agent2

dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

# 依赖组件(EL9 缺 php-fpm 和部分 PHP 扩展时手动补)
dnf install -y php-fpm php-mysqlnd php-gd php-bcmath php-xml php-mbstring php-ldap

上面 5 个包分别是:
- zabbix-server-mysql:Zabbix Server 主进程 + MySQL 驱动
- zabbix-web-mysql:PHP 前端(依赖 MySQL 驱动)
- zabbix-nginx-conf:Nginx 站点配置文件(监听 8080)
- zabbix-sql-scripts:Zabbix 数据库初始表结构 SQL(server.sql.gz
- zabbix-agent2:本机 Agent(Zabbix Server 也装一个用于自监控)

5.3 导入 Zabbix 初始表结构到外置 MySQL

关键步骤——表结构要导入到**外置 MySQL 主机**的 zabbix 库,不是本机:

# server.sql.gz 在 zabbix-sql-scripts 包里
ls -la /usr/share/zabbix-sql-scripts/mysql/server.sql.gz

# 推到 MySQL 主机解包导入(用 ssh + pipe 流式导入,更省空间)
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --protocol=tcp -h 10.0.1.20 -u zabbix -p zabbix
# 按提示输入 zabbix 账号密码
# 注意:必须用 --protocol=tcp 强制 TCP 连接(避免走 socket 误连本机)

导入过程可能持续 1-5 分钟(取决于磁盘 IO),完成后验证:

mysql -h 10.0.1.20 -u zabbix -p zabbix -e "SHOW TABLES;" | wc -l
# 应输出 200+ 张表(Zabbix 7.4 默认约 200 张)

mysql -h 10.0.1.20 -u zabbix -p zabbix -e "SELECT COUNT(*) FROM users;"
# 应输出非零(默认 Admin/zabbix 用户)

5.4 配置 Zabbix Server 连接外置 MySQL

编辑 /etc/zabbix/zabbix_server.conf,关键是 DB* 四行:

# 外置 MySQL 主机 IP(绝对不能用 localhost,会走 socket)
DBHost=10.0.1.20
DBName=zabbix
DBUser=zabbix
DBPassword=ZbxStr0ngP@ssw0rd_2026
DBSocket=/var/lib/mysql/mysql.sock    # 本机无 MySQL 时注释掉

# 性能调优(按监控规模调整)
StartPollers=20
StartTrappers=10
StartPingers=10
StartDiscoverers=5
StartHistoryPollers=10
StartEscalators=5

# 缓存
CacheSize=128M
HistoryCacheSize=64M
TrendCacheSize=32M
ValueCacheSize=64M

# 超时
Timeout=30

**关键陷阱**:DBHost=localhostDBHost=127.0.0.1 行为不同——前者走 Unix Socket,后者走 TCP。**外置 MySQL 必须用 IP + 强制 TCP**,写 127.0.0.1 或本机 IP 都不对。

5.5 配置 PHP 与 Nginx(Frontend)

# 编辑 /etc/php-fpm.d/zabbix.conf(包 zabbix-nginx-conf 自带)
# 关键参数:
php_value[date.timezone] = Asia/Shanghai
php_value[memory_limit] = 256M
php_value[post_max_size] = 32M
php_value[upload_max_filesize] = 16M
php_value[max_execution_time] = 300

# Nginx 站点(/etc/nginx/conf.d/zabbix.conf)
# 默认监听 8080;如果 80/443 已被占需改 listen 行
# 关键修改(按实际网络):
server {
    listen 8080;
    server_name zabbix.example.com;
    root /usr/share/zabbix/ui;
    ...
}

5.6 启动服务 + 验证

# SELinux 放行(保持 enforcing 状态)
setsebool -P httpd_can_connect_zabbix on
setsebool -P httpd_can_network_connect_db on
setsebool -P zabbix_can_network on

# 启动
systemctl enable --now zabbix-server zabbix-agent2 nginx php-fpm

# 验证 Server 启动日志(关键看 "database is not configured" 是否消失)
tail -f /var/log/zabbix/zabbix_server.log
# 看到 "server #0 started [main process]" + 多个 poller/trapper started = OK

# 验证 Web 端口
ss -tlnp | grep -E '8080|10051|10050'

5.7 防火墙放行

firewall-cmd --permanent --add-port=10051/tcp    # Zabbix Server 监听
firewall-cmd --permanent --add-port=10050/tcp    # Agent 监听(本机装 Agent)
firewall-cmd --permanent --add-port=8080/tcp     # Web UI
firewall-cmd --permanent --add-port=3306/tcp     # MySQL(仅对 Server IP 限源)
firewall-cmd --reload

# MySQL 主机更安全做法:rich-rule 限制源 IP
firewall-cmd --permanent --add-rich-rule='rule family=ipv4 source address=10.0.1.21/32 port port=3306 protocol=tcp accept'
firewall-cmd --reload

六、首次访问 Web UI 与初始化配置

浏览器访问 http://ZABBIX_SERVER_IP:8080/ 进入安装向导。

  1. Welcome → 选语言(中文 zh_CN)→ 下一步
  2. Check of pre-requisites → 所有项必须 OK;PHP 时区、扩展、参数不符合会在这里标红。常见缺:bcmathmbstringldapgddnf install 补上重启 php-fpm 即可。
  3. Configure DB connection
    • Database type: MySQL
    • Database host: 10.0.1.20(外置 MySQL IP)
    • Database port: 3306
    • Database name: zabbix
    • User: zabbix
    • Password: 数据库密码
  4. Zabbix server details
    • Host: localhost(指 Zabbix Server 进程本身)
    • Port: 10051
    • Name: 自定义(如 Zabbix-Prod-01
  5. Pre-installation summary → 确认无误 → Next step
  6. Install → 完成 → 跳到登录页

默认账号 Admin / zabbix(Admin 大写 A),首次登录强制改密码。**生产环境第一步**:立即改密码、关闭仪表盘的"不安全账户"提醒、配置 SSL 证书(改 Nginx 监听 443 + certbot 申请 Let's Encrypt 证书)。

七、Linux / Windows Agent 安装与批量部署

Zabbix Server 自身只能监控本机。监控其他主机必须装 Agent。

7.1 Linux 主机 Agent 部署

# 装仓库(与 Server 同样的方法)
dnf config-manager --add-repo https://repo.zabbix.com/zabbix/7.4/stable/rocky/9/x86_64/zabbix.repo

# 装 Agent2
dnf install -y zabbix-agent2

# 编辑配置 /etc/zabbix/zabbix_agent2.conf
# 关键三行:
Server=10.0.1.21             # Zabbix Server IP(被动模式白名单)
ServerActive=10.0.1.21       # Zabbix Server IP(主动模式上报目标)
Hostname=web-prod-01         # 主机名(必须与 Web UI "主机名"完全一致)

# 启动
systemctl enable --now zabbix-agent2
firewall-cmd --permanent --add-port=10050/tcp
firewall-cmd --reload

**批量部署建议**:用 Ansible 推送(写一个 role 改 Server/ServerActive/Hostname 三行 + 启动服务),百台机器 10 分钟搞定。SaltStack、Puppet、Chef 同理。

7.2 Windows 主机 Agent 部署

Zabbix 官方下载页下载 Zabbix Agent 2 MSI 安装包(Windows MSI),在 AD 域环境用 GPO 静默安装:

msiexec /i zabbix-agent2-7.4.0-windows-amd64-openssl.msi ^
  /qn ^
  SERVER=10.0.1.21 ^
  SERVERACTIVE=10.0.1.21 ^
  HOSTNAME=%COMPUTERNAME% ^
  ENABLEPATH=1

**注意**:MSI 默认装在 C:\Program Files\Zabbix Agent 2\,配置在 C:\Program Files\Zabbix Agent 2\zabbix_agent2.conf,服务名 Zabbix Agent 2。装完立即放行防火墙 10050 端口(netsh advfirewall firewall add rule name="Zabbix Agent" dir=in action=allow protocol=TCP localport=10050)。

7.3 SNMP 监控网络设备

交换机、路由器、防火墙、打印机等无 Agent 能力的设备,用 SNMP v2c/v3 监控:

# 在 Zabbix Server 上启用 snmp poller
# 编辑 /etc/zabbix/zabbix_server.conf
StartSNMPTrapper=1
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

# 装 snmp 工具
dnf install -y net-snmp-utils

# 测试 SNMP v2c 连通性
snmpwalk -v 2c -c public 10.0.2.1 sysName
# 返回 sysName.0 = STRING: SW-CORE-01 = OK

# Web UI 添加主机:SNMP interface 填 IP,SNMP community 填 public

**生产建议**:SNMP v2c 用 ACL 限制来源 IP + 复杂 community 字符串(如 ZBX_R0_R3@d0nly);高安全场景上 SNMP v3(authPriv:SHA + AES)。

八、模板、LLD、自动发现——Zabbix 真正的威力

装好 Server + Agent 只是"地基"。Zabbix 真正发挥价值是模板(Template)、低层发现(LLD)、自动注册(Auto Registration)这套机制。

8.1 官方模板(开箱即用)

Zabbix 7.4 自带 300+ 官方模板,覆盖:

类别代表模板关键指标
LinuxLinux by Zabbix agent / Linux SNMPCPU/内存/磁盘/网卡/进程
WindowsWindows by Zabbix agent同上 + 服务/事件日志/性能计数器
网络设备Template Net Cisco / Huawei / H3C / Juniper SNMP端口流量/光功率/CPU/内存/温度/风扇
数据库MySQL by Zabbix agent / PostgreSQL / MSSQL / OracleQPS/TPS/连接/慢查询/锁等待/Buffer Pool
中间件Nginx / Apache / Tomcat / Redis / Kafka / RabbitMQ连接数/请求数/延迟/内存/队列堆积
虚拟化VMware vSphere / Hyper-V / KVM / ProxmoxVM CPU/内存/磁盘/网络 + ESXi 主机
云资源AWS EC2/RDS/S3 / Azure VM / 阿里云 ECS/RDS实例状态/磁盘/网络/计费指标
容器Docker / Kubernetes容器/Pod/Node/Service 资源

**实操建议**:所有主机先挂"Linux by Zabbix agent"或"Windows by Zabbix agent"基线模板,再按业务挂专用模板。基线模板改 Trigger 阈值(避免默认阈值过敏感产生告警风暴)。

8.2 自动发现 + 自动注册

100+ 主机的手动添加是噩梦。Zabbix 提供两种自动化机制:

  • 网络发现(Network Discovery):Zabbix Server 主动扫网段(ICMP / SNMP / Zabbix Agent),发现新主机后自动加到指定 Host Group 并 Link 模板。适合网络设备多、IP 段固定的场景。
  • 主动 Agent 自动注册(Active Agent Auto-Registration):新机器装完 Agent 自动向 Server 注册,Server 按规则自动加监控。适合云主机、批量扩容场景。

**自动注册规则示例**(Web UI → Administration → Actions → Autoregistration actions):

  • Host metadata 包含 Linux → 加到 "Linux servers" 组,Link "Template OS Linux by Zabbix agent"
  • Host metadata 包含 Windows → 加到 "Windows servers" 组,Link "Template OS Windows by Zabbix agent"
  • Host name 包含 db- → 加到 "Databases" 组,Link MySQL/PG 模板

8.3 LLD(低层发现)动态监控

LLD 是 Zabbix 杀手锏——发现网卡的多个接口、磁盘的多分区、进程的多实例,按发现的实体自动创建监控项、触发器、图形。无需预先知道主机有几块网卡、几个分区。

示例:监控 Linux 主机所有网卡流量,LLD 自动发现 eth0/eth1/bond0,按发现的接口分别创建 net.if.in[ifName] / net.if.out[ifName] 监控项。**LLD 的发现脚本(discovery rule)可以自己写**,业内常见做法是基于 fdisk / lsblk / ip link / ss 等命令的 shell 脚本。

九、外置 MySQL 性能优化与维护

Zabbix 监控规模 1000+ 主机后,MySQL 性能成为系统瓶颈。常见优化点:

9.1 Housekeeper(Zabbix 自带数据清理)

# 编辑 /etc/zabbix/zabbix_server.conf
# 关闭 Zabbix 自带 housekeeper,改用 MySQL 事件定时清理
DisableHousekeeping=1

# 用 MySQL Event Scheduler(写入 /etc/my.cnf.d/zabbix-housekeeper.cnf)
event_scheduler = ON

MySQL Event 里写 SQL:

CREATE EVENT zabbix_housekeep_history
ON SCHEDULE EVERY 1 HOUR
STARTS CURRENT_TIMESTAMP
DO
  DELETE FROM history WHERE clock < UNIX_TIMESTAMP() - INTERVAL 7 DAY;
  DELETE FROM history_str WHERE clock < UNIX_TIMESTAMP() - INTERVAL 7 DAY;
  -- ... 其他 history_*, trends_* 表同理

**MySQL Event 删除比 Zabbix Housekeeper 快 5-10 倍**,因为 Zabbix Housekeeper 每 1 小时只删 4 批次(受 HousekeepingFrequency 控制),而 MySQL Event 一次性大 SQL 更高效。

9.2 分区表(超大场景)

监控项 ≥ 10 万 / 主机 ≥ 5000 的超大规模场景,给 history/trends 表做按天分区(PARTITION BY RANGE),老分区直接 DROP(秒级删除 100GB 数据)。Zabbix 官方提供 partition_all.sql 脚本(/usr/share/zabbix-sql-scripts/mysql/Zabbix 官方 Git)。

9.3 慢查询与索引

# 开启慢查询(MySQL 主机)
SET GLOBAL slow_query_log = 1;
SET GLOBAL long_query_time = 2;

# 看慢查询
mysqldumpslow -s t /var/log/mysql/mysql-slow.log | head -20

# Zabbix 关键查询的索引(trends 表 clock + itemid 联合索引,history_* 表 clock 索引)
# 大部分索引 Zabbix 默认已建好,极端情况手动加:
ALTER TABLE history ADD INDEX idx_clock_itemid (clock, itemid);

9.4 MySQL 主从(高可用)

外置 MySQL 最大的价值是能上主从:

# 主库 /etc/my.cnf
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_format = ROW
gtid_mode = ON
enforce_gtid_consistency = ON

# 从库 /etc/my.cnf
[mysqld]
server-id = 2
relay_log = /var/log/mysql/mysql-relay.log
gtid_mode = ON
enforce_gtid_consistency = ON
read_only = ON

# 从库配置复制
CHANGE MASTER TO
  MASTER_HOST='10.0.1.20',
  MASTER_USER='repl_user',
  MASTER_PASSWORD='ReplStr0ngP@ss',
  MASTER_AUTO_POSITION=1;
START SLAVE;
SHOW SLAVE STATUS\G
# 看到 Slave_IO_Running: Yes + Slave_SQL_Running: Yes = OK

**Zabbix Server 仍指向主库**(读写都走主库,因为 Zabbix 写入是主要负载)。从库可用于备份、慢查询、BI 报表等离线场景,避免影响 Zabbix 实时性能。

9.5 备份策略

# 全量备份(每日凌晨)
mysqldump --single-transaction --quick --routines --triggers --events \
  -h 10.0.1.20 -u backup -p zabbix | gzip > /backup/zabbix_$(date +%F).sql.gz

# 备份账号(zabbix 库读权限)
CREATE USER 'backup'@'10.0.1.%' IDENTIFIED BY 'BkpStr0ngP@ss';
GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON zabbix.* TO 'backup'@'10.0.1.%';

# 保留策略:每日全量保留 7 天 + 每周日全量保留 4 周 + 每月 1 号全量保留 12 月

十、常见问题与排错清单

Zabbix + 外置 MySQL 部署中最常踩的 10 个坑,按"出现频率 × 排查难度"排序:

  1. zabbix_server.log 报 "connection to database 'zabbix' failed: Can't connect to MySQL server":99% 是 DBHost 写错(写 localhost / 127.0.0.1 走 socket;外置必须写 IP)。DBPassword 含特殊字符时用单引号包。检查 /var/log/zabbix/zabbix_server.log + mysql -h $DBHost -u $DBUser -p 手动测连通性。
  2. Zabbix 前端报 "Access denied for user 'zabbix'@'10.0.1.21'":MySQL 账号 'zabbix'@'10.0.1.%' 子网掩码范围没包含 Server IP,或 Server IP 变了。重新 CREATE USERUPDATE mysql.user SET Host='新IP' WHERE User='zabbix';
  3. Zabbix Server 启动慢(5-10 分钟):MySQL 表结构没正确导入(漏 log_bin_trust_function_creators = 1 触发器创建失败)。看 /var/log/mysqld.log 找 ERROR,重新 zcat server.sql.gz | mysql ... 导入。
  4. Web UI 报 PHP 时区错误/etc/php-fpm.d/zabbix.confdate.timezone,加 php_value[date.timezone] = Asia/Shanghaisystemctl restart php-fpm
  5. Agent 连不上 ServerServer=... 写错;防火墙拦截 10051/10050;Server 上 StartTrappers 太小(并发连接数撑爆)。tail -f /var/log/zabbix/zabbix_agent2.log 看实际错误。
  6. 主机显示灰色(ZBX 图标灰):Agent 没数据。检查 zabbix_get -s 主机IP -k agent.ping 是否返回 1;Agent 防火墙;SNMP 设备的 snmpget 测 community。
  7. MySQL 磁盘满history 表爆。立即跑 Housekeeper 删老数据;同时把趋势数据保留期从 365 天缩到 90 天;考虑分区表方案。
  8. 告警风暴(一晚 1 万+ 告警):默认 Trigger 阈值太敏感(CPU 90% 在某些业务时段是常态)。调阈值、加维护期 (Maintenance)、用 {TRIGGER.SEVERITY}=DISASTER 过滤低优先级告警。
  9. Zabbix Server 内存爆CacheSizeHistoryCacheSizeValueCacheSize 三个缓存总和超物理内存 50%。看 zabbix_server.log 报 "out of memory" 调小,或加机器内存。
  10. LLD 发现不到 / 监控项 "Not supported"zabbix_get -s 主机IP -k discovery.key 在 Server 上测试;LLD 脚本权限(chmod +xAllowRoot=1);超时(Timeout=30 调大)。

**终极排错三件套**:(1) 看 zabbix_server.log(主进程) (2) 看 zabbix_agent2.log(Agent 端) (3) zabbix_get / zabbix_sender 命令行手动测。九成问题在这三处能定位。

十一、Zabbix 7.4 选型与替代方案对比

Zabbix 不是唯一选择,对比业内主要竞品:

维度Zabbix 7.4Prometheus + GrafanaNagios XIPandorafmsPRTG
LicenseGPL v2Apache 2.0商业 + 核心免费Terracotta(商业)/ 核心开源商业
学习曲线陡(YAML + PromQL)低(GUI 友好)
Agent 支持Zabbix Agent / Agent2 / SNMP / IPMI / JMX / HTTPnode_exporter / 各种 exporterNagios Plugins(数量 3000+)自研 Agent / SNMP / WMIWindows: WMI / 大量内置 sensor
数据存储关系型数据库(MySQL/PG/Oracle/DB2)时序库 TSDB(本地/WAL/Mimir/Thanos)MySQL + 文件MySQL自研(Windows 本机)
模板生态300+ 官方200+ exporter + dashboard3000+ 第三方插件中等内置 sensor 极多
适合规模中小 → 大型企业(全场景)云原生 / 微服务 / K8s传统基础设施中型企业中小型企业(≤ 2500 sensor)
分布式Zabbix Proxy / HA Cluster联邦集群 / Cortex / ThanosNRDP / Mod-GearmanSatlelite Server不支持(集群版)
告警Trigger + 脚本 + 升级 + TagAlertmanager(告警分组/路由/抑制)Event handlersAlert + 模板内置通知系统
中国本地化中文 UI + 中文文档 + 社区社区翻译无中文官方西班牙厂商德语为主

**选型建议**:

  • 传统企业(生产 + 网络 + 数据库 + 中间件):Zabbix 7.4 是首选,模板最全、文档最丰富、Agent 最成熟。
  • 云原生 / K8s / 微服务:Prometheus + Grafana 更适合(pull 模型天然适合短生命周期容器)。
  • Windows-only 小型企业:PRTG 部署最快(exe 双击装完),但 2500 sensor 限制 + 商业授权贵。
  • 已有 Nagios 投资:继续用 + 增量上 Zabbix,新项目直接 Zabbix。

十二、写在最后

外置 MySQL 看似只是"换个地方装数据库",但实际涉及性能、容量、高可用、备份、DBA 协作的整套架构设计。本文演示的安装路径是"最小可用"版本——足够 500-2000 主机规模跑得稳;超过 2000 主机建议结合 MySQL 主从/Proxy/HA Cluster、分区表、独立时序库(如 TimescaleDB)等进一步优化。

Zabbix 7.4 的成熟度已经被全球数十万企业验证,不要低估它也"只是"开源——其功能完整度、社区活跃度、文档质量在监控领域长期是事实标准之一。无论你最终选 Zabbix、Prometheus 还是 PRGT,先想清楚"我要监控什么 + 告警流程怎么走 + 历史数据保留多久"这三个问题,再决定具体方案,会少走很多弯路。

如果你正在做 Zabbix 部署或 MySQL 高可用方案设计,遇到具体卡点(性能调优、告警规则、模板开发、跨网段部署等),欢迎联系 IT 峰哥团队。我们覆盖企业信息化全场景(防火墙 / 上网行为 / 超融合 / 文档加密 / 考勤门禁 / 视频监控 / 动环监控),各类规模企业信息化建设均承接,可为你提供从方案设计到落地运维的端到端服务。

🚀 IT峰哥软件库

企业级 IT 监控运维工具 + 系统软件,免费下载|安全可靠|持续更新。覆盖 Zabbix / Prometheus / 数据库 / 中间件 / 备份恢复 / 远程运维全场景。

👉 立即访问 IT峰哥软件库

👉 企业级 IT 监控与运维工具

覆盖 Zabbix / Prometheus / Grafana / Nagios / 数据库 / 中间件 / 备份恢复等企业级监控运维软件资源。

👉 查看更多企业监控运维工具

默认

防病毒软件选型指南:13款主流产品适用场景解析

2026-7-14 7:02:37

默认

企业级工作站电源选购指南:双路 Xeon 与专业显卡场景 750W 起步实战

2026-7-14 14:44:32

搜索