Zabbix套路深,字符集路更滑,大型翻车现场救援过程分享。

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Zabbix套路深,字符集路更滑,大型翻车现场救援过程分享。

1安装过程

对于前面的安装过程,本文省略...直接进入主题:问题根因剖析!


2关键组件版本

组件 版本 备注
mysql 8.0.29 目前最新社区版本
zabbix 5.0.7

至于zabbix web 用到的nginx和php7不是引发本次问题的主要因素,版本就不再阐述。当然,其实使用的也是目前最新版本。


3在首次安装setup页向导中,连接mysql报如下错误:

4问题分析过程

  1. 根据zabbix官方文档描述,要求的字符集是utf8


Zabbix server/proxy 需要字符集 utf8 和 utf8_bin 排序规则才能与 MySQL 数据库正常工作。

  1. 对MySQL8支持的字符集进行分析

MySQL Unicode字符集官方文档:https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

官方对utf8、utf8mb3、utf8mb4的解释如下:

  • utf8mb4:Unicode字符集的 UTF-8 编码,每个字符使用1到4个字节。
  • utf8mb3:Unicode字符集的UTF-8编码,每个字符使用1到3个字节,MySQL8.0中已弃用此字符集,您应该改用此字符集utfmb4。
  • utf8:是utf8mb3的别名,在MySQL 8.0中,此别名已弃用;改为使用utf8mb4,utf8预计在未来的版本中将成为utf8mb4。

由此看出,官方已经说的很明白,在mysql8版本中,utf8的别名是utf8mb3,而且在未来会弃用utf8mb3字符集(说是已弃用,目前还是支持的,估计还处于过渡阶段),那么对于未来,utf8mb4才是主战场。

  1. 登录mysql8.0.29查看支持的字符集
mysql> SHOW CHARACTER SET LIKE 'utf%';

查看结果如下图:

从查询结果看出,果然已经没有了utf8,只有utf8mb3和utf8mb4,而且在未来,将以utf8mb4为主

  1. 继续分析zabbix前端源码 在前端的源码中找到定义字符集的源代码,路径和文件是:zabbix-5.0.7\ui\include\defines.inc.php
  • 从defines.inc.php找到数据库默认定义字符集的配置
# 此处是MYSQL和POSTGRESQL的默认字符集
// Default db and field character set (MYSQL & POSTGRESQL)
define('ZBX_DB_DEFAULT_CHARSET', 'UTF8');
define('ZBX_DB_MYSQL_DEFAULT_COLLATION', 'utf8_bin');
# 此处是Oracle的默认字符集
// Default db defines for Oracle DB
define('ORACLE_MAX_STRING_SIZE', 4000);
define('ORACLE_UTF8_CHARSET', 'AL32UTF8');
define('ORACLE_CESU8_CHARSET', 'UTF8');

在上面的代码中很明显的可以看到,在defines.inc.php中,MYSQL默认的字符集是utf8、排序规则是utf8_bin。

  1. 分析小结论

因zabbix5.0.7版本的UI(前端),对MYSQL默认的字符集配置的是utf8,但最新版本的mysql8.0.29已经舍弃掉utf8,且utf8的别名为utf8mb3,故所以出此错误。据了解,在较新的zabbix5版本中(5.0.7以上)不存在该字符集问题,默认可以同时支持UTF8和UTF8MB3。

5解决问题

修改defines.inc.php,将默认字符集utf8修改为utf8mb3,排序规则可保持不变。

// Default db and field character set (MYSQL & POSTGRESQL)
define('ZBX_DB_DEFAULT_CHARSET', 'utf8mb3');
define('ZBX_DB_MYSQL_DEFAULT_COLLATION', 'utf8_bin');

写在最后,该问题成功解决,连接最新版的MySQL8.0.29成功。这是一次非常宝贵的经验,固作此文,总结经验、分享经验。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
29天前
|
监控 Java Shell
监控堆外第三方监控工具Zabbix
监控堆外第三方监控工具Zabbix
39 5
|
7月前
|
存储 SQL 监控
修改Zabbix源码实现监控数据双写,满足业务需求!
虽然对接Elasticsearch后有诸多好处,但是它不往数据库写历史数据了,同时还不再计算趋势数据了。有这么一个场景...
修改Zabbix源码实现监控数据双写,满足业务需求!
|
7月前
|
数据采集 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
283 4
|
26天前
|
监控 安全 前端开发
使用 Zabbix 监控堆外应用
使用 Zabbix 监控堆外应用
44 9
|
25天前
|
监控 数据可视化 Java
zabbix全面的监控能力
zabbix全面的监控能力
51 7
|
4月前
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
1月前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
111 7
|
2月前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
【10月更文挑战第5天】随着OceanBase社区版的广泛应用,企业纷纷采用这一高性能、高可用的分布式数据库系统。为了确保系统的稳定运行,使用成熟的Zabbix监控工具进行全面监控至关重要。本文通过具体示例介绍了如何配置Zabbix监控OceanBase,包括安装配置、创建监控模板和监控项、编写脚本、设置触发器及图形展示等步骤,帮助读者快速上手,及时发现并解决问题,确保业务始终处于最佳状态。
91 2
|
3月前
|
监控 关系型数据库 MySQL
zabbix agent集成percona监控MySQL的插件实战案例
这篇文章是关于如何使用Percona监控插件集成Zabbix agent来监控MySQL的实战案例。
88 2
zabbix agent集成percona监控MySQL的插件实战案例
|
4月前
|
SQL 监控 分布式数据库
【解锁数据库监控的神秘力量!】OceanBase社区版与Zabbix的完美邂逅 —— 揭秘分布式数据库监控的终极奥秘!
【8月更文挑战第7天】随着OceanBase社区版的普及,企业广泛采用这一高性能、高可用的分布式数据库。为保障系统稳定,使用成熟的Zabbix监控工具对其进行全方位监控至关重要。本文通过实例介绍如何在Zabbix中配置监控OceanBase的方法,包括创建监控模板、添加监控项(如TPS)、设置触发器及图形展示,并提供示例脚本帮助快速上手。通过这些步骤,可以有效监控OceanBase状态,确保业务连续性。
111 0

推荐镜像

更多