Saminnet-Search Article Wiki Forum Piwigo SNS Cloud vtiger Sugar
Postgres Backup 3

Postgres Backup 3

 
 
 
   
 
 
   
[root@linux ~]# mkdir -p /work/backup/pgsql 
[root@linux ~]# chown postgres:postgres /work/backup/pgsql 
[root@linux ~]# chmod 755 /work/backup/pgsql 
 
   
 
 
   
[root@linux ~]# su - postgres 
-bash-3.1$ vi pgsql-backup.sh 

#!/bin/sh

# 日付文字列
DATE=`date "+%Y%m%d"`
# パスの設定
PATH=/usr/local/sbin:/usr/bin:/bin
# バックアップDB
DB_NAME=testdb
# バックアップ先ディレクトリ
BKUP_DIR=/work/backup/pgsql

# testdbデータベースバックアップ
pg_dump -D DB_NAME > $BKUP_DIR/$DB_NAME_$DATE


-bash-3.1$ chmod 700 pgsql-backup.sh 
 
   
 
 
   
-bash-3.1$ crontab -e 
# 毎日 00:00 に自動実行します。
00 00 * * * /var/lib/pgsql/pgsql-backup.sh > /dev/null 2>&1
 
 
 
 
   
ここでは、testdb データベースをリストアします。
※ testdb データベースは上の方法で既にバックアップが取られているものとします。
 
   
[root@linux ~]# psql testdb < /work/backup/pgsql/testdb_20060725 
 
   
リストアを実行する前に、対象のデータベースはもちろん、ダンプされたデータベース内のオブジェクトを所有するユーザーや、そのオブジェクト上に権限を与えられたユーザーも存在していなければなりません。
 
 
 
 
   
上記で説明した手法では、データベースクラスタ全体をバックアップする際に扱いにくく不適切です。この理由で、pg_dumpall が提供されています。pg_dumpall は指定されたクラスタの各データベースのバックアップを行い、そして、ユーザーやグループなどのクラスタ全体にわたるデータを保持します。
このコマンドの基本的な使用法は
pg_dumpall > outfile
です。ダンプの結果は psql でリストアできます。
psql template1 < infile
リストア時に任意の既存データベース名を指定可能ですが、空のクラスタ内にリストアする場合は、template1 が唯一の選択肢です。なお、リストア時には、PostgreSQL 管理ユーザー ( postgres ) での実行が必要です。

ということで、これらを踏まえ、先に作成した pgsql-backup.sh を変更し、1週間に一度 pg_dumpall を実行するようにします。

 
   
-bash-3.1$ vi pgsql-backup.sh 
#!/bin/sh

# 日付文字列
DATE=`date "+%Y%m%d"`
# 曜日
WEEK=`date "+%w"`
# パスの設定
PATH=/usr/local/sbin:/usr/bin:/bin
# バックアップDB
DB_NAME=testdb
# バックアップ先ディレクトリ
BKUP_DIR=/work/backup/pgsql

# 日曜日 ( date "+%w" が "0" ) だったら、データベースクラスタ全体バックアップ
if [ "$WEEK" = "0" ]; then
    # データベースクラスタ全体バックアップ
    pg_dumpall > $BKUP_DIR/all_$DATE
else
    # testdbデータベースバックアップ
    pg_dump -D DB_NAME > $BKUP_DIR/$DB_NAME_$DATE
fi

Add comment


Articles by Date

Category Database

TweetTweet Share on LinkedInShare on LinkedIn Share on Google+Google+ Submit to RedditReddit Publish on WordPress WordPress Send emailSend email