pg_rmanを使ってPostgreSQLを別サーバーにバックアップ
PostgreSQLのバックアップに便利な方法はないものかと、試しにpg_rmanをコンパイル、インストール、設定したときのメモ。環境はCentOS5
pg_rmanはPostgreSQLのデータを簡単なコマンドでバックアップ・リストアできるツール。ダウンロードはGoogle Codeのプロジェクトページから。
インストールの方法は公式のwikiにもあるし、ここのサイトも分かりやすい。
以下自分でやったコマンドのメモ。pg_configにパスが通ってないとダメらしいので、パスの追記から。
# vi ./.bashrc
PATH=/usr/local/pgsql/bin:$PATH
export PATH
# source ./.bashrc
もしくはPostgreSQLがインストールされた場所に書き込み権限があればいいので、postgresをownerにする。
# chown postgres. -R /usr/local/pgsql
# su postgres
コンパイルしてインストール。
# tar xzvf pg_rman-1.1.2.tar.gz
# cd pg_rman
# make USE_PGXS=1
# make USE_PGXS=1 install
環境変数を設定
# su postgres
$ cd
$ vi ./.bashrc
export PGDATA=/usr/local/pgsql/data
export BACKUP_PATH=/mnt/backup/pgsql
$ source ./.bashrc
環境変数が設定できたかどうか確認
$ echo $BACKUP_PATH
pg_rmanを初期化
$ pg_rman init -B $BACKUP_PATH
WARNING: ARCLOG_PATH is not set because archive_command is empty
INFO: SRVLOG_PATH is set to '/usr/local/pgsql/data/pg_log'
archive_mode=offだとWARNINGが出るみたい。postgresql.confを編集。pg_logディレクトリも作ってログの設定もする。
$ mkdir /usr/local/pgsql/data/pg_log
$ vi /usr/local/pgsql/data/postgresql.conf
archive_mode = on
archive_command = 'cp %p /usr/local/pgsql/data/pg_archive/%f'log_destination = 'stderr'
logging_collector = on
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'
log_truncate_on_rotation = off
log_rotation_age = 1d
log_rotation_size = 10MB
再起動してもう一度やってみる。
$ exit
# /etc/rc.d/init.d/postgresql restart
# su postgres
$ pg_rman init -B $BACKUP_PATH
INFO: ARCLOG_PATH is set to '/usr/local/pgsql/data/pg_archive'
INFO: SRVLOG_PATH is set to '/usr/local/pgsql/data/pg_log'
試しに全体バックアップをとってみる。
$ pg_rman backup --backup-mode=full --with-serverlog
INFO: database backup start
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
検証
$ pg_rman validate
INFO: validate: 2010-11-26 13:22:35
バックアップ一覧表示
$ pg_rman show
大丈夫みたい。
次にcronで定期実行するためにpg_rman設定ファイルにオプションを追記
$ vi /mnt/backup/pgsql/pg_rmain.ini
ARCLOG_PATH='/usr/local/pgsql/data/pg_archive'
SRVLOG_PATH='/usr/local/pgsql/data/pg_log'BACKUP_MODE = F
COMPRESS_DATA = YES
KEEP_ARCLOG_FILES = 10
KEEP_ARCLOG_DAYS = 10
KEEP_DATA_GENERATIONS = 3
KEEP_DATA_DAYS = 120
KEEP_SRVLOG_FILES = 10
KEEP_SRVLOG_DAYS = 10
cronの設定
$ exit
# vi /etc/cron.d/postgresql
MAILTO=""
0 4 * * * postgres source /home/postgres/.bashrc; /usr/local/pgsql/bin/pg_rman backup; /usr/local/pgsql/bin/pg_rman validate
4:00にpostgresの環境変数を読み込んでバックアップ+検証を実行する。cronのログは/var/log/cronに出力される。
その他、ネットワーク上の別サーバーにバックアップを取りたい場合はNFSを使ってマウントするのが簡単。前の記事を参考に。
<関連記事>