On this page
修复 Zabbix 数据库字符集和排序规则
MySQL/MariaDB
从历史上看,MySQL 及其衍生版本将 'utf8' 用作 utf8mb3 的别名 - 这是 MySQL 自己对标准 UTF8 的 3 字节实现,而标准 UTF8 是 4 字节。 从 MySQL 8.0.28 和 MariaDB 10.6.1 开始,'utf8mb3' 字符集已被弃用,并且在某个时间点其支持将被移除,而 'utf8' 将成为 'utf8mb4' 的引用。 自 Zabbix 6.0 起,已支持 'utf8mb4'。为避免将来出现问题,强烈建议使用 'utf8mb4'。 切换到 'utf8mb4' 的另一个优点是支持补充 Unicode 字符。
由于 Zabbix 6.0 之前的版本无法识别 utf8mb4,请务必先将 Zabbix 服务器和 DB schema 升级到 6.0.x 或更高版本,然后再执行 utf8mb4 转换。
1. 检查数据库字符集和排序规则。
例如:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin2 | latin2 _general_ci |
+--------------------------+----------------------+
或者:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8 | utf8_bin |
+--------------------------+----------------------+
如上所示,这里的字符集不是 'utf8mb4',排序规则也不是 'utf8mb4_bin',因此需要进行修正。
2. 停止 Zabbix。
3. 创建数据库备份副本!
4. 在数据库级别修正字符集和排序规则:
alter database <your DB name> character set utf8mb4 collate utf8mb4_bin;
修正后的值:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_bin |
+--------------------------+----------------------+
5. 加载 脚本 以修正表级和列级的字符集与排序规则:
mysql <your DB name> < utf8mb4_convert.sql
6. 执行脚本:
SET @ZABBIX_DATABASE = '<your DB name>';
如果是 MariaDB → set innodb_strict_mode = OFF;
CALL zbx_convert_utf8();
如果是 MariaDB → set innodb_strict_mode = ON;
drop procedure zbx_convert_utf8;
请注意,'utf8mb4' 预计会占用略多一些磁盘空间。
7. 如果没有错误 - 您可以考虑使用修正后的数据库创建一个数据库备份副本。
8. 启动 Zabbix。