OSS-DB Silverを受けて得た知見のうち、オンライン論理バックアップの用途と使うについてまとめます。
出典はこちら!
「オンライン論理」バックアップって何?
PostgreSQLのバックアップは大きく
- オフラインでの物理バックアップ
- オンラインでの物理バックアップ
- オンラインでの論理バックアップ
に分かれます。
リカバリ要件により使うべきバックアップが異なっており、
- 「定期バックアップ時に戻せれば良い」かつ「サービス停止可」->「オフラインでの物理バックアップ」
- 「定期バックアップ時に戻せれば良い」かつ「サービス停止不可」->「オンラインでの論理バックアップ」
- 「問題発生の直前まで戻す必要がある」場合 -> 「オンラインでの物理バックアップ」※サービス停止不要
となっています。
世の中、「サービス停止OK!」というWebサービスは少なく、「可能ならサービス止めたくないんだけど...」というサービスが多いと思うので、今回はまず「オンライン論理バックアップ」に焦点を当ててまとめたいと思います。
(オンライン物理バックアップはすこしややこしくなるため、別記事に譲ります。。)
参照すべき公式ドキュメントとしてはこれ。
バックアップコマンド
pg_dump
- バックアップ形式に「テキスト」「カスタム」「tar」「ディレクトリ」が選定可能(-Fオプション)
- テキスト以外はバイナリファイルで人には読めない
- ファイル名の指定が可能(-fオプション)
- データベースやスキーマ、テーブル単位のバックアップが可能
- データベースクラスタ全体に絡むデータ(ユーザ/ロール等)はバックアップ不可。したい場合は後述のdumallを使う。
restoreしたい場合はテキストの場合はpsql
、それ以外の形式の場合はpg_restore
コマンドを使います。
pg_dumpall
- バックアップ形式は「テキスト」のみ
- データベースクラスタ全体のバックアップが可能。
**※pg_dumpall、pg_dumpともに、postgresql.confやpg_hba.confといった設定ファイルは論理バックアップされない。これをバックアップしたい場合は論理バックアップが必要。
リストアコマンド
psql
実行例
psql -f db001.bak newdb // pgsql -f {ファイル名} {db名}
pg_restore
pg_restore -d db002 db002.bak // pg_restore -d {db名} ファイル名
それいがいのばあいは「pg_restore -d db002 db002.bak」
↓の記事を見ていると、リストア先のDBは先に作っておくのが良さげ。
リストア(psql、pg_restor)の方法【PostgreSQL】 | PostgresWeb - ポスグレウェブ
最後に
次はオンライン物理バックアップについてまとめようと思います!