On this page
2 修复Zabbix 数据库的字符集及字符序
MySQL/MariaDB
从历史上看,MySQL 及其衍生版本一直将“utf8”用作 utf8mb3 的别名——这是 MySQL 自己实现的 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,请确保在执行 utf8mb4 转换之前, 先将 Zabbix 服务器和数据库 schema 升级到 6.0.x 或更高版本。
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>';
If MariaDB → set innodb_strict_mode = OFF;
CALL zbx_convert_utf8();
If MariaDB → set innodb_strict_mode = ON;
drop procedure zbx_convert_utf8;
请注意,“utf8mb4”预计会占用略多一些的磁盘空间。
7. 如果没有错误,您可能需要为 修正后的数据库再创建一份备份。
8. 启动 Zabbix。