PostgreSQLの初期化からデータベース接続まで

PostgreSQLの初期化からデータベース接続まで

Posted at April 18,2011 1:55 AM
Tag:[MovableType, PostgreSQL]

サーバにインストールされているPostgreSQLを使って、データベースの初期化から接続まで行ってみました。いくつかつまづいた箇所があったので情報展開しておきます。OSはFedora 8です。

1.サービスの起動(失敗)

サービスの起動は

# /etc/init.d/postgresql start

または

# service postgresql start

ですが、次のメッセージが表示されました。

/var/lib/pgsql/data is missing. Use "service postgresql initdb" to initialize the cluster first.

PostgreSQLの初期化ができていないようです。/var/lib/pgsql/data配下を参照すると、

# ll /var/lib/pgsql/data
drwx------ 2 postgres postgres 4096 2007-09-21 05:30 ./
drwx------ 4 postgres postgres 4096 2011-04-13 17:05 ../

何も入っていませんでした。ということで初期化を行います。

2.サービス初期化

初期化はservice postgresql initdbを投入します。

# service postgresql initdb
#  データベースを初期化中:                                    [  OK  ]

成功しました。/var/lib/pgsql/data配下を参照すると色々入っています。

# ll /var/lib/pgsql/data
合計 64
-rw------- 1 postgres postgres     4 2011-04-13 17:12 PG_VERSION
drwx------ 5 postgres postgres  4096 2011-04-13 17:12 base
drwx------ 2 postgres postgres  4096 2011-04-13 17:12 global
drwx------ 2 postgres postgres  4096 2011-04-13 17:12 pg_clog
-rw------- 1 postgres postgres  3200 2011-04-13 17:12 pg_hba.conf
-rw------- 1 postgres postgres  1460 2011-04-13 17:12 pg_ident.conf
drwx------ 2 postgres postgres  4096 2011-04-13 17:12 pg_log
drwx------ 4 postgres postgres  4096 2011-04-13 17:12 pg_multixact
drwx------ 2 postgres postgres  4096 2011-04-13 17:12 pg_subtrans
drwx------ 2 postgres postgres  4096 2011-04-13 17:12 pg_tblspc
drwx------ 2 postgres postgres  4096 2011-04-13 17:12 pg_twophase
drwx------ 3 postgres postgres  4096 2011-04-13 17:12 pg_xlog
-rw------- 1 postgres postgres 15336 2011-04-13 17:12 postgresql.conf

3.サービス起動

この状態で再度サービス起動を実施します。

# service postgresql start
postgresql サービスを開始中:                               [  OK  ]

起動しました。

4.ユーザーの作成

データベースにアクセスするユーザーmtuserを、createuserコマンドで作成します。作成にあたっては、自動的に作成されているpostgresというアカウントでログインして行いました。オプションの意味は次の通りです。

  • -P:新しいユーザのパスワードのプロンプトを表示
  • -no-adduser:新しいユーザが他のユーザを作成することを禁止
  • --no-createdb:新しいユーザがデータベースの作成を禁止
  • --no-createrole:新しいユーザがロールの作成を禁止
# su - postgres
$ createuser -P --no-adduser --no-createdb --no-createrole mtuser
Enter password for new role:
Enter it again:
CREATE ROLE

無事に作成されました。

5.データベースの作成

データベースhogeを作成します。「-owner mtuser」は、新しいデータベースの所有者となるデータベースユーザmtuserの指定です。

-bash-3.2$ createdb --owner mtuser hoge
CREATE DATABASE

作成されました。

ちなみに、データベースを削除する場合はdropdbを投入します。

-bash-3.2$ dropdb hoge
DROP DATABASE

6.データベースへの接続(失敗)

データベースとデータベースのユーザ・パスワードを設定したので、ここではMovable Typeのインストール画面から接続を試みたのですが、次のようなエラーが発生しました。

データベースに接続できませんでした。設定を見直してもう一度接続してください。

実際の画面
データベース接続エラー

メッセージ右側にある「詳細」のリンクをクリックすると次のようなエラーでした。

Connection error: FATAL: Ident authentication failed for user "mtuser" at /var/www/cgi-bin/knowhow/extlib/Data/ObjectDriver/Driver/BaseCache.pm line 320 at /var/www/cgi-bin/knowhow/extlib/Data/ObjectDriver/Driver/BaseCache.pm line 320 at /var/www/cgi-bin/knowhow/extlib/Data/ObjectDriver/Driver/BaseCache.pm line 320

実際の画面
エラー詳細

7.pg_hba.confの修正

エラーメッセージでネット検索すると、「/var/lib/pgsql/data/pg_hba.confにあるhostの「ident sameuser」を「trust」に修正すれば良い」という情報がありましたので、次のように修正しました。「ident sameuser」はアクセスしたユーザとDBユーザが同じ名前でIDENT認証し一致したら接続。「trust」はアクセスしたユーザとDBユーザが異なっても全て許可して接続、という意味のようです。

変更前

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
# "local" is for Unix domain socket connections only
local   all         all                               ident sameuser
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident sameuser
# IPv6 local connections:
host    all         all         ::1/128               ident sameuser

変更後

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident sameuser
# IPv6 local connections:
host    all         all         ::1/128               ident sameuser

修正後、サービスを再起動します。

# service postgresql restart
postgresql サービスを停止中:                               [  OK  ]
postgresql サービスを開始中:                               [  OK  ]

8.データベースへの再接続(失敗)

この状態で再度Movable Typeから接続を試みましたが、結局接続できませんでした。ちなみに以下のコマンドは成功します。psqlはコマンドラインでの対話型ツールです。

-bash-3.2$ psql hoge -U mtuser
Welcome to psql 8.2.5, the PostgreSQL interactive terminal.
 
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

9.pg_hba.confの再修正

もう少し調べてみると、先程修正したファイルpg_hba.confの「host」も修正しないといけないという説明をみつけたので、さらに修正しました。

変更前

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
  
# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          ident sameuser
# IPv6 local connections:
host    all         all         ::1/128               ident sameuser

変更後

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
 
# "local" is for Unix domain socket connections only
local   all         all                               trust
# IPv4 local connections:
host    all         all         127.0.0.1/32          trust
# IPv6 local connections:
host    all         all         ::1/128               trust

10.データベースへの再々接続

再びサービス再起動して、Movable Typeから接続を試みたところ、成功しました。

データベースへの接続

11.参考サイト

参考サイトは以下です。ありがとうございました。

関連記事
zenback
人気エントリー
トラックバックURL


コメントする
greeting

*必須

*必須(非表示)


ご質問のコメントの回答については、内容あるいは多忙の場合、1週間以上かかる場合があります。また、すべてのご質問にはお答えできない可能性があります。予めご了承ください。

太字イタリックアンダーラインハイパーリンク引用
[サインインしない場合はここにCAPTCHAを表示します]

コメント投稿後にScript Errorや500エラーが表示された場合は、すぐに再送信せず、ブラウザの「戻る」ボタンで一旦エントリーのページに戻り(プレビュー画面で投稿した場合は、投稿内容をマウスコピーしてからエントリーのページに戻り)、ブラウザをリロードして投稿コメントが反映されていることを確認してください。

コメント欄に(X)HTMLタグやMTタグを記述される場合、「<」は「&lt;」、「>」は「&gt;」と入力してください。例えば「<$MTBlogURL$>」は「&lt;$MTBlogURL$&gt;」となります(全て半角文字)