2 Zabbixデータベースのキャラクターセットと照合の修正
MySQL/MariaDB
これまで、MySQLおよびその派生製品では、標準UTF8の4バイト実装に対して、MySQL独自の3バイト実装であるutf8mb3の別名として「utf8」が使用されていました。 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. テーブルおよびカラムレベルで文字セットと照合順序を修正するため、 script を読み込みます。
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を起動します。