2 Naprawa zestawu znaków i porównywania napisów bazy danych Zabbix

MySQL/MariaDB

Historycznie MySQL i jego pochodne używały utf8 jako aliasu dla utf8mb3 - własnej 3-bajtowej implementacji standardowego UTF8, które jest 4-bajtowe. Począwszy od MySQL 8.0.28 i MariaDB 10.6.1, zestaw znaków utf8mb3 jest przestarzały i w pewnym momencie jego obsługa zostanie usunięta, a utf8 stanie się odwołaniem do utf8mb4. Od Zabbix 6.0 obsługiwane jest utf8mb4. Aby uniknąć przyszłych problemów, zdecydowanie zaleca się używanie utf8mb4. Dodatkową zaletą przejścia na utf8mb4 jest obsługa uzupełniających znaków Unicode.

Ponieważ wersje wcześniejsze niż Zabbix 6.0 nie obsługują utf8mb4, przed wykonaniem konwersji do utf8mb4 upewnij się, że najpierw zaktualizowano serwer Zabbix oraz schemat bazy danych do wersji 6.0.x lub nowszej.

1. Sprawdź zestaw znaków i porównywanie bazy danych.

Na przykład:

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin2                   | latin2 _general_ci   |
+--------------------------+----------------------+

Lub:

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

Jak widać, zestaw znaków nie jest tutaj utf8mb4, a porównywanie nie jest utf8mb4\_bin, więc należy to poprawić.

2. Zatrzymaj Zabbix.

3. Utwórz kopię zapasową bazy danych!

4. Popraw zestaw znaków i porównywanie na poziomie bazy danych:

alter database <your DB name> character set utf8mb4 collate utf8mb4_bin;

Poprawione wartości:

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

5. Załaduj skrypt , aby poprawić zestaw znaków i porównywanie na poziomie tabel i kolumn:

mysql <your DB name> < utf8mb4_convert.sql

6. Wykonaj skrypt:

               SET @ZABBIX_DATABASE = '<your DB name>';
Jeśli MariaDB →  set innodb_strict_mode = OFF;        
               CALL zbx_convert_utf8();
Jeśli MariaDB →  set innodb_strict_mode = ON;   
               drop procedure zbx_convert_utf8;

Należy pamiętać, że utf8mb4 powinno zajmować nieco więcej miejsca na dysku.

7. Jeśli nie wystąpiły błędy - możesz utworzyć kopię zapasową bazy danych z poprawioną bazą.

8. Uruchom Zabbix.