


你装过 Zabbix,但你真正缺的往往不是“再装一次”,而是:
一套可复制、可审计、可离线交付、可长期运维的企业部署方法。这篇文章:从麒麟服务器装 Docker 开始,到 拉取并归档指定 Zabbix 7.0 版本镜像,讲清每个镜像的作用与调用关系,端口不走默认值,路径映射可落盘,最后把 MySQL 备份与恢复 做成可直接交付的方案。
一、 为什么选 Zabbix 7.0,而不是“随便装个最新版”?
Zabbix 7.0 是 LTS(长期支持) 分支,适合企业环境“稳态运行”。官方生命周期页面明确列出 7.0 LTS 的发布时间与支持周期。
另外,Zabbix 官方发布了 7.0.22(2025-12-17)等维护版本,说明该分支仍在更新维护。
本文示例以 7.0.22(或你指定的 7.0.x)为准;你只要改一个版本号,就能一键复用全套流程。
https://www.zabbix.com/rn/rn7.0.22

1.1、先把“组件/镜像/调用链”讲清楚
Zabbix 容器化部署的核心思想是:一个组件一个容器,按职责拆开,升级/回滚更可控。官方也明确:Zabbix 提供按组件拆分的容器镜像(Server、Frontend、Proxy、Agent 等)。
https://www.zabbix.com/container_images

我们选用 MySQL 作为后端数据库(更常见、生态更成熟),典型最小可用组合:
MySQL(或 MariaDB)容器
只负责存储:历史数据、趋势数据、配置数据、事件、告警等
不直接对外暴露(建议仅容器网段可达)
zabbix-server-mysql
Zabbix Server 核心:采集、计算触发器、写库、发告警、提供 API
启动时会检查数据库可用性,必要时创建库/表结构(镜像行为在官方容器说明中有描述)。
https://catalog.redhat.com/en/software/containers/zabbix/zabbix-server-mysql-70/66425419fc1b23180a424c56

zabbix-web-nginx-mysql(前端)
Nginx + Nginx 的 Web UI
通过环境变量连接数据库与 Zabbix Server(官方示例说明了通过环境变量传 DB 与 ZBX_SERVER_HOST)。
https://catalog.redhat.com/en/software/containers/zabbix/zabbix-web-mysql-70/6642545da4063260a3b7800a
zabbix-agent2(被监控端)
安装在麒麟服务器本机(可用容器跑,也可用原生包;本篇统一容器化)
负责把 CPU/内存/磁盘/进程/日志等指标送到 Server/Proxy
1.2、调用链一图读懂
浏览器 → Web 前端(你自定义端口)
Web 前端 → 连接 MySQL(读写配置/展示数据)
Web 前端 → 调用 Zabbix Server API(展示、配置、生效)
Zabbix Server ↔ Agent2(主动/被动采集,按你策略)
Zabbix Server → 写入 MySQL
2. 环境基线:麒麟服务器 + Docker
麒麟(银河麒麟)环境装 Docker,企业更常见两类:
在线装(有外网/镜像源)
离线装(内网、受控区、涉密/商密隔离环境更常见)
你如果要“可交付”,一定要把离线能力做进去。
下面给你一套“尽量不依赖发行版差异”的通用做法:优先用官方 docker-ce 仓库;不通就走离线二进制。
2.1 检查麒麟版本/架构
cat /etc/kylin-release || cat /etc/os-release
uname -r
uname -m
2.2 安装 Docker(在线方式)
不同麒麟版本底层可能偏 Debian/Ubuntu 系或 RHEL 系,命令略有差异。你只要抓住原则:装 docker engine + compose 插件。
安装后验证:
docker version
docker compose version

2.3 安装 Docker(离线方式)
核心动作就三步:
1)下载 docker 静态二进制包(按架构)
2)放到 /usr/bin
3)写 systemd 服务 + daemon.json
3. 关键要求落地:非默认端口 + 目录落盘 + 版本镜像归档
3.1 端口规划(全部避开默认值)
默认端口容易被扫、被误用,也不利于你在同机上做多套环境隔离。
建议示例(你可按单位规范改):
Zabbix Web(HTTP):18080(默认 80)
Zabbix Web(HTTPS):18443(默认 443,可选)
Zabbix Server:11051(默认 10051)
Agent2:11050(默认 10050)
MySQL:13306(默认 3306,且建议不映射到宿主机,只容器内部用)
3.2 目录映射规划(可审计、可备份、可迁移)
统一放到 /data/zbx7/,结构建议:
/data/zbx7/
compose/ # docker-compose.yml、.env
mysql/
data/ # MySQL 数据目录(持久化)
conf/ # 自定义 my.cnf
backup/ # 备份输出目录
zabbix/
alertscripts/ # 告警脚本
externalscripts/ # 外部脚本
modules/ # 模块
snmptraps/ # SNMP Trap(可选)
logs/ # 统一日志(可选)
images-archive/ # 镜像 tar 归档4. 不同“标签版本”的解释说明
Zabbix 官方提供容器镜像,Docker Hub 上可用 alpine-7.0.0 等标签形式,你也能找到 7.0.0 的分层信息。
而 7.0 LTS 的维护版本(如 7.0.22)也有对应发布说明。
4.1、alpine 的核心优势
alpine 镜像特点:
使用 musl libc
静态依赖多
用户态极简
对宿主机发行版“几乎无感”
📌 结论:
alpine 是对银河麒麟“最不挑食”的基础镜像
查看所有可用的zabbix的标签
https://hub.docker.com/r/zabbix/zabbix-server-mysql/tags

❗
alpine-trunk/trunk-alpine≠ 正式版本👉 它们是 Zabbix 的“开发分支(trunk)镜像”
❌ 不推荐用于生产
❌ 不能等价替代 7.0.x / 6.0.x
✅ 只适合开发 / 测试 / 参与 Zabbix 开发的人
在 Zabbix 官方体系中:
4.2、alpine-trunk / trunk-alpine 拆开解释
我们把标签拆开看就非常清楚了:
1️⃣ alpine
镜像底层 OS 是 Alpine Linux
优点:体积小
缺点:
musl libc
排查问题困难
和国产 OS 环境(麒麟)联调不友好
2️⃣ trunk
基于 Zabbix 主干开发代码
代码每天都可能变
数据库结构 / API / Agent 行为不稳定
3️⃣ 顺序为什么有两种?
👉 功能上没有任何区别
👉 只是历史命名 + CI 构建方式遗留
4.3、把 7.0.22-ol 拆开解释
7.0.22-ol = Zabbix 7.0.22 + Oracle Linux(OL)基础镜像
✅ 属于 Zabbix 官方正式发布
✅ 生产环境可用
❌ 不是 trunk
❌ 不是测试版
1️⃣ 7.0.22
Zabbix 7.0 LTS 分支
第 22 个维护版本
生产强烈推荐
2️⃣ ol 是什么?
ol = Oracle Linux
也就是:
👉 只是“镜像底层 OS 不同”


4.4、7.0.22-ol 和 7.0.22 有什么区别?
这是一个非常关键的问题👇
🔹 7.0.22(不带后缀)
通常是 默认基础镜像
多数情况下也是 Oracle Linux
写法更简洁
🔹 7.0.22-ol
明确指定 Oracle Linux
行为更可预期
企业/合规环境更喜欢
👉 功能、Zabbix 版本、DB 结构完全一致
5、在“麒麟 + 内网 + 合规”环境下,怎么选?
✅ 强烈建议你选:7.0.22-ol
原因非常现实:
哪些后缀你不建议在生产用?
❌ alpine
musl libc
DNS / TLS / Agent 插件问题多
国产化环境不友好
❌ trunk-*
开发分支
DB 不稳定
生产绝对禁用
“标准解释”
Zabbix Docker 镜像标签
7.0.22-ol表示
该镜像基于 Oracle Linux 构建,
Zabbix 核心版本仍为 7.0.22 LTS。选用
-ol镜像可获得更好的稳定性与企业级兼容性,
适用于生产与内网环境部署。
6、拉取 Zabbix 镜像时指定架构
6.1、最常用、也是你最可能用到的架构
👉 银河麒麟 V10 SP3 x86_64:99% 用 linux/amd64
Docker 拉镜像时,如果没有arm物理环境,可以通过
--platform明确指定操作系统架构
标准格式:
docker pull --platform=<os>/<arch> 镜像:tag明确指定 amd64和arm64
docker pull --platform=linux/amd64 ghcr.io/zabbix/zabbix-server-mysql:7.0.22-ol对应 Web / Agent:
docker pull --platform=linux/amd64 ghcr.io/zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker pull --platform=linux/arm64 ghcr.io/zabbix/zabbix-agent2:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-server-mysql:7.0.22-ol6.2、为什么一定要指定架构
1️⃣ 防止拉错 ARM 镜像
现在很多镜像是 multi-arch(多架构):
amd64
arm64
ppc64le
s390x
Docker 默认会“猜”:
在复杂环境 / 代理 / registry 中
有时会选错
👉 结果就是:
exec format error2️⃣ 离线环境 / 中转机必须指定
你这种流程很典型:
外网机器 pull
→ docker save
→ 内网麒麟 docker load如果内网机是 ARM(比如 Mac M1 / 鲲鹏):
❌ 不指定平台 → 拉到 amd64
✔ 指定 linux/arm64 → 内网可用

默认拉取的是和服务器一样的架构amd64的

基于指定ARM平台拉取

7、最后帮你把常见 Zabbix tag 一眼分清
在国产化环境中:
8、Zabbix7.0.22离线docker镜像包归档
8.1、Zabbix镜像包介绍
👉 生产环境绝对不碰 latest
假设你用 MySQL + Nginx Web + Agent2:
# Zabbix Server(MySQL)
zabbix/zabbix-server-mysql:alpine-7.0.22
# Zabbix Web(Nginx + MySQL)
zabbix/zabbix-web-nginx-mysql:alpine-7.0.22
# Zabbix Agent2
zabbix/zabbix-agent2:alpine-7.0.22
👉 这三类是“必需核心组件”
8.2、拉取Zabbix镜像并归档【很重要】
设定版本号(统一管理)
export ZBX_VER="alpine-7.0.22"拉取Zabbix的镜像(全局变量按版本)
docker pull zabbix/zabbix-server-mysql:7.0.22
docker pull zabbix/zabbix-web-nginx-mysql:7.0.22
docker pull zabbix/zabbix-agent2:7.0.22docker pull mysql:8.0
docker pull zabbix/zabbix-server-mysql:${ZBX_VER}
docker pull zabbix/zabbix-web-nginx-mysql:${ZBX_VER}
docker pull zabbix/zabbix-agent2:${ZBX_VER}
Zabbix 官方“容器镜像目录页”能看到各组件镜像的分类与组合方式(Server MySQL、Frontend Nginx MySQL 等)。
(1)拉取amd64镜像
docker pull mysql:8.0.44
docker pull zabbix/zabbix-server-mysql:7.0.22-ol
docker pull zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker pull zabbix/zabbix-agent2:7.0.22-ol
docker pull zabbix/zabbix-java-gateway:7.0.22-ol
docker pull zabbix/zabbix-web-service:7.0.22-ol
docker pull zabbix/zabbix-proxy-mysql:7.0.22-ol
docker pull zabbix/zabbix-appliance:centos-latest(2)拉取arm64镜像
#删除下载的所有x86的镜像避免冲突
docker rmi $(docker images -q)
#作用
docker images -q:列出所有镜像 ID
docker rmi:删除这些镜像
下载新的arm版本的镜像
docker pull --platform=linux/arm64 mysql:8.0.44
docker pull --platform=linux/arm64 zabbix/zabbix-server-mysql:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-agent2:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-java-gateway:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-proxy-mysql:7.0.22-ol
docker pull --platform=linux/arm64 zabbix/zabbix-appliance:centos-latestzabbix-web-service没有arm版本
由于这个镜像 强依赖:
Chromium
wkhtmltopdf / headless 浏览器
Oracle Linux(ol)基础镜像
而官方构建链路中:
❌ Oracle Linux + Chromium = 仅支持 x86_64
📌 不是 Zabbix 不支持 ARM
📌 是 底层浏览器组件在 ol / ARM 上没法官方构建
如果你 必须用 PDF 报表:
ARM 麒麟服务器
├─ zabbix-server
├─ zabbix-web
└─ zabbix-agent
x86_64 服务器
└─ zabbix-web-serviceZabbix Server 指向远端 web-service
官方 完全支持这种部署
(3)zabbix镜像归档(离线交付/内网部署核心)
mkdir -p /data/zbx7/images-archive
docker save -o /data/zbx7/images-archive/mysql-8.0.44.tar mysql:8.0.44
docker save -o /data/zbx7/images-archive/zabbix-server-mysql:7.0.22-ol.tar zabbix/zabbix-server-mysql:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-web-nginx-mysql:7.0.22-oll.tar zabbix/zabbix-web-nginx-mysql:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-agent2:7.0.22-ol.tar zabbix/zabbix-agent2:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-java-gateway:7.0.22-ol.tar zabbix/zabbix-java-gateway:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-web-service:7.0.22-ol.tar zabbix/zabbix-web-service:7.0.22-ol
docker save -o /data/zbx7/images-archive/zabbix-proxy-mysql:7.0.22-ol.tar zabbix/zabbix-proxy-mysql:7.0.22-ol
#这个是六年前的镜像,已经停止维护
docker save -o /data/zbx7/images-archive/zabbix-appliance:centos-latest.tar zabbix/zabbix-appliance:centos-latest
#生成教研码
sha256sum /data/zbx7/images-archive/*.tar > /data/zbx7/images-archive/SHA256SUMS.txt内网导入(目标机)
#验证校验码
sha256sum -c SHA256SUMS.txt
#导入镜像包
docker load -i /data/zbx7/images-archive/mysql-8.0.44.tar
docker load -i /data/zbx7/images-archive/zabbix-server-mysql:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-web-nginx-mysql:7.0.22-oll.tar
docker load -i /data/zbx7/images-archive/zabbix-agent2:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-java-gateway:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-web-service:7.0.22-ol.tar
docker load -i /data/zbx7/images-archive/zabbix-proxy-mysql:7.0.22-ol.tar
#由于是6年前的镜像,可不用导入
docker load -i /data/zbx7/images-archive/zabbix-appliance:centos-latest.tar9、Zabbix的Docker Compose(非默认端口 + 持久化 + 可备份)
在 /data/zbx7/compose/docker-compose.yml:
services:
# =========================
# MySQL 8.0
# =========================
mysql:
image: mysql:8.0.44
container_name: zbx7-mysql
restart: unless-stopped
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_bin
- --log-bin-trust-function-creators=1
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${ZBX_DB_NAME}
MYSQL_USER: ${ZBX_DB_USER}
MYSQL_PASSWORD: ${ZBX_DB_PASS}
TZ: ${TZ}
volumes:
- /data/zbx7/mysql/data:/var/lib/mysql
- /data/zbx7/mysql/conf:/etc/mysql/conf.d:ro
- /data/zbx7/mysql/backup:/backup
networks:
- zbx7-net
healthcheck:
test: ["CMD-SHELL", "mysqladmin ping -h 127.0.0.1 -uroot -p$${MYSQL_ROOT_PASSWORD} --silent"]
interval: 10s
timeout: 5s
retries: 12
# 按要求:不映射 13306
# =========================
# Zabbix Server
# =========================
zabbix-server:
image: zabbix/zabbix-server-mysql:7.0.22-ol
container_name: zbx7-server
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: ${ZBX_DB_NAME}
MYSQL_USER: ${ZBX_DB_USER}
MYSQL_PASSWORD: ${ZBX_DB_PASS}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ZBX_DEBUGLEVEL: ${ZBX_DEBUGLEVEL}
ZBX_JAVAGATEWAY: zabbix-java-gateway
ZBX_WEBSERVICEURL: http://zabbix-web-service:10053
TZ: ${TZ}
volumes:
- /data/zbx7/zabbix/alertscripts:/usr/lib/zabbix/alertscripts:ro
- /data/zbx7/zabbix/externalscripts:/usr/lib/zabbix/externalscripts:ro
- /data/zbx7/zabbix/modules:/var/lib/zabbix/modules:ro
- /data/zbx7/zabbix/snmptraps:/var/lib/zabbix/snmptraps:rw
- /data/zbx7/logs/zabbix-server:/var/log/zabbix:rw
ports:
- "10051:10051"
networks:
- zbx7-net
# =========================
# Zabbix Web (Nginx)
# =========================
zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:7.0.22-ol
container_name: zbx7-web
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
zabbix-server:
condition: service_started
environment:
DB_SERVER_HOST: mysql
MYSQL_DATABASE: ${ZBX_DB_NAME}
MYSQL_USER: ${ZBX_DB_USER}
MYSQL_PASSWORD: ${ZBX_DB_PASS}
ZBX_SERVER_HOST: zabbix-server
PHP_TZ: ${TZ}
TZ: ${TZ}
volumes:
- /data/zbx7/logs/nginx:/var/log/nginx:rw
ports:
- "18080:8080"
# HTTPS 可选
# - "18443:8443"
networks:
- zbx7-net
# =========================
# Zabbix Web Service(仅 amd64)
# 报表 / Dashboard 截图 / PDF
# =========================
zabbix-web-service:
image: zabbix/zabbix-web-service:7.0.22-ol
container_name: zbx7-web-service
restart: unless-stopped
environment:
ZBX_ALLOWEDIP: 0.0.0.0/0
TZ: ${TZ}
volumes:
- /data/zbx7/logs/web-service:/var/log/zabbix:rw
networks:
- zbx7-net
# 内部端口 10053,不需要对外暴露
# =========================
# Zabbix Java Gateway
# =========================
zabbix-java-gateway:
image: zabbix/zabbix-java-gateway:7.0.22-ol
container_name: zbx7-java-gateway
restart: unless-stopped
environment:
TZ: ${TZ}
networks:
- zbx7-net
# =========================
# Zabbix Agent2
# =========================
zabbix-agent2:
image: zabbix/zabbix-agent2:7.0.22-ol
container_name: zbx7-agent2
restart: unless-stopped
environment:
ZBX_SERVER_HOST: zabbix-server
ZBX_HOSTNAME: ${AGENT_HOSTNAME}
TZ: ${TZ}
networks:
- zbx7-net
# =========================
# Zabbix Proxy (MySQL)
# =========================
zabbix-proxy:
image: zabbix/zabbix-proxy-mysql:7.0.22-ol
container_name: zbx7-proxy
restart: unless-stopped
depends_on:
mysql:
condition: service_healthy
zabbix-server:
condition: service_started
environment:
ZBX_SERVER_HOST: zabbix-server
DB_SERVER_HOST: mysql
MYSQL_DATABASE: ${ZBX_PROXY_DB_NAME}
MYSQL_USER: ${ZBX_PROXY_DB_USER}
MYSQL_PASSWORD: ${ZBX_PROXY_DB_PASS}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
ZBX_HOSTNAME: ${PROXY_HOSTNAME}
TZ: ${TZ}
volumes:
- /data/zbx7/logs/zabbix-proxy:/var/log/zabbix:rw
networks:
- zbx7-net
networks:
zbx7-net:
name: zbx7-net
driver: bridge说明:Zabbix 前端镜像通过环境变量连接 DB 与 Zabbix Server 的方式,在官方容器说明中是标准用法。
Zabbix Server 镜像会检查数据库并初始化 schema 的启动流程,也在官方容器说明中有描述。
[root@bxddg compose]# cat .env
# 时区(北京)
TZ=Asia/Shanghai
# ======================
# MySQL 主库(Server/Web)
# ======================
MYSQL_ROOT_PASSWORD=ChangeMe_StrongRootPass!
ZBX_DB_NAME=zabbix
ZBX_DB_USER=zabbix
ZBX_DB_PASS=ChangeMe_StrongZbxPass!
# ======================
# Proxy 独立数据库
# ======================
ZBX_PROXY_DB_NAME=zabbix_proxy
ZBX_PROXY_DB_USER=zbxproxy
ZBX_PROXY_DB_PASS=ChangeMe_StrongProxyPass!
# ======================
# Zabbix 行为参数
# ======================
ZBX_DEBUGLEVEL=3
# Agent / Proxy 标识
AGENT_HOSTNAME=zbx7-agent2
PROXY_HOSTNAME=zbx7-proxy启动:
cd /data/zbx7/compose
docker-compose config # 展开变量,检查语法(非常推荐)
docker-compose up -d
docker-compose ps
docker-compose logs zabbix-server | tail -50

访问:
http://麒麟服务器IP:18080
10、报错处理
10.1、针对OCI 329的错误

卸载podmac

卸载成功后再次部署如下所示

查看镜像如下所示

停止zabbix相关的docker服务如下所示

再次启动如下所示

10.2、针对ipv4转发的错误

查看当前状态
sysctl net.ipv4.ip_forward输出含义:
net.ipv4.ip_forward = 0 ❌ 关闭
net.ipv4.ip_forward = 1 ✅ 开启
临时开启(立即生效,但重启失效)
适合测试 / 排障:
sysctl -w net.ipv4.ip_forward=1
或者:
echo 1 > /proc/sys/net/ipv4/ip_forward
再确认:
sysctl net.ipv4.ip_forward
永久开启(生产环境必须做)
✅ 推荐方式(标准、可审计)
编辑配置文件:
vim /etc/sysctl.conf
添加或修改这一行:
net.ipv4.ip_forward = 1
加载生效:
sysctl -p再次执行可发现没有报错


10.3、Zabbix的web访问不通,并且报错

更持久化目录提权
chmod -R 777 /data/zbx7/
cd /data/compose
docker-compose down
docker-compose up -d提权后重新compose 验证,登录页面如下所示,默认账号密码为Admin/zabbix

10.4、Zabbix端自身监控不可用
docker inspect zbx7-agent2 --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'
修改实际监控的zabbix-server的客户端的地址为实际容器内地址

修改完后不可用状态就会变绿

10.5、Zabbix Agent不可用
在agent上修改Server地址为实际的Server 服务端采集的地址
grep -E '^(Server|ServerActive|ListenIP|Hostname|ListenPort)' /etc/zabbix/zabbix_agent2.conf如下所示,如果网络环境较为复杂,可以将地址改为

通过日志可以发现,如果网络较为复杂, Server端有多个地址,可以修改agent的配置文件为实际地址或者全0地址Server=0.0.0.0/0
tail -n 200 /var/log/zabbix/zabbix_agent2.log
11、 “包/镜像”逐个讲清楚:它们各负责什么、怎么互相调用?
你在归档时拉的每个镜像,其实都对应一段清晰的职责边界(这就是企业可控的根本):
mysql:8.0
数据底座。Zabbix Server、Web 前端都要访问它。
zabbix-server-mysql
核心引擎:
接收 Agent 数据
计算触发器
生成事件与告警
写入 MySQL
zabbix-web-nginx-mysql
管理入口:
读写配置(主机/模板/触发器/媒介/动作)
展示图表、问题、告警
通过 API 与 Server 交互
zabbix-agent2
数据采集:
主动/被动向 Server/Proxy 发送数据
本机指标采集,减少“手写脚本”依赖
一句话总结调用链:
Web(管理)→ Server(计算)→ DB(存储)→ Web(展示)
Agent(采集)→ Server(汇聚)→ DB(沉淀)
12、数据库备份:把“可恢复”做成制度,而不是祈祷
Zabbix 运行久了,真正值钱的是:
监控配置
历史数据(视需求)
趋势数据(容量规划、故障追溯)
12.1、 备份策略建议
每日:备份配置 + 当日增量(逻辑备份)
每周:全量逻辑备份
每月:配合归档(加密、离线保存、留存周期)
12.2、 一键备份脚本(mysqldump)
保存为 /data/zbx7/mysql/backup/backup_zabbix.sh:
#!/usr/bin/env bash
set -euo pipefail
TS="$(date +%F_%H%M%S)"
OUT="/backup/zabbix_${TS}.sql.gz"
docker exec zbx7-mysql sh -lc \
'mysqldump -uroot -p"$MYSQL_ROOT_PASSWORD" --single-transaction --routines --events --triggers zabbix | gzip -c' \
> "${OUT}"
# 清理 14 天前备份
find /backup -type f -name "zabbix_*.sql.gz" -mtime +14 -delete
echo "[OK] backup -> ${OUT}"赋权:
chmod +x /data/zbx7/mysql/backup/backup_zabbix.sh执行一次验证:
/data/zbx7/mysql/backup/backup_zabbix.sh
ls -lh /data/zbx7/mysql/backup/12.3 恢复演练(比备份更重要)
gunzip -c zabbix_YYYY-MM-DD_HHMMSS.sql.gz | \
docker exec -i zbx7-mysql sh -lc 'mysql -uroot -p"$MYSQL_ROOT_PASSWORD" zabbix'
建议把“恢复演练”:每季度至少一次。
因为没有演练的备份,等于没有备份。
13. 安全与加固:麒麟内网场景尤其要做
Webmin/SSH/管理网段隔离(你体系里常见的红网/商密网/互联网分区思路同样适用)
Zabbix Web 只对管理网开放
18080/1844311051/11050只对业务网段开放(或仅 Proxy 网段)不把 MySQL 映射到宿主机端口(除非你明确要远程维护)
账号:默认 Admin 立即改名/改口令;启用 MFA(Zabbix 7.0 有原生 MFA 能力是一个重要卖点)。