LoginSignup
1
0

More than 3 years have passed since last update.

PostgreSQLサーバが立ち上がらなくなったとき

Last updated at Posted at 2019-12-02

注意

これは研究室のサーバ上のVMでPostgreSQLの設定をしているときにエンカウントしたエラーについてのメモです. 見づらいのはご容赦ください.

前提

  • Ubuntu18.04のサーバのyukiというVMにorbitというNASをマウントしている.
  • orbit/postgresqlにPostgreSQLのデータファイルの実体を保存する設定済み.
  • orbitの所有者がrootになっており,毎回一般ユーザ(moririn)からsudo権限を発行して実行するのがめんどくさいため,所有者設定を変えたい.

問題発生時の行動

所有者を変更するにはchownコマンドを使えばいいはずだと思った自分は以下のコマンドを入力した.

moririn@yuki:$ chown -hR moririn /orbit
# -h: 指定したファイルがシンボリックリンクの場合、シンボリックリンクのみ所有権を変更
# -R: 再帰的に所有者を変更

しかし,postgresqlを再起動してアクセスしようとすると下記のエラーが出現

psql:could not connect to server: Connection refused 
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?

LAN内の他のサーバからアクセスしようとしても同様のエラーが出現していました...このとき,configファイルのpg_hba.confを確認しましたが正しい内容が書いてありました.

解決策

とりあえず...statusを確認すると以下のように出力されました

moririn@yuki:$ systemctl status postgresql@12-main.service
● postgresql@12-main.service - PostgreSQL Cluster 12-main
   Loaded: loaded (/lib/systemd/system/postgresql@.service; indirect; vendor preset: enabled)
   Active: failed (Result: protocol) since Mon 2019-12-02 06:37:46 UTC; 1min 12s ago
  Process: 4153 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 12-main start (code=exited, status=1/FAILUR
Dec 02 06:37:46 yuki systemd[1]: Starting PostgreSQL Cluster 12-main...
Dec 02 06:37:46 yuki postgresql@12-main[4153]: Error: Config owner (postgres:115) and data owner (moririn:1000) do not
Dec 02 06:37:46 yuki systemd[1]: postgresql@12-main.service: Can't open PID file /run/postgresql/12-main.pid (yet?) af
Dec 02 06:37:46 yuki systemd[1]: postgresql@12-main.service: Failed with result 'protocol'.
Dec 02 06:37:46 yuki systemd[1]: Failed to start PostgreSQL Cluster 12-main.

これによるとそもそもサーバが立ち上がっていない...ということがわかります.原因はconfigの所有者(postgres)とdataの所有者(moririn)が異なるためとわかりました.
下記のコマンドより, dataディレクトリの所有者をpostgresに戻したところこのエラーは出力されず,PostgreSQLサーバも立ち上がるようになりました.

moririn@yuki:$ chown -hR postgres /orbit/postgresql

感想

今回はデータディレクトリ/orbit/postgresqlの所有者を変更する形で対処を行いましたが, configファイルの所有者変更でも対処できたように思います. 多くの方がconfigファイルを/var/lib/postgresql内に置いているようで, Web上の多くの記事はこの所有者を変更すれば良いと記載していたのですが, 自分の場合はconfigファイルを/etc/postgresql内に置いていたので余計手こずったように思いました.このようにconfファイルを探したいときは下記のようにコマンドを実行することですべてのディレクトリを探索し, ファイルを探すことができることを学びました.

moririn@yuki:$ sudo find / -name pg_hba.conf
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0