PostgreSQLでデータベースクラスタの論理バックアップ取得
目次
概要
PostgreSQLでデータベースクラスタ全体の論理バックアップを取得します。 物理バックアップの場合はPostgreSQLインスタンスを停止してLinuxの cp や tar コマンドで バックアップしますが、論理バックアップはPostgreSQLインスタンスが起動した状態で PostgreSQLのコマンドを使用してバックアップを実行します。 バックアップされたデータの中身はデータベースクラスタやデータベースなどを 構成するためのSQL文の羅列です。 ただのテキストファイルなので vi などのエディタやビューアで内容を確認することができます。
構成
サーバ構成
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インスタンスが起動している状態で スーパーユーザ(postgres)で実行します。 バックアップファイル名は /bkup/20131026_pg_dumpall_pgdata1.sql とします。
pg_hba.conf の設定やPostgreSQLインスタンスへの接続方法によっては、 途中で複数回パスワードの入力を求められることがあります。
-bash-3.2$ cd /bkup/
-bash-3.2$ ls -l
合計 5752
-rw-r--r-- 1 postgres postgres 5876017 10月 24 23:52 pgdata1.tar.gz
-bash-3.2$ pg_dumpall -f 20131026_pg_dumpall_pgdata1.sql
-bash-3.2$ ls -l
合計 5756
-rw-r--r-- 1 postgres postgres 3709 10月 26 11:57 20131026_pg_dumpall_pgdata1.sql ←作成されたバックアップ
-rw-r--r-- 1 postgres postgres 5876017 10月 24 23:52 pgdata1.tar.gz
pg_dumpall コマンドで出力先のファイルを指定しない場合(-f オプションを指定しない場合) 実行結果は全て標準出力(画面)に表示されます。 これをリダイレクトしてファイルに出力した場合も -f オプションを指定した場合と 同じファイルが作成されます。 試しにそれぞれの結果を diff で比較した場合、差分はありませんでした。
-bash-3.2$ pg_dumpall > 20131026_pg_dumpall_pgdata1_2.sql -bash-3.2$ ls -l 合計 5760 -rw-r--r-- 1 postgres postgres 3709 10月 26 11:57 20131026_pg_dumpall_pgdata1.sql -rw-r--r-- 1 postgres postgres 3709 10月 26 14:03 20131026_pg_dumpall_pgdata1_2.sql ←作成されたバックアップ -rw-r--r-- 1 postgres postgres 5876017 10月 24 23:52 pgdata1.tar.gz -bash-3.2$ diff 20131026_pg_dumpall_pgdata1.dmp 20131026_pg_dumpall_pgdata1_2.sql -bash-3.2$ ←ファイルの差分なし
データベースクラスタの論理リストア
pg_dumpall コマンドでバックアップしたデータを使ってリストアします。 pg_dumpall でバックアップしたデータはデータベースクラスタを構成するためのSQL文なので、 psql でSQLを実行することでリストアします。 バックアップの時と同様にPostgreSQLインスタンスが起動した状態で実行します。 スーパーユーザの postgres ユーザで実行してください。
-bash-3.2$ cd /bkup/
-bash-3.2$ psql -f ./20131026_pg_dumpall_pgdata1.sql
データベース "postgres" に接続しました。.
SET
SET
SET
(中略)
REVOKE
GRANT
GRANT