历史版本中, 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. 使用如下命令修复数据库的字符集及字符序:
再次检测:
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 服务.