zabbix 6.0在linux上需严格协同数据库、web服务与php运行时,官方源安装、utf8mb4字符集数据库、完整php扩展及selinux策略缺一不可,否则将卡在prerequisites检查或静默启动失败。

Zabbix 在 Linux 上不是“装上就能用”的监控系统,它依赖数据库、Web 服务、PHP 运行时三者严格协同;任一环节版本不匹配、配置漏项或权限错误,就会卡在 Checking prerequisites、报 500 错误,或 zabbix_server 启动失败且日志无明确提示。
确认系统与官方仓库是否匹配
Zabbix 6.0+ 不在 CentOS/RHEL/Ubuntu 系统默认源中,硬装zabbix-server-mysql 会拉到 5.0.x 旧包,导致 schema 不兼容、服务起不来。
必须用 Zabbix 官方签名源:
- RHEL/CentOS 8/9:运行 rpm -Uvh https://repo.zabbix.com/zabbix-official-repo-setup-6.0-4.el8.noarch.rpm
- Ubuntu 22.04:添加 deb 源后 apt update,确保 apt list --installed | grep zabbix 显示 zabbix-6.0 字样
- 别用清华镜像改 repo 地址再关 gpgcheck=0——GPG 验证失效后可能装到篡改包,官方明确要求保留签名校验
数据库初始化必须用对应版本的 SQL 脚本
Zabbix 6.4 的二进制不能跑 6.0 的 schema,反之亦然。导入错脚本会直接导致前端报No permissions to referred object 或触发器不生效。
操作必须按顺序:
- 先创建数据库:CREATE DATABASE zabbix CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;
- 再建用户并赋权:CREATE USER 'zabbix'@'localhost' IDENTIFIED BY 'StrongPassword123'; GRANT ALL PRIVILEGES ON zabbix.* TO 'zabbix'@'localhost';(MySQL 8.0+ 还需额外 GRANT CREATE ROUTINE, ALTER ROUTINE ON zabbix.* TO 'zabbix'@'localhost';)
- 最后导入:zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql -uzabbix -p zabbix
注意路径:6.0 包的脚本在 /usr/share/zabbix-sql-scripts/,不是旧版的 /usr/share/doc/zabbix-server-mysql/zabbix_server.conf 里三个字段写错就启动失败
zabbix_server.conf 表面简单,但以下三项任意一个填错,systemctl start zabbix-server 会静默失败,journalctl -u zabbix-server 里甚至找不到 ERROR 关键字:
- DBHost=localhost:别写成 127.0.0.1(MySQL 默认禁用 localhost 的 TCP 连接,只走 socket)
- DBPassword=StrongPassword123:必须和上一步建用户时设的密码完全一致,包括大小写和特殊字符
- ListenPort=10051:若改了端口,Web 前端的 zabbix.conf.php 里 $ZBX_SERVER_PORT 也得同步改,否则前端连不上 API
Web 页面卡在 Checking prerequisites 的真实原因
这个页面不是“正在检查”,而是 PHP 某个扩展缺失或配置未生效的明确报错界面。常见真实原因: -php-bcmath、php-mbstring、php-xml 少装一个,页面就停在这儿(不是报错,是直接不往下走)
- /etc/php.ini 里 date.timezone 没设(如 PRC 或 Asia/Shanghai),PHP 会警告但 Web 不提示
- SELinux 处于 enforcing 模式,且没开 httpd_can_network_connect_db=on,导致 Apache 进程无法连 MySQL,日志里只有 Permission denied 一行
- Nginx 用户没配 fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;,PHP 文件被当成静态文件返回空白页,看起来像卡住
真正跑通的关键,不在“装了多少组件”,而在于数据库字符集是否为 utf8mb4、PHP 扩展是否全启用、SELinux 是否允许网络连接这三处细节。漏掉任何一项,都会让整个部署停在离成功只剩一步的位置。











