Zabbix 数据库连接错误排查
·

问题描述
重启 Zabbix 服务器后,访问 Web 界面提示 Database error: Connection refused。初步怀疑为 MySQL 数据库服务未正常启动,经过排查发现问题出在 /etc/zabbix/web/zabbix.conf.php 文件中的数据库 IP 地址未更新。
排查步骤
1. 检查 MySQL 服务状态
- 使用 Docker 部署的 MySQL,登录主机后查看容器状态:
docker ps | grep mysql
确认 MySQL 容器是否启动。
- 进入容器检查 MySQL 服务是否运行:
docker exec -it <mysql-container-id> bash
service mysql status
2. 测试数据库连接
- 测试通过容器内或本地能否连接数据库:
mysql -h <容器IP或主机IP> -u <用户名> -p
- 如果连接失败:
-
- 确认数据库用户是否有权限(检查用户权限表)。
- 确认防火墙或网络配置未阻止连接。
3. 检查 Zabbix 配置文件
- 检查
zabbix_server.conf文件:
vi /etc/zabbix/zabbix_server.conf
确认以下配置项是否正确:
DBHost=<MySQL IP>
DBUser=<数据库用户名>
DBPassword=<数据库密码>
保存后退出。
- 检查 Zabbix Web 配置文件:
vi /etc/zabbix/web/zabbix.conf.php
修改以下参数,确保指向正确的数据库 IP:
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '<MySQL容器IP>'; # 这里是问题所在
$DB['PORT'] = '3306';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = '<数据库密码>';
4. 固定 MySQL 容器 IP 地址(推荐)
每次 MySQL 容器重启时,IP 地址可能会变化。可以通过以下步骤固定容器的 IP 地址:
- 创建一个用户自定义网络:
docker network create \
--subnet=192.168.1.0/24 \
custom-network
- 启动 MySQL 容器时指定网络和固定 IP:
docker run --name mysql-container \
--network custom-network \
--ip 192.168.1.100 \
-e MYSQL_ROOT_PASSWORD=<密码> \
-d mysql:8.4

5. 重启 Zabbix 服务
修改配置后,重启 Zabbix 服务应用更改:
systemctl restart zabbix-server
systemctl restart apache2 # 如果使用 Nginx,替换为 nginx
6. 验证访问
- 在浏览器中访问 Zabbix Web 界面,确认是否正常显示。
- 如果仍有问题,检查 Zabbix 和 Web 服务日志:
tail -f /var/log/zabbix/zabbix_server.log
tail -f /var/log/apache2/error.log # 或 nginx 的日志
解决结果
- 问题原因:Docker MySQL 容器的 IP 地址变动导致 Zabbix 无法连接数据库。
- 解决方法:更新
/etc/zabbix/web/zabbix.conf.php中的$DB['SERVER']为最新的 MySQL 容器 IP 地址。
建议优化
- 固定 MySQL 容器 IP 地址,避免因重启导致 IP 变动。
- 编写定期巡检脚本,检查服务状态及配置完整性。
- 备份
zabbix.conf.php和zabbix_server.conf文件,方便恢复。
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)