- ベストアンサー
PostgreSQLが起動しない・・・
はじめまして、tanu_2です。 玄箱HGをDebian化し、いろいろと遊んでいます。 PostgreSQLをapt-getでインストールし、Webアプリを動かしていたのですが、昨日より突然、PostgreSQLが動かなくなってしまいました。 原因が分からず、サーバを再起動し、 # /etc/init.d/postgresql start や $ pg_ctl start などを試してみたのですが、動きません。 念のため、初期化(initdb)も試みたのですが、これも失敗してしまいます。 /var/log/postgresql/postgres/logを覗いてみると、 FATAL: could not write lock file "/var/lib/postgres/data/postmaster.pid": No space となっており、上記ディレクトリにpostmaster.pid書き込みできないよ、と言われているっぽかったので、パーミッションを変更したりして みましたが、postgresql startにしろ、pg_ctl startにしろ、それぞれのコマンドで起動すると、強制的にパーミッションが「700」に変更されてしまうようで、結果は同じでした。 どなたか、解決策をご教示願えませんでしょうか? よろしくお願いします。m(_ _)m
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
それ以外にも、以下のようなコマンドを使ってデータベースサーバプログラムの起動が出来ますよね。 postmaster -D /usr/local/pgsql/data ただ、以下のURLのドキュメント内には、次のような記述があります。 「何を実行するにしても、サーバはPostgreSQLユーザアカウントで起動させなければなりません。 rootであってはいけませんし、他のユーザでもいけません。」 パッケージによるインストールであれば、自動でpostgresユーザが作られているはずだと思うけど。(Debianは使ったことないので、確証はなし。) su - postgres 上記のコマンドでログインするなり、パスワードを忘れたのならroot権限にてpasswdコマンドから変更するなりした後、もう一度postmasterを起動してみよう! ちなみに、パーミッション関係のエラーは、「Permission denied」ですよね。
その他の回答 (3)
- choconamacream
- ベストアンサー率44% (152/338)
#4です。ほっ、間に合ってよかった。(いえ、独り言です。) 「postmaster」っていうのは、PostgreSQLのデーモンプロセスでもあるわけだから、rootでも操作が出来なくはないはず・・・、といろいろといじっていましたらGUIでの操作方法を発見です。(以下、Fedora Core6[KDE]のばあい。) 1.「K メニュー」→「システム」→「Services」より"system-config-services"を起動. 2.「postgresql」の所にチェックを入れてから、「開始」ボタンを押下。 ちなみに、上記と同じことをCUIにて行いたいのであれば、Red Hat 系の場合は、以下のコマンドを実行します。 /etc/rc.d/init.d/postgresql start で、質問者さんの場合では何故できなかったのかに関しては、以下のサイトを参考にしてください。(私自身、詳しくは分かりません。近々、Ubuntuもさわってみようかな~と考えているので、その時までには理解しておこうかなと。) Debianでの起動処理(init)とランレベル(rc.d)の制御 http://park15.wakwak.com/~unixlife/linux/de-init.html インストール手順などが載っているサイト上では、よく「起動スクリプトの作成」についての説明があったりしますが、以下の過去ログにもある通り、通常はいちいち作らなくてもいいはず。 「RedHat ES4でPostgreSQLを自動起動したい」 http://oshiete1.goo.ne.jp/qa2848463.html ちなみに、既存の起動スクリプトの場所がどこか知りたいのなら、「ファイル/フォルダを検索」にて名前(N):は「postgres」、参照(I):は「file:///」とすれば、だーっといろいろと出てくることと思う。 最後に、DB管理者さん向けのサイト。 エラー時の対処法 http://mland98.rc.kyushu-u.ac.jp/text/skyboard-2.0.html#error_1
- gyrocompas
- ベストアンサー率23% (24/104)
"/var/lib/postgres/data/postmaster.pid" を削除すれば、どうですか ちなみに、削除しても大丈夫と思うよ 私も、2~3回、経験がある。 まあ、私の場合を同じ原因とは限りませんが ためしに、やってみては。
お礼
gyrocompasさん、回答をいただきまして、ありがとうございました。 (返事が遅くなってしまい、申し訳ございませんでした。m(_ _)m) 教えて頂いた方法ですが、すでに実施していたのですが、解決には至りませんでした。orz 何が悪いんでしょうか???
No space
補足
pastelflowさん、早速の書き込みをいただき、ありがとうございます。 エラーメッセージが途中で切れていました。 正しくは、 No space left on device です。ちなみに、このエラーメッセージはpg_ctl startを実行した際のものです。 root権限で、/etc/init.d/postgresql startを実行した際には、若干違うメッセージが出ます。 Starting PostgreSQL database server: postmaster(FAILED) ERROR: ERROR: PostgreSQL postmaster did not start because of an unknown reason. /usr/lib/postgresql/bin/postgresql-startup: line 161: cannot create temp file for here document: No space left on device 両方とも、「No space left on device」と出ているのですが、どうすれば解決できるものかと悩んでいます。
お礼
choconamacreamさん、いろいろと詳細な情報までご提供いただきまして、ありがとうございました。m(_ _)m 教えて頂きました情報に基づき、いろいろと試してみたところ、ようやくうまくいきました。 本当にありがとうございました。 原因は、ユーザpostgresのホームディレクトリに作成されていた~data/以下のディレクトリの権限がrootになっていたため、initdbが失敗してしまい、postmasterが起動できなくなっているというもののようでした。 なぜ、root権限になってしまったのかは不明ですが、 $ rm -Rf ~/data/ # rm -Rf /var/lib/postgres/data とし、それぞれのdataディレクトリを削除した後、 $ initdb を実行し、DBを初期化、さらに $ postmaster -i -D /var/lib/postgres/data により、postmasterを実行することにより解決しました。 ちなみに、root権限による # /etc/init.d/postgres start では、TCP/IPでの接続ができない旨、エラーメッセージが出てきてしまい、うまくいかなかったので、postgres権限による-iオプションを付けた起動としました。 PostgreSQLの運用・管理は数年やっているのですが、こんな原因でうまくいかないという状況にはまってしまったのは、初めてだったもので、皆様のお力をお借りさせていただきました。 今回の件で、いろいろと勉強させていただきました。 本当に、ありがとうございました。m(_ _)m
補足
下記のTCP/IP接続に関する補足です。 /var/lib/postgres/data/postgresql.conf にある #tcpip_socket = false を tcpip_socket = true に変更した後、root権限で # /etc/init.d/postmaster restart を実行したところ、うまくいくようになりました。 どうやら、PostgreSQLでは、TCP/IPでの接続はデフォルトとはなっておらず、localhost への接続だった場合は、UNIX ドメインソケット経由にした方が接続の速度が速いので、そのようになっているようです。 本当に、勉強になりました。 重ねて、ご回答頂きました皆様に御礼申し上げます。m(_ _)m