一、实验背景
在上一篇文章中,我们完成了:
-
Ansible 批量管理环境搭建
-
Zabbix Server 6.0 安装
-
MySQL 5.7 数据库配置
-
Zabbix Web 界面安装
本以为 Zabbix Server 能顺利启动,结果却卡住了。Web 界面一直显示 Zabbix server is running: No,后端服务怎么也起不来。
这篇文章完整记录了从 MySQL 版本不兼容到系统表损坏、再到服务配置文件错误的整个排查过程。
二、实验环境
| 节点 | IP | 角色 |
|---|---|---|
| master | 192.168.116.168 | Zabbix Server + Web + Ansible |
| node1 | 192.168.116.169 | MySQL 数据库(Zabbix 库) |
| node2 | 192.168.116.170 | 业务节点(物联系统 Pod + Agent) |
Zabbix 架构:Server 在 master,数据库在 node1,Agent 在三台机器上。
问题:Zabbix Server 无法启动
现象:
Zabbix Web 界面显示 Zabbix server is running: No
systemctl status zabbix-server-mysql
# Active: faile
排查过程:
1. 查看日志发现 MySQL 版本不兼容
tail -50 /var/log/zabbix/zabbix_server.log
日志显示:
Unable to start Zabbix server due to unsupported MySQL database version (5.07.44).
Must be at least (8.00.0).

原因:Zabbix Server 6.0 要求 MySQL 8.0+,但 node1 上 MySQL 是 5.7.44。
2. 升级 MySQL 到 8.0
-
备份 Zabbix 数据库
-
卸载 MySQL 5.7
-
安装 MySQL 8.0
-
获取临时密码并登录
3. 升级后仍然报错
升级后启动 Zabbix Server,日志仍显示 MySQL 5.7 版本错误。原因是日志文件缓存了旧信息。
于是又继续修复日志问题。用sudo -u zabbix /usr/sbin/zabbix_server -f -c /etc/zabbix/zabbix_server.conf命令查看发现Zabbix Server 手动运行是正常的!说明是 systemd 服务文件的问题(问题太多了主播就不一个个截图了)
解决:删除旧日志,重启服务。
4. 确认配置
grep -E "DBHost|DBName|DBUserBPassword" /etc/zabbix/zabbix_server.conf

5. 修复 systemd 服务文件
# 手动运行测试(成功)
sudo -u zabbix /usr/sbin/zabbix_server -f -c /etc/zabbix/zabbix_server.conf
# 发现服务文件中用户是 zabbixsrv,手动运行时用的是 zabbix
# 修改服务文件
sed -i 's/User=zabbixsrv/User=zabbix/' /usr/lib/systemd/system/zabbix-server-mysql.service
systemctl daemon-reload
结果:服务启动正常。
最终验证
systemctl status zabbix-server-mysql
# Active: active (running)
复盘
| 问题 | 原因 | 解决方案 |
|---|---|---|
| Zabbix Server 启动失败 | MySQL 5.7 版本太低 | 升级到 MySQL 8.0 |
| 升级后仍报 5.7 错误 | 日志缓存未更新 | 删除旧日志 |
| 无法创建 zabbix 用户 | MySQL 系统表引擎损坏 | 修复系统表 |
| systemd 启动失败 | 服务文件中用户不匹配 | 统一使用 zabbix 用户 |


