Zabbixをご利用中の皆さん、突然「Cannot connect to database」というエラーメッセージに直面し、監視機能が停止してしまってご不安なことと思います。しかし、ご安心ください。このエラーはZabbix環境で比較的よく発生するものであり、その解決策も多くの場合、シンプルな設定確認やサービスの再起動で対応可能です。
この記事では、Windowsユーザーの皆さんがこの問題を迅速に解決できるよう、具体的な手順とPowerShellまたはCmdコマンドを交えながら、原因の特定から恒久的な対策までをわかりやすく解説します。
目次
1. Zabbix: Cannot connect to database とは?(概要と緊急度)
「Cannot connect to database」は、Zabbix Serverがバックエンドで利用しているデータベース(MySQL、PostgreSQLなど)に接続できない状態を示します。Zabbix Serverはデータベースに接続できなければ、監視データの収集、イベントの処理、Webインターフェースへのデータ表示など、すべての主要な機能を停止してしまいます。そのため、このエラーはZabbix環境において非常に高い緊急度を持つトラブルと認識してください。
ですが、慌てる必要はありません。多くの場合、原因はデータベースサービスの停止、ネットワーク接続の問題、またはZabbix Serverの設定ファイルの記述ミスなど、特定しやすい箇所にあります。次に、今すぐ試せる具体的な解決策を見ていきましょう。
2. 【最速】今すぐ試すべき解決策
まずは、最も頻繁にこのエラーの原因となる項目から確認し、迅速な復旧を目指しましょう。
解決策1:Zabbix Serverおよびデータベースサービスの稼働状況を確認・再起動する
最も簡単な原因は、Zabbix Serverやデータベース自体が停止していることです。まずはこれらのサービスが正常に稼働しているかを確認し、必要であれば再起動を試みましょう。
Zabbix ServerがLinux上で稼働している場合 (WindowsからSSH経由で操作)
Zabbix Serverは通常Linux上で稼働します。WindowsからSSHクライアント(PowerShellのsshコマンドなど)を使用してリモートでサービスのステータスを確認し、再起動します。
# SSHでZabbix Serverに接続([user]と[server_ip]は環境に合わせて変更)
# 接続後、以下のコマンドを実行
#
# Zabbix Serverサービスのステータス確認
sudo systemctl status zabbix-server
#
# データベースサービスのステータス確認(例: MySQLの場合)
sudo systemctl status mysql
# または PostgreSQLの場合
# sudo systemctl status postgresql
# サービスが停止していた場合、または念のため再起動する場合
# Zabbix Serverの再起動
sudo systemctl restart zabbix-server
#
# データベースの再起動(例: MySQLの場合)
sudo systemctl restart mysql
# または PostgreSQLの場合
# sudo systemctl restart postgresql
Zabbix ServerがWindows上で稼働している場合 (まれなケース、Docker for Windowsなども含む)
もしZabbix ServerをWindowsサービスとして、またはDocker Desktop for Windowsなどでコンテナとして稼働させている場合は、以下のコマンドで確認できます。
# Zabbix ServerサービスがWindowsサービスとして登録されている場合
Get-Service -Name "Zabbix Server" # サービス名は環境によって異なる場合があります
Start-Service -Name "Zabbix Server" # 停止していれば開始
# データベースサービス (例: MySQL) がWindowsサービスとして登録されている場合
Get-Service -Name "MySQL*" # または具体的なサービス名 (例: MySQL80)
Start-Service -Name "MySQL80" # 停止していれば開始
# DockerコンテナでZabbix Serverが稼働している場合
# PowerShellでDockerコマンドを実行
docker ps -a --filter "name=zabbix-server"
docker restart zabbix-server # コンテナ名を指定して再起動
docker ps -a --filter "name=zabbix-db"
docker restart zabbix-db # データベースコンテナを再起動
サービスを再起動した後、ZabbixのWebインターフェースに再度アクセスし、エラーが解消されたかを確認してください。
解決策2:Zabbix Serverの設定ファイル「zabbix_server.conf」のデータベース接続情報を確認・修正する
サービスが稼働しているにもかかわらずエラーが解消しない場合、Zabbix Serverがデータベースに接続するための設定情報が誤っている可能性が高いです。
Zabbix ServerがLinux上で稼働している場合 (WindowsからSSH経由で操作)
SSHでZabbix Serverに接続し、/etc/zabbix/zabbix_server.conf ファイルの内容を確認します。特にDBHost、DBName、DBUser、DBPasswordの項目が正しいことを確認してください。
# SSHでZabbix Serverに接続([user]と[server_ip]は環境に合わせて変更)
# 設定ファイルの内容を確認
ssh [user]@[server_ip] "sudo cat /etc/zabbix/zabbix_server.conf | egrep '^DBHost|^DBName|^DBUser|^DBPassword'"
# 出力例:
# DBHost=localhost
# DBName=zabbix
# DBUser=zabbix
# DBPassword=your_zabbix_db_password
# もし設定が誤っていた場合、テキストエディタでファイルを編集します
# ssh [user]@[server_ip] "sudo nano /etc/zabbix/zabbix_server.conf"
# 編集後、Zabbix Serverを再起動します
ssh [user]@[server_ip] "sudo systemctl restart zabbix-server"
注意: DBPassword の値は通常、セキュリティ上の理由から直接ファイルに記述しないこともあります。もし環境変数や他の方法で管理されている場合は、その設定も確認してください。
データベースの認証情報と照合
Zabbix Serverの設定ファイルで指定されているDBUserとDBPasswordが、実際のデータベース(MySQLやPostgreSQL)で設定されているユーザー名とパスワードと一致しているかを必ず確認してください。
# 例: MySQLの場合、Windows上のMySQLクライアントから確認
# MySQLサーバーがWindowsで動いている場合や、リモートDBにアクセスできる場合
# コマンドプロンプトまたはPowerShellで実行
mysql -h [db_host] -u root -p
# パスワードを入力後、以下のSQLコマンドを実行してユーザー情報を確認
-- SELECT user, host FROM mysql.user;
-- SELECT user, host, authentication_string FROM mysql.user WHERE user='zabbix';
これらの確認と修正を行った後、ZabbixのWebインターフェースにアクセスし、エラーが解消されたかを確認してください。
3. Zabbix: Cannot connect to database が発生する主要な原因(複数)
上記で解決しない場合や、将来的な再発防止のために、このエラーが発生する主な原因を理解しておきましょう。
- データベースサーバーの停止: 最も単純な原因で、MySQLやPostgreSQLなどのデータベースサービス自体が稼働していない状態です。
- Zabbix Serverの設定ミス:
zabbix_server.confファイル内のDBHost(データベースのIPアドレス/ホスト名)、DBName(データベース名)、DBUser(データベースユーザー名)、DBPassword(データベースパスワード)のいずれかが誤っている。 - データベースユーザーの権限不足: Zabbixがデータベースに接続するためのユーザー(例:
zabbix)に、必要な権限(SELECT, INSERT, UPDATE, DELETEなど)が付与されていない、または誤ったホストからの接続が許可されていない。 - ネットワーク接続の問題:
- Zabbix Serverからデータベースサーバーへのネットワーク経路が存在しない。
- ファイアウォール(Zabbix Server側、データベースサーバー側、または途中のネットワーク機器)がデータベースのポート(MySQL: 3306, PostgreSQL: 5432など)をブロックしている。
- データベースサーバーが特定のIPアドレスからの接続のみを許可している(例:
bind-address設定や、PostgreSQLのpg_hba.conf)。
- データベースのディスク容量不足: データベースが稼働していても、ディスク容量が枯渇している場合、新しい接続を受け付けられなくなることがあります。
- データベースの接続数上限: データベースが設定されている最大接続数に達しており、Zabbix Serverからの新しい接続を受け付けられない状態。
- データベースの破損: 稀にデータベース自体が破損し、正常に起動できない、または接続を受け付けられないことがあります。
- Zabbix ServerのバージョンとDBの非互換性: Zabbix Serverとデータベースのバージョン間に互換性の問題がある場合。
4. Zabbixで恒久的に再発を防ぐには
一時的な解決に終わらず、このエラーの再発を未然に防ぐための対策を講じましょう。
- Zabbixとデータベースの監視の強化:
- データベースサーバーの監視: Zabbix Serverがダウンしても、データベース自体の稼働状況(サービスステータス、ディスク使用量、メモリ、CPU、アクティブ接続数)を別の監視システム(例: Prometheus, Nagios)やOSの監視機能で常時監視し、異常を早期に検知する体制を構築します。
- Zabbix Server自身の監視: Zabbix Serverプロセスが稼働しているか、ログにエラーが出力されていないかなどを監視します。
- ログの定期的な確認と監視:
- Zabbix Serverのログファイル (通常
/var/log/zabbix/zabbix_server.log) - データベースサーバーのログファイル (MySQL:
error.log, PostgreSQL:postgresql.logなど)
これらのログを定期的に確認し、特にエラーや警告メッセージがないかをチェックします。可能であれば、特定のキーワードを検知したらアラートを出すように設定しましょう。
- Zabbix Serverのログファイル (通常
- 設定ファイルの集中管理とレビュー:
zabbix_server.confのような重要な設定ファイルは、バージョン管理システム(Gitなど)で管理し、変更履歴を追跡可能にします。- 設定変更は、本番環境に適用する前にテスト環境で十分なテストを行い、複数人でのレビュープロセスを導入します。
- ネットワークとファイアウォールの適切な設定:
- Zabbix Serverとデータベースサーバー間の通信に必要なポート(MySQL: 3306, PostgreSQL: 5432)が、両方のサーバーおよび途中のネットワーク機器のファイアウォールで適切に許可されていることを確認します。
- セキュリティグループやアクセスリストは最小限のアクセスのみを許可するように設定します。
- データベースの定期的なメンテナンス:
- ディスク容量の監視と拡張計画。
- 定期的なバックアップとリストアテストの実施。
- データベースの最適化(インデックスの再構築など)。
- データベースユーザーの権限管理:
- Zabbix用のデータベースユーザーには、Zabbixの運用に必要な最小限の権限のみを与えます。
- パスワードは定期的に変更し、安全に管理します。
これらの対策を講じることで、「Cannot connect to database」エラーの発生頻度を大幅に減らし、万一発生した場合でも迅速に対応できるようになります。常にシステムの状態を把握し、安定したZabbix運用を目指しましょう。