OSS Fan ~OSSでLinuxサーバ構築~

作成日: 2013/10/26
更新日: 2014/07/21

Linuxサーバ管理

PostgreSQLでデータベースクラスタの論理バックアップ取得

トップページLinuxサーバ管理 > 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

プロフィール

らのっち

損害保険会社のIT企画部に勤務するSEです。OSSを勉強中です。

<所属>
日本PostgreSQLユーザ会とくしまOSS普及協議会

■■■ 当サイトは Internet Explorer 11 と Mozilla Firefox 43 で動作確認済みです。 ■■■