PostgreSQLのバックアップは3種類
- コールドバックアップ
- ホットバックアップ
- オンラインバックアップとポイントインタイムリカバリ(PITR)
コールドバックアップ
特徴
- 物理バックアップとも言われる
$PG_DATA
のファイルをまるまるコピーする方法
メリット
- 方法がシンプルなので、手順もシンプル
- ホットバックアップより、バックアップもリストアも高速
デメリット
- DBの停止が必要
- 全DBのバックアップしかできない
- バックアップしたところまでしか、リストアできない
手順
rsync を利用する(特にPostgreSQL由来のコマンドは使用しない)
- それぞれ、PostgreSQLを停止してから行うこと
バックアップ
$BACKUP
は、バックアップファイル格納PATH
$ async -av $PGDATA/ $BACKUP/pgdata
リストア
$ rm -rf $PGDATA $ async -av $BACKUP/pgdata $PGDATA/
ホットバックアップ
特徴
- 論理バックアップとも言われる
- 現状のDBをSQLに変換して保存する
メリット
- DBを停止せずにバックアップが可能
- DBやテーブル単位のバックアップが可能
- コマンド1つで実行可能なため手順がシンプル
デメリット
- コールドバックアップより、バックアップもリストアも時間がかかる
- バックアップしたところまでしか、リストアできない
手順
pg_dump
コマンドを実行する
pg_dump
コマンドは以下の形式でdumpが可能- プレーンテキスト(SQL)
- カスタムアーカイブ(圧縮したバイナリ)
- ディレクトリ(テーブル単位で圧縮したバイナリ)
- TAR形式(テーブル単位のバイナリ)
- カスタムアーカイブが、サイズが小さいけど、いざとなったらSQLに変換もできるのでオススメ
バックアップ
リモートからもバックアップ可能
- オプション
-Fc
はカスタムアーカイブ形式の指定
$ pg_dump -Fc ${database_name} -U ${user_name} -h ${host_name} -f $BACKUP/dump.custom
リストア
$ pg_restore -d ${database_name} $BACKUP/dump.custom
オンラインバックアップとポイントインタイムリカバリ(PITR)
特徴
- バックアップデータと、元DBのWALを使用してリカバリを行う
- PITRとは、オンラインバックアップから現在までの任意の時間の状態でリカバリできる仕組み(すごい!
メリット
- オンラインバックアップ開始〜最新状態の任意の時刻の状態に復旧可能
デメリット
- 手順/運用が複雑(サードパーティツールである程度緩和可能)
- WALアーカイブが必要
- その分CPUリソースも、ストレージも食う
- 元DBのWALアーカイブと、WALが必要
- WALは必要が無くなると、別の情報に上書きされてしまう
- そのため、不要になったWALをアーカイブ領域に保存する必要がある → それがWALアーカイブ
手順
ポイント
- ベースバックアップと、マスタにあるWALアーカイブの組み合わせで復旧を行う
手順
(PostgreSQLを停止した状態で実施する)
- WALアーカイブを保存するように設定
- ベースバックアップの実行
- ベースバックアップからの復旧
- recovery.conf の設定(PITRの設定)
WALアーカイブを保存するように設定
postgresql.conf
に以下の設定をする
wal_level = archive archive_mode = on archive_command = 'test ! -f /usr/local/pgsql/backup/%f && cp %p /usr/local/pgsql/backup/%f'
wal_level
: WALの保存レベル。以下の3種類があるminial
: クラッシュまたは即時停止から回復するのに必要な情報のみ書き出す(デフォルト)replica
: WALアーカイブに対応。ストリーミングレプリケーションに必要な情報も追加- 9.6の時に、
archive
とhot_standby
という別々の設定が統一された
- 9.6の時に、
logical
: ロジカルレプリケーションをサポートするのに必要な情報も追加
archive_mode
: WALアーカイブを許可する設定。デフォルトOFFon
にすると、アーカイブプロセスが立ち上がるようになる
archive_command
: WALを破棄する時に実行されるコマンド%p
はバックアップすべきWALのパス。%f
はWALファイル名- 自前でコマンドを用意する必要があるんだ...
ベースバックアップの実行
$ pg_basebackup -D $BACKUP -F t -x -z
-F
: ファイルフォーマットの指定。t
はtar形式の保存。デフォルトはp
でプレーンテキストで保存される-z
: 出力ファイルをzip圧縮する-x
: ベースバックアップ作成中、出力ファイルの更新を止める(メモリを食うので注意
ベースバックアップからの復旧
既存のデータからWALだけ避難
$ mv $PGDATA/pg_wal/ $BACKUP_WAL
既存のデータは不要なので移動
$ mv $PGDATA/pg_wal/ ${適当なバックアップ先}
ベースバックアップからの復旧
(tar.gz を解凍してから)
$ cp $BACKUP/pgdata/* $PGDATA
WALを最新のものに変更
(ベースバックアップのWALは古いので消す)
$ rm -rf $PGDATA/pg_wal/ $ cp $BACKUP_WAL $PGDATA/pg_wal
recovery.conf の設定
restore_command = 'cp /usr/local/pgsql/backup/%f %p' recovery_target_time = '2018/12/01 00:47:00'
restore_command
:archive_command
と逆に、WALアーカイブからcopyするコマンドを設定recovery_target_time
: PITRしたい場合、その時刻を設定する- PITRが不要な場合はこの行は不要
参考
www.slideshare.net
- 作者: 中野暁人,山本浩平,大和田純,曽根壮大,ZOZOTOWNリプレースチーム,権守健嗣,茨木暢仁,松井菜穂子,新多真琴,laiso,豊田啓介,藤原俊一郎,牧大輔,向井咲人,大島一将,上川慶,末永恭正,久保田祐史,星北斗,池田拓司,竹馬光太郎,粕谷大輔,WEB+DB PRESS編集部
- 出版社/メーカー: 技術評論社
- 発売日: 2018/12/22
- メディア: 単行本
- この商品を含むブログを見る