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

作成日: 2013/10/25

Linuxサーバ管理

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

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

手順

データベースクラスタの物理バックアップ

(1) PostgreSQLインスタンスの停止

 物理バックアップはPostgreSQLインスタンスを停止した状態で 実行する必要がありますので、まずは停止します。

-bash-3.2$ pg_ctl stop -m fast
サーバ停止処理の完了を待っています....完了
サーバは停止しました

(2) データベースクラスタのディレクトリを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がインストールされたサーバにリストアを行います。

(1) データベースクラスタのディレクトリを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

(2) 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

プロフィール

らのっち

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

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

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