いざということにデータベースのバックアップがあるかどうかで、その後のショックが全然違ってきます。
今回は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 $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
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を起動してください。
コメントを残す