pg_rmanを使ったPostgreSQLのバックアップ

いざということにデータベースのバックアップがあるかどうかで、その後のショックが全然違ってきます。
今回はPostgreSQLを使っている場合のオンラインバックアップをpg_rmanを使って行う方法を書きます。

動作環境

OSUbuntu18.04
PostgreSQL version10

インストール

参考

pg_rman latest releasegithub.com

上記サイトから、環境やPostgreSQLのバージョンに合わせたファイルをダウンロードします。
今回の私の条件だと、[pg_rman-1.3.6-pg10.tar.gz]をダウンロードしました。

wget ファイルのURL
tar -xzvf ダウンロードしたファイル
cd 解凍後のファイル

ここでMakefileを利用してインストールします。

make USE_PGXS=1
make USE_PGXS=1 install
MEMO
おそらくここで多くの不足ライブラリがありエラーを吐かれます。
私が今回インストールしたライブラリ書いておきます。(これが無駄のないインストールなのかはわかりません)

apt install libpq-dev postgresql-server-dev-10 postgresql-libs libselinux1-dev bc libpam-dev libedit-dev libssl1.0-dev libkrb5-dev 

以上の動作が済むと、/usr/lib/postgresql/10/bin/pg_rmanがインストールされると思います。
必要であれば、/usr/local/binにでも追加してください。

インストールは以上になります。

使用準備

pg_rmanを利用するには、最初に初期化作業が必要になります。

初期化

ここでコマンドを実行する前にデータベースやバックアップのパスを指定する必要があります。

1.

/etc/postgresql/10/main/postgresql.conf

archive_mode = on
wal_level = archive
archive_command = '/bin/cp %p /back/up/path/%f'

以上の3項目が書かれていることを確認してください。

2.

パスについては以下のように環境変数として保存します。
(環境変数にしなくてもいいのですが、パスの使用頻度が多くなるので環境変数にすることをおすすめします。また今後もずっと使うので、.bashrc等に書いておくのが楽です。)

export $BACKUP_PATH='バックアップする先のパス'
export $PGDATA='データベースのクラスタファイル</path/to/main>'

3.

ここまで設定後。以下のコマンドを実行します。

pg_rman init -B $BACKUP_PATH -D $PGDATA

ARCLOG_PATHとSRVLOG_PATHについての記述が出力されれば成功です。

そうすると、$BACKUP_PATH/pg_rman.iniというファイルが生成されます。
これは設定ファイルになります。ここに以下のようなファイルの生存時間などを記述することも可能です。

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

コマンド

おそらく、postgresユーザでなければデータベースのコピー等ができないと思いますのでユーザを変更します。

su - postgres

バックアップ

フルバックアップを取る際のコマンドです。

pg_rman backup --backup-mode=full
--backup-mode=には以下のような種類があります。
(--backup-mode= は -b としても動きます)

--backup-mode=full フルバックアップ
--backup-mode=incremental 差分バックアップ
--backup-mode=archive アーカイブWALのバックアップ

検証

バックアップが正常かどうかをチェックするコマンドです。
どうやらリストア時にこのコマンドを行っていないデータベースは使えないようなので、バックアップとセットで行う必要あるみたいです。

pg_rman validate

バックアップの確認

これまでにバックアップした記録を確認できます。

pg_rman show
Status表示
OK : バックアップが完了し、検証済みです。
DONE : バックアップは完了しましたが、まだ検証していません。
RUNNING : バックアップ中です。
DELETING : 削除処理中です。
DELETED : 削除済みです。
ERROR : バックアップ中にエラーが発生したため利用できません。
CORRUPT : バックアップが破損しているため利用できません。
引用元:ユーザマニュアル

リストア

最新の状態に戻す際は以下のようなコマンドになります。

pg_rman restore

また、タイムラインで一定の時間までの復元をすることも可能です。

pg_rman restore --recovery-target-time "2018-06-03 18:38:00"

PIRTのためのrecovery.confは復元されたデータベースに自動生成されます。
あとは、recovery.confをもとにpostgreSQLを起動してください。

参考になるサイト

参考

pg-rman wikisourceforge.net

参考

pg_rmanhttp://ossc-db.github.io/

参考

pg_rmanによるPostgreSQLの簡単バックアップ&リカバリqiita.com

コメントを残す