HIRO Tracks

ソフトウェアエンジニアが日々学んだ知識を発信します。

【PostgreSQL】サーバ停止不要なバックアップ方式と利用コマンドまとめ【pg_dump,pg_dumpall】

これはなに?

OSS-DB Silverを受けて得た知見のうち、オンライン論理バックアップの用途と使うについてまとめます。

「オンライン論理」バックアップって何?

PostgreSQLのバックアップは大きく

  • オフラインでの物理バックアップ
  • オンラインでの物理バックアップ
  • オンラインでの論理バックアップ

に分かれます。

リカバリ要件により使うべきバックアップが異なっており、

  • 「定期バックアップ時に戻せれば良い」かつ「サービス停止可」->「オフラインでの物理バックアップ」
  • 「定期バックアップ時に戻せれば良い」かつ「サービス停止不可」->「オンラインでの論理バックアップ」
  • 「問題発生の直前まで戻す必要がある」場合 -> 「オンラインでの物理バックアップ」※サービス停止不要

となっています。

世の中、「サービス停止OK!」というWebサービスは少なく、「可能ならサービス止めたくないんだけど...」というサービスが多いと思うので、今回はまず「オンライン論理バックアップ」に焦点を当ててまとめたいと思います。

(オンライン物理バックアップはすこしややこしくなるため、別記事に譲ります。。)

www.postgresql.jp

参照すべき公式ドキュメントとしてはこれ。

バックアップコマンド

pg_dump

www.postgresql.jp

  • バックアップ形式に「テキスト」「カスタム」「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 - ポスグレウェブ

最後に

次はオンライン物理バックアップについてまとめようと思います!