Riparazione del set di caratteri e della collazione del database Zabbix

MySQL/MariaDB

Storicamente, MySQL e i suoi derivati usavano 'utf8' come alias di utf8mb3 - l'implementazione a 3 byte di MySQL dello standard UTF8, che è 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'. A partire da Zabbix 6.0, 'utf8mb4' è supportato. Per evitare problemi futuri, è fortemente consigliato usare 'utf8mb4'. Un altro vantaggio del passaggio a 'utf8mb4' è il supporto dei caratteri Unicode supplementari.

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

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

Ad 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 vede, il set di caratteri qui non è 'utf8mb4' e la collation non è 'utf8mb4_bin', quindi dobbiamo correggerli.

2. Arresta Zabbix.

3. Crea una copia di backup del database!

4. Correggi 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. Carica 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. Esegui 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;

Tieni presente che 'utf8mb4' dovrebbe consumare leggermente più spazio su disco.

7. Se non ci sono errori, potresti voler creare una copia di backup del database con il database corretto.

8. Avvia Zabbix.