Исправление набора символов и сопоставления базы данных Zabbix
MySQL/MariaDB
Исторически MySQL и его производные использовали 'utf8' как псевдоним для utf8mb3 - собственной 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 и схему БД до 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>';
Если 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.