2 Zabbixデータベースのキャラクターセットと照合の修正
MySQL/MariaDB
歴史的に、MySQL とその派生製品では utf8 が utf8mb3 の別名として使われてきました。utf8mb3 は、標準 UTF8 の MySQL 独自の 3 バイト実装であり、標準 UTF8 は 4 バイトです。
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 を起動します。