2 修复Zabbix数据库字符集与排序规则

MySQL/MariaDB

历史上,MySQL及其衍生版本使用'utf8'作为alias来表示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 server和数据库架构升级到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. 加载script以修复表和列级别的字符集和排序规则:

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。