这是原厂英文文档的翻译页面. 欢迎帮助我们 完善文档.
2022 Zabbix中国峰会
2022 Zabbix中国峰会

2 修复Zabbix 数据库的字符集及字符序

MySQL/MariaDB

历史版本中, MySQL 及其衍生产品中使用的 UTF8(utf8mb3) 只能实现最长 3 个字节的字符存储,那 4 个字节呢。从 MySQL 8.0.28 及 MariaDB 10.6.1 的版本之后, 'utf8mb3' 被弃用,并会在未来某个时候被删除,而 'utf8mb4' 将被新版本中 'utf8' 字符集引用。在Zabbix 6.0 中 'utf8mb4' 字符集也得到了支持,为了避免将来发生未知的问题,我们强烈建议您使用 'utf8mb4' 字符集。 并且支持的Unicode字符也是切换到 'utf8mb4' 的另一个优点。

由于Zabbix 6.0之前的版本不兼容utf8mb4,在执行utf8mb4转换之前,请确保首先升级Zabbix server和DB schema 为6.0。

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_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. 导入下面的 sql 来修复每张表中各个列的字符集 script 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 服务.