俺のサーバは、PostgreSQLでデータを管理しているため、そのデータベース自体は大切な資産である。ふいの事故、あるいはクラッカーからの攻撃、ウィルスによる攻撃等でデータを失う悲劇に備えるためのリカバリ、さらにはアップデート時のリストアデータなどにバックアップは必要不可欠であると考える。以前、バージョン7にアップデートしてからデータのバックアップに都合がよいコマンドが追加されている。ここでは、この新しいコマンドを使ったデータのバックアップを含めPostgreSQLのバックアップについて掲載する。
1.バックアップの種類
PostgreSQLのバックアップを行う方法には、以下の2種類がある。
● コールドバックアップ
データベース一時停止させて、バックアップを行う方法である。
この方法は、別なマシンやデバイス(テープストリーマ、MO等)に複製が出来ることである。しかし、データベースを一時的に停止させなければいけないと言う欠点がある。
● ホットバックアップ
ホットバックアップは、冒頭に述べたPostgreSQLのバックアップコマンドを使用してデータベースを停止させることなくバックアップを行う方法である。しかし、この方法はPostgreSQLのデータベースの複製のみの機能である。
さらに、データベースを停止する必要はないが、バックアップ中はデータベースの書き込み、更新等は避けなければならない欠点はある。
2.バックアップの実際
2.1 コールドバックアップ
/usr/local/pgsql/dataのデータベースファイルのバックアップをDDS-3テープストリーマに行う。
★ バックアップ
# su – postgres
$ pg_ctl -w stop
$ su
# tar cvf /dev/nst0 /usr/local/pgsql/data
★ リストア
いったんテープから作業用のディレクトリ(例えば、/tmp)に展開して、そのファイルを/usr/local/pgsqlにコピーする。
# cd /tmp
# tar xvf /dev/nst0
# cp -apf data /usr/local/pgsql
2.2 ホットバックアップ
PostgreSQLのデータベース単体のバックアップ。/tmpディレクトリへdbbackup1と言うファイル名でバックアップする。
★ バックアップ
# su – postgres
$ pg_dump dbname > /tmp/dbbackup1
★ リストア
# su – postgres
$ psql -e dbname < /tmp/dbbackup1
PostgreSQLのデータベースのフルバックアップ。/tmpディレクトリへbackup.dataと言うファイル名でバックアップする。
★ バックアップ
# su – postgres
$ pg_dumpall -o > /tmp/backup.data
★ リストア
# su – postgres
$ psql -e template1 < /tmp/backup.data
3.定期的なバックアップ
俺の場合、CRONを使ってホットバックアップを定期的に行っている。FreeBSD4.2Rで行っている方法を紹介する。
まず、実行ファイルを作成する。ここでは、/etcディレクトリにbackup.cronと言うファイルで作成する。
# cd /etc
# vi backup.cron
#!/bin/sh
#
# PostgreSQL Backup Start
#
if [ -x /usr/local/pgsql/bin/pg_dump ]; then
su postgres -c “/usr/local/pgsql/bin/pg_dump dbname > /tmp/dbbackup1”
fi
exit 0
# chmod 0755 backup.cron ← 実行権を与える。
# vi crontab
省略
# PostgreSQL DB Backup One Monthly
30 4 1 * * root /etc/backup.cron > /dev/null
省略
# kill -HUP < cronのpid > ← クーロンデーモンにシグナルを与える。
説明 )
これは、backup.cronを毎月1日の午前4時30分に実行している。このようなシェルスクリプトを作り定期的なバックアップを行うと便利であろう。
以上
コメント