メニュー 閉じる

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

移行手順と発生事象

データベース移行

前提として、各種サービスの設定・起動は行っているものとします。

  1. 旧サーバでZabbixデータベースのダンプ
    old-server $ mysqldump -uroot -p zabbix --add-drop-table > zabbix.sql
    
  2. ダンプファイルをSCPで新サーバへ転送
  3. 新サーバでzabbix用データベースを作成
    new-server $ mysql -uroot -p
    MariaDB > create database zabbix default character set utf8;
    
  4. 新サーバのzabbixデータベースにダンプファイルをインポート
    new-server $ mysql -uroot -p zabbix < zabbix.sql
    

WebUI初期設定

ここからは、ZabbixのWebUIへブラウザで接続して作業していきます。

  1. ブラウザで、WebUI(http://サーバIP/zabbix)へ接続して、Welcome画面で「Next Step」
  2. 必要条件がOKになっていることを確認し「Next Step」
  3. DBの設定を入力し「Next Step」
  4. するとエラーが表示されて進めなくなります。

発生したエラー

Cannot connect to the database.

Unsupported charset or collation for tables: acknowledges, actions, alerts, application_discovery, application_prototype, applications, auditlog, auditlog_details, autoreg_host, conditions, config, config_autoreg_tls, corr_condition_tag, corr_condition_tagpair, corr_condition_tagvalue, correlation, dashboard, dchecks, drules, dservices, event_tag, events, expressions, functions, globalmacro, graph_theme, graphs, graphs_items, group_discovery, group_prototype, history_log, history_str, history_text, host_discovery, host_inventory, host_tag, hostmacro, hosts, housekeeper, hstgrp, httpstep, httpstep_field, httptest, httptest_field, icon_map, icon_mapping, ids, images, interface, item_condition, item_discovery, item_preproc, item_rtdata, items, lld_macro_path, maintenance_tag, maintenances, mappings, media, media_type, media_type_param, opcommand, opconditions, operations, opmessage, problem, problem_tag, profiles, proxy_autoreg_host, proxy_dhistory, proxy_history, regexps, screens, screens_items, scripts, services, services_times, sessions, slides, slideshows, sysmap_element_url, sysmap_shape, sysmap_url, sysmaps, sysmaps_elements, sysmaps_link_triggers, sysmaps_links, tag_filter, task_remote_command, task_remote_command_result, trigger_tag, triggers, users, usrgrp, valuemaps, widget, widget_field.

原因

これと同様の事象が、タイムリーに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パラメータを付けているので、インポートする際に一度テーブルが削除されるためです。
データ移行などで何度かやり直すことが考えられる場合は、あらかじめこのパラメータを付けておくと便利です。

2 Comments

  1. たま

    gentooで運用してますが、1ヶ月ほど前から引っかかってました
    gentoo固有の話ですが、gentoo用zabbixインストーラーのbugと
    時期が重なって沼にハマってました
    (こちらも一昨日のバグフィックスで解消しました)

    おかげさまでアップデート出来ました、ありがとうございました

    • tukapiyo

      コメントありがとうございます。
      こういう細かい修正で影響大きいのは困りますね。
      お役に立ったようで良かったです。

コメントを残す