2 Riparazione del set di caratteri e delle regole di confronto del database Zabbix

MySQL/MariaDB

Storicamente, MySQL e i suoi derivati hanno usato 'utf8' come alias di utf8mb3, l'implementazione a 3 byte di MySQL dello standard UTF8, che invece è a 4 byte. A partire da MySQL 8.0.28 e MariaDB 10.6.1, il set di caratteri 'utf8mb3' è deprecato e a un certo punto il suo supporto verrà rimosso, mentre 'utf8' diventerà un riferimento a 'utf8mb4'. Da Zabbix 6.0, 'utf8mb4' è supportato. Per evitare problemi futuri, è fortemente consigliato usare 'utf8mb4'. Un altro vantaggio del passaggio a 'utf8mb4' è il supporto ai caratteri Unicode supplementari.

Poiché le versioni precedenti a Zabbix 6.0 non riconoscono utf8mb4, assicurarsi prima di aggiornare Zabbix server e lo schema del DB alla versione 6.0.x o successiva prima di eseguire la conversione a utf8mb4.

1. Verificare il set di caratteri e la collation del database.

Per esempio:

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

Oppure:

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

Come si può vedere, qui il set di caratteri non è 'utf8mb4' e la collation non è 'utf8mb4_bin', quindi è necessario correggerli.

2. Arrestare Zabbix.

3. Creare una copia di backup del database!

4. Correggere il set di caratteri e la collation a livello di database:

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

Valori corretti:

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

5. Caricare lo script per correggere il set di caratteri e la collation a livello di tabella e colonna:

mysql <your DB name> < utf8mb4_convert.sql

6. Eseguire lo script:

               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;

Si noti che è previsto che 'utf8mb4' consumi leggermente più spazio su disco.

7. Se non ci sono errori, si consiglia di creare una copia di backup del database corretto.

8. Avviare Zabbix.