Reparieren des Zeichensatzes und der Sortierung der Zabbix-Datenbank

MySQL/MariaDB

Historisch wurde bei MySQL und seinen Derivaten utf8 als Alias für utf8mb3 verwendet - MySQLs eigene 3-Byte-Implementierung von UTF8, das 4-Byte ist. Ab MySQL 8.0.28 und MariaDB 10.6.1 ist der Zeichensatz utf8mb3 veraltet, und zu einem späteren Zeitpunkt wird seine Unterstützung entfernt, während utf8 zu einem Verweis auf utf8mb4 wird. Seit Zabbix 6.0 wird utf8mb4 unterstützt. Um zukünftige Probleme zu vermeiden, wird dringend empfohlen, utf8mb4 zu verwenden. Ein weiterer Vorteil der Umstellung auf utf8mb4 ist die Unterstützung zusätzlicher Unicode-Zeichen.

Da Versionen vor Zabbix 6.0 utf8mb4 nicht kennen, stellen Sie bitte sicher, dass Sie zuerst den Zabbix Server und das DB-Schema auf 6.0.x oder neuer aktualisieren, bevor Sie die utf8mb4-Konvertierung ausführen.

1. Prüfen Sie den Zeichensatz und die Sortierung der Datenbank.

Zum Beispiel:

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

Oder:

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

Wie wir sehen, ist der Zeichensatz hier nicht utf8mb4 und die Sortierung ist nicht utf8mb4\_bin, daher müssen wir sie korrigieren.

2. Stoppen Sie Zabbix.

3. Erstellen Sie eine Sicherungskopie der Datenbank!

4. Korrigieren Sie den Zeichensatz und die Sortierung auf Datenbankebene:

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

Korrigierte Werte:

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

5. Laden Sie das Skript , um Zeichensatz und Sortierung auf Tabellen- und Spaltenebene zu korrigieren:

mysql <your DB name> < utf8mb4_convert.sql

6. Führen Sie das Skript aus:

               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;

Bitte beachten Sie, dass utf8mb4 voraussichtlich etwas mehr Speicherplatz auf der Festplatte benötigt.

7. Wenn keine Fehler aufgetreten sind, können Sie eine Sicherungskopie der Datenbank mit der korrigierten Datenbank erstellen.

8. Starten Sie Zabbix.