2022 Zabbix中国峰会
2022 Zabbix中国峰会

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

MySQL/MariaDB 数据库

1. 检查数据库字符集(character)和排序规则(collation)。

例如:

mysql> SELECT @@character_set_database, @@collation_database;
       +--------------------------+----------------------+
       | @@character_set_database | @@collation_database |
       +--------------------------+----------------------+
       | utf8mb4                  | utf8mb4_general_ci   |
       +--------------------------+----------------------+

如我们所见,此处数据库的字符集不是'utf8',排序规则不是'utf8_bin',因此我们需要对其进行修复。

2. 停止Zabbix服务。

3. 请务必创建一个数据库备份!

4. 在数据库模式下,修改字符集和排序规则:

alter database <您的Zabbix数据库名称> character set utf8 collate utf8_bin;

验证修改结果:

mysql> SELECT @@character_set_database, @@collation_database;
       +--------------------------+----------------------+
       | @@character_set_database | @@collation_database |
       +--------------------------+----------------------+
       | utf8                     | utf8_bin             |
       +--------------------------+----------------------+ 

5. 下载脚本 在数据库表和列模式下去修改字符集和排序规格:

mysql <您的Zabbix数据库名称> < utf8_convert.sql

6. 执行脚本:

               SET @ZABBIX_DATABASE = '<您的Zabbix数据库名称>';
       If MariaDB →  set innodb_strict_mode = OFF;        
                      CALL zbx_convert_utf8();
       If MariaDB →  set innodb_strict_mode = ON;   
                      drop procedure zbx_convert_utf8;

请注意该操作,数据字符集编码将直接在硬盘上更改。例如,将 Æ, Ñ, Ö 之类的字符从'latin1' 转换成'utf8'事,他们字节大小,将从1字节变成2字节。因此,在更改数据库的字符集操作,可能需要比之前更多的空间。

7. 如果没有错误,您可以创建一个新的更改过字符集的数据库备份副本,以备不测。 8. 启动Zabbix 服务。