最近久しくzabbix-server建ててなかったので、最新の7系を建ててみたのですが、色々詰まった部分があったので備忘録として書いておこうと思いました。
少しでも参考になれば幸いです。
環境
OS:AlmaLinux 9.4
Apache:2.4.62
PHP:8.3.14
MySQL:8.0.40
zabbix_server/zabbix_agentd:7.0.6
困ったことその1
zabbix-serverと関連モジュールをインストールして
$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -u zabbix-user -p zabbix_db
したら、以下エラーが出てきて怒られた。
ERROR 1419 (HY000) at line 2494: You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)
なにこれ。
問題を調べてみると書いてある通りSUPER権限を持っていないかつlog_bin_trust_function_creators
が0(無効)の設定になっていて、SUPER権限を持ったユーザーしかストアド関数を作成できないみたい。
対策として2つあり、zabbix-userに権限を与えるか、log_bin_trust_function_creatorsを有効化するかだけど、log_bin_trust_function_creatorsを有効化するで良さそう。
ということで以下で解決しました。
mysql> SET GLOBAL log_bin_trust_function_creators=1;
※恒久的に設定しておきたい場合はmy.cnfで以下設定をいれておきましょう。
$ vi /etc/my.cnf
log_bin_trust_function_creators=1
困ったことその2
あとはzabbix-serverをsystemctlで起動しようとしたら以下エラーが。
systemd[1]: zabbix-server.service: Can't open PID file /run/zabbix/zabbix_server.pid (yet?) after start: Operation not permitted
systemd[1]: zabbix-server.service: Failed with result 'protocol'.
心当たりがあるとすれば/usr/lib/systemd/system/zabbix-server.service
で指定している、PIDと、/usr/local/etc/zabbix_server.conf
で指定している
PIDが食い違っていることがあるか、SELinuxのせいでPIDファイルが生成されていない。
原因はSELinuxっぽかったので無効化する。
$ vi /etc/selinux/config
SELINUX=Enabledをdisabledに変更する
SELINUX=disabled
あとはreboot(システムの再起動)をして入りなおせばOK
$ reboot
$ getenforce
Disabled
disabledになりました。
やったね。
困ったことその3
あとはzabbix_serverを起動したときに以下エラーがコンソールに表示されていた
テーブルacknowledges, actions, alerts, auditlog, autoreg_host, conditions, config, config_autoreg_tls, connector, connector_tag, corr_condition_tag, corr_condition_tagpair, corr_condition_tagvalue, correlation, dashboard, dashboard_page, dchecks, drules, dservices, event_tag, events, expressions, functions, globalmacro, globalvars, graph_theme, graphs, graphs_items, group_discovery, group_prototype, ha_node, hgset, history_log, history_str, history_text, host_discovery, host_inventory, host_proxy, host_tag, hostmacro, hosts, housekeeper, hstgrp, httpstep, httpstep_field, httptest, httptest_field, httptest_tag, icon_map, icon_mapping, ids, images, interface, interface_snmp, item_condition, item_discovery, item_parameter, item_preproc, item_rtdata, item_rtname, item_tag, items, lld_macro_path, lld_override, lld_override_condition, lld_override_operation, lld_override_ophistory, lld_override_opperiod, lld_override_optag, lld_override_optrends, maintenance_tag, maintenances, media, media_type, media_type_message, media_type_param, mfa, mfa_totp_secret, module, opconditions, operations, opmessage, optag, problem, problem_tag, profiles, proxy, proxy_autoreg_host, proxy_dhistory, proxy_group, proxy_history, regexps, report, report_param, role, role_rule, scim_group, script_param, scripts, service_problem_tag, service_tag, services, sessions, sla, sla_excluded_downtime, sla_service_tag, sysmap_element_url, sysmap_shape, sysmap_url, sysmaps, sysmaps_element_tag, sysmaps_elements, sysmaps_link_triggers, sysmaps_links, tag_filter, task_data, task_remote_command, task_remote_command_result, task_result, token, trigger_tag, triggers, ugset, userdirectory, userdirectory_idpgroup, userdirectory_ldap, userdirectory_media, userdirectory_saml, users, usrgrp, valuemap, valuemap_mapping, widget, widget_fieldがサポートしていない文字コードか照合順序です。
エラー内容に答えが書いてくれてる通りで、zabbix_dbの全テーブルで文字コードと照合順序がサポートされていないみたいです。
ログを見るとちゃんと書かれてますね。
$ less /var/log/zabbix/zabbix_server.log
Zabbix supports only "utf8_bin,utf8mb3_bin,utf8mb4_bin" collation(s). Database "zabbix_db" has default collation "utf8mb4_0900_ai_ci"
zabbixがサポートしてるのはutf8_bin
utf8mb3_bin
utf8mb4_bin
ですが、
今回はutf8mb4_0900_ai_ci
だったせいですね。
どうやら MySQL 8.0からcollationがutf8mb4_0900_ai_ci
になってるからのようです。
DB内の全テーブルの設定変更していくのもいいですが、
設定段階であれば量も多く面倒なので、DBを作りなおしてしまうのがオススメです。
一旦DBをDROPしてから作り直します。
mysql> DROP DATABASE zabbix_db;
mysql> CREATE DATABASE `zabbix_db` character set utf8 collate utf8_bin;
あとは権限付与してmysqlから抜けます
mysql> GRANT ALL PRIVILEGES ON `zabbix_db`.* TO "zabbix-user"@"%";
mysql> exit
あとはもう一回流し込んであげます。
$ zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix-user -p zabbix_db
最後に各プロセスを再起動させておいて、コンソールを見てみるとエラーが無くなっている!
キタ――(゚∀゚)――!!
ということで、お疲れ様でした。