いざということにデータベースのバックアップがあるかどうかで、その後のショックが全然違ってきます。
今回はPostgreSQLを使っている場合のオンラインバックアップをpg_rmanを使って行う方法を書きます。
動作環境
| OS | Ubuntu18.04 |
| PostgreSQL version | 10 |
インストール
参考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おそらくここで多くの不足ライブラリがありエラーを吐かれます。
私が今回インストールしたライブラリ書いておきます。(これが無駄のないインストールなのかはわかりません)
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 $PGDATAARCLOG_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 showOK : バックアップが完了し、検証済みです。
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を起動してください。