Linuxサーバ奮戦記 --- PostgreSQL 8.3.x---   Mod.14Mar2009   >>TOP


PostgreSQL 8.3.x インストール

ソースの入手先: http://www.postgresql.jp/
マニュアル: PostgreSQL
現時点(08Feb2008)で postgresql-8.3.0.tar.gz である。

# tar zxvf postgresql-8.3.0.tar.gz
# cd postgresql-8.3.0
# ./configure
# gmake
# gmake install
# useradd postgres
# mkdir /usr/local/pgsql/data
# chown postgres:postgres /usr/local/pgsql/data
# su - postgres
$ vi ~/.bashrc

以下の様に緑字部分を追加
# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi

# User specific aliases and functions
export PATH=$PATH:/usr/local/pgsql/bin
export PGLIB=/usr/local/pgsql/lib
export LD_LIBRARY_PATH=/usr/local/pgsql/lib


~
~

書込み後,設定ファイルを有効にする。
$ source ~/.bashrc

データベースの初期化
$ initdb -D /usr/local/pgsql/data --locale=ja_JP.EUC_JP

サーバの起動
$ pg_ctl -D /usr/local/pgsql/data -l logfile start


デーモンとして起動する方法
# cd /usr/local/src/postgresql-8.3.0/contrib/start-scripts
# cp linux /etc/rc.d/init.d/postgresql
# chmod 755 /etc/rc.d/init.d/postgresql
# chkconfig postgresql on


以下の様にユーザを設定すればとりあえず,URLでアクセスできるようになる。
$ createuser -d nobody

メモ:
Apache2 の httpd.conf の User,Groupに合わせる。
(Apache2.2.x からは daemon になっているが,以前のバージョンから引き続き運用していることもあり nobody にしている)

--- httpd.conf ---
・・・・・
User nobody
Group nobody
・・・・・

PHP5のインストールには以下のように config し直す。
./configure --with-apxs2=/usr/local/apache2/bin/apxs --enable-zend-multibyte --enable-mbstring --enable-mbregex --with-pgsql=/usr/local/pgsql


データベースのバックアップ(データベース毎にバックアップする方法)

sampledb が登録されているとすると,これをバップアップするには以下の様にする。
例:sampledbをsampledb.bkとしてバップアップする。
# su - postgres
$ pg_dump sampledb > sampledb.bk
上記の場合のバックアップファイルはテキストで簡単に中身が見れてしまう。そこで,暗号化してバップアップする方法は以下の様にすることで可能となる。シェルで組んで実行する方法。

backupdb.sh
#!/bin/sh

PGDUMP='/usr/local/pgsql/bin/pg_dump'
OPENSSL='openssl enc -e -aes256 -in'
PASSD='file:./.passwd'
RM='rm -f'

$PGDUMP sampledb > ./tmp/sampledb.bk
$OPENSSL ./tmp/sampledb.bk -out ./sampledb.cipher -pass $PASSD

$RM ./tmp/*.bk
作業用ディレクトリ tmp,パスワードファイル .passwd として準備
$  mkdir tmp
chmod 700 tmp
$  vi .passwd

test   (一行目にパスワードを設定,ここでは test)

chmod 400 .passwd
$  chmod 755 backupdb.sh
 ./backupdb.sh とコマンドを実行すれば暗号化されたバックアップファイルが生成される。


データベースのリストア(データベース毎にリストアする方法)
データベースが残っている場合うまくいかない可能性があるので,一度削除してから入れ直す。
# su - postgres
$ dropdb sampledb
$ createdb sampledb
$ psql sampledb < sampledb.bk

上記で暗号化されたバックアップファイルからリストアするには以下のファイルを作り実行( ./restoredb.sh )すればよい。
restoredb.sh
#!/bin/sh

DROPDB='/usr/local/pgsql/bin/dropdb'
CREATEDB='/usr/local/pgsql/bin/createdb'
OPENSSL='openssl enc -d -aes256 -in'
PSQL='/usr/local/pgsql/bin/psql'
PSQLLIST='/usr/local/pgsql/bin/psql -l'
RM='rm -f'
PASSWD='-pass file:./.passwd'

if ($PSQLLIST -n sampledb)
then
$DROPDB sampledb
fi

$CREATEDB sampledb
$OPENSSL ./sampledb.cipher -out ./tmp/sampledb.bk $PASSWD
$PSQL sampledb < ./tmp/sampledb.bk

$RM ./tmp/*.bk

$  chmod 755 restoredb.sh
 ./restoredb.sh とコマンドを実行すればデータベースが復元される。


定期的に自動バックアップ(crontabを利用する)
例:6時間毎に sampledb をユーザディレクトリ user1 に出力する。
まずは,crontab の設定に以下のコマンド入力。
# crontab -u postgres -e

入力モード(i)で以下の内容を入力。ESC後Shift+ZZで書込み終了。
MAILTO=""
0 */6 * * * /usr/local/pgsql/bin/pg_dump sampledb > /home/user1/sampledb.bk
以上で設定が完了,自動バックアップが開始される。
または,暗号化してバックアップするには下記の様にすればよいのかな。
MAILTO=""
0 */6 * * * /home/postgres/backupdb.sh


PostgreSQL 8.3.x バージョンアップ(i.e.  8.3.3 => 8.3.5)

マイナーバージョンアップでは,現在稼動しているPostgreSQLのサービスを止める。
ソースを解凍して,インストールし起動する。
# /etc/rc.d/init.d/postgresql stop
Stopping PostgreSQL: server stopped
ok

# tar zxvf postgresql-8.3.5.tar.gz
# cd postgresql-8.3.5
# ./configure
# gmake
# gmake install

# /etc/rc.d/init.d/postgresql start