PostgreSQLでデータベースクラスタの物理バックアップ取得
目次
概要
PostgreSQLでデータベースクラスタ全体の物理バックアップを取得します。 物理バックアップはPostgreSQLインスタンスを停止した状態で実行します。 物理バックアップしたデータは異なるバージョンのPostgreSQLや異なるDBMSに対して リストアすることはできないのでご注意ください。
構成
サーバ構成
OSバージョン
Red Hat Enterprise Linux 5.9 x86_64
パッケージ一覧
postgresql90-9.0.8-1PGDG.rhel6.x86_64.rpm
postgresql90-libs-9.0.8-1PGDG.rhel6.x86_64.rpm
postgresql90-server-9.0.8-1PGDG.rhel6.x86_64.rpm
手順
データベースクラスタの物理バックアップ
PostgreSQLインスタンスの停止
物理バックアップはPostgreSQLインスタンスを停止した状態で 実行する必要がありますので、まずは停止します。
-bash-3.2$ pg_ctl stop -m fast サーバ停止処理の完了を待っています....完了 サーバは停止しました
データベースクラスタのディレクトリをtarでバックアップ
環境変数の $PGDATA を表示し、データベースクラスタのパスを確認します。 tar コマンドで /data/pgdata1 ディレクトリをアーカイブします。 アーカイブファイルは /bkup ディレクトリに格納します。
-bash-3.2$ echo $PGDATA
/data/pgdata1
-bash-3.2$ cd /data/
-bash-3.2$ tar zcvf /bkup/pgdata1.tar.gz ./pgdata1
./pgdata1/
./pgdata1/postmaster.opts
./pgdata1/pg_hba.conf
./pgdata1/pg_notify/
./pgdata1/pg_notify/0000
(中略)
./pgdata1/pg_multixact/members/0000
./pgdata1/pg_multixact/offsets/
./pgdata1/pg_multixact/offsets/0000
./pgdata1/pg_clog/
./pgdata1/pg_clog/0000
-bash-3.2$ ls -l /bkup/
合計 5756
-rw-r--r-- 1 postgres postgres 5876017 10月 24 23:52 pgdata1.tar.gz
以上でバックアップ終了です。PostgreSQLインスタンスを起動しても大丈夫です。
データベースクラスタの物理リストア
物理バックアップしたデータベースクラスタをリストアします。 データは全て復旧されますが、PostgreSQLのプログラム自体は含まれませんので、 PostgreSQLがインストールされたサーバにリストアを行います。
データベースクラスタのディレクトリをtarでリストア
環境変数の $PGDATA を表示し、データベースクラスタのディレクトリを確認します。 リストア対象のバックアップファイルは /bkup/pgdata1.tar.gz ファイルです。
-bash-3.2$ echo $PGDATA
/data/pgdata1
-bash-3.2$ ls -l /bkup/
合計 5756
-rw-r--r-- 1 postgres postgres 5876017 10月 24 23:52 pgdata1.tar.gz
-bash-3.2$ cd /data/
-bash-3.2$ tar zxvf /bkup/pgdata1.tar.gz
./pgdata1/
./pgdata1/postmaster.opts
./pgdata1/pg_hba.conf
./pgdata1/pg_notify/
./pgdata1/pg_notify/0000
(中略)
./pgdata1/pg_multixact/members/0000
./pgdata1/pg_multixact/offsets/
./pgdata1/pg_multixact/offsets/0000
./pgdata1/pg_clog/
./pgdata1/pg_clog/0000
-bash-3.2$ ls -l /data/
合計 12
drwx------ 13 postgres postgres 4096 10月 24 23:50 pgdata1
PostgreSQLインスタンスの起動
物理リストアが終わったらPostgreSQLインスタンスが起動するか確認します。
-bash-3.2$ pg_ctl start -w サーバの起動完了を待っています....完了 サーバ起動完了 -bash-3.2$ ps -ef | grep postgres avahi 3178 1 0 Oct24 ? 00:00:00 avahi-daemon: running [postgresql.local] root 3295 3264 0 Oct24 pts/0 00:00:00 su - postgres postgres 3296 3295 0 Oct24 pts/0 00:00:00 -bash postgres 4119 1 1 00:01 pts/0 00:00:00 /usr/pgsql-9.0/bin/postgres postgres 4120 4119 0 00:01 ? 00:00:00 postgres: logger process postgres 4122 4119 0 00:01 ? 00:00:00 postgres: writer process postgres 4123 4119 0 00:01 ? 00:00:00 postgres: wal writer process postgres 4124 4119 0 00:01 ? 00:00:00 postgres: autovacuum launcher process postgres 4125 4119 0 00:01 ? 00:00:00 postgres: archiver process postgres 4126 4119 0 00:01 ? 00:00:00 postgres: stats collector process postgres 4128 3296 0 00:01 pts/0 00:00:00 ps -ef postgres 4129 3296 0 00:01 pts/0 00:00:00 grep postgres