Zabbix 4.4.6でUnsupported charset or collation for tablesと表示される
Zabbix 2.4くらいの時からZabbixを使い続けているのですが、時々新しいバージョンへアップグレードしつつ、Zabbix 4系を利用していました。
今回サーバリプレースに合わせてZabbix 4.4.6を導入したのですが、その際に発生したトラブルについて紹介します。
環境
- CentOS 8.1.1911
- 導入したZabbixパッケージ類
- zabbix-release
- zabbix-web
- zabbix-web-mysql
- zabbix-web-japanese
- zabbix-apache-conf
- MariaDB 10.3.17
移行手順と発生事象
データベース移行
前提として、各種サービスの設定・起動は行っているものとします。
- 旧サーバでZabbixデータベースのダンプ
old-server $ mysqldump -uroot -p zabbix --add-drop-table > zabbix.sql
- ダンプファイルをSCPで新サーバへ転送
- 新サーバでzabbix用データベースを作成
new-server $ mysql -uroot -p MariaDB > create database zabbix default character set utf8;
- 新サーバのzabbixデータベースにダンプファイルをインポート
new-server $ mysql -uroot -p zabbix < zabbix.sql
WebUI初期設定
ここからは、ZabbixのWebUIへブラウザで接続して作業していきます。
- ブラウザで、WebUI(http://サーバIP/zabbix)へ接続して、Welcome画面で「Next Step」
- 必要条件がOKになっていることを確認し「Next Step」
- DBの設定を入力し「Next Step」
- するとエラーが表示されて進めなくなります。
発生したエラー
原因
これと同様の事象が、タイムリーにZabbixのフォーラムに報告されていました。
どうやらZabbix 4.4.6から、データベースの照合順序がutf8_binでないと弾かれるようになったらしいのです。
解決
今回の場合、データベースをダンプして移行するタイミングでしたので、ダンプファイル自体を修正することで解決しました。
テーブルのDEFAULT CHARSET=utf8;
の部分を、DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
と編集してからインポートします。
sed "s/CHARSET=utf8/CHARSET=utf8 COLLATE=utf8_bin/" zabbix.sql > zabbix-new.sql
なおこの手順でダンプファイルを作成した場合は、インポートする際にテーブルを削除する必要はありません。
mysqldump
を実行した際に、--add-drop-table
パラメータを付けているので、インポートする際に一度テーブルが削除されるためです。
データ移行などで何度かやり直すことが考えられる場合は、あらかじめこのパラメータを付けておくと便利です。
gentooで運用してますが、1ヶ月ほど前から引っかかってました
gentoo固有の話ですが、gentoo用zabbixインストーラーのbugと
時期が重なって沼にハマってました
(こちらも一昨日のバグフィックスで解消しました)
おかげさまでアップデート出来ました、ありがとうございました
コメントありがとうございます。
こういう細かい修正で影響大きいのは困りますね。
お役に立ったようで良かったです。