2 Zabbixデータベースのキャラクターセットと照合の修正

MySQL/MariaDB

従来、MySQLおよびその派生製品では、'utf8' は utf8mb3 の別名として使用されていました。utf8mb3 は、本来4バイトである標準UTF8に対する、MySQL独自の3バイト実装です。 MySQL 8.0.28 および MariaDB 10.6.1 以降では、'utf8mb3' 文字セットは 非推奨となっており、将来的にはサポートが廃止される予定です。一方で、'utf8' は 'utf8mb4' を参照するようになります。 Zabbix 6.0 以降では、'utf8mb4' がサポートされています。将来的な問題を避けるため、 'utf8mb4' を使用することを強く推奨します。 'utf8mb4' に切り替えるもう1つの利点は、Unicode の補助文字を サポートできることです。

Zabbix 6.0 より前のバージョンは utf8mb4 を認識しないため、utf8mb4 への変換を実行する前に、必ず最初に Zabbix サーバーおよび DB スキーマを 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>';
If MariaDB →  set innodb_strict_mode = OFF;        
               CALL zbx_convert_utf8();
If MariaDB →  set innodb_strict_mode = ON;   
               drop procedure zbx_convert_utf8;

'utf8mb4' は、ディスク容量をわずかに多く消費することが想定される点に注意してください。

7. エラーがなければ、修正済みデータベースのバックアップコピーを 作成することをお勧めします。

8. Zabbix を起動します。