技術を知る:PostgreSQLのバックアップとリカバリー

PostgreSQLインサイド

データベースには、お客様の重要なデータが保管されています。そのデータを守るため、データベースの障害に備えてデータベースの内容を定期的にバックアップしておくことが重要です。
ここでは、PostgreSQLデータベースとFUJITSU Software Enterprise Postgres(以降、Enterprise Postgresと略します)のバックアップとリカバリーについて解説します。バックアップの基礎からEnterprise Postgresを使用した場合のメリットまでを説明します。

1. PostgreSQLのバックアップ・リカバリーとは?

まずは、バックアップの基本から説明します。PostgreSQLデータベースのバックアップには、「論理バックアップ」と「物理バックアップ」があります。それぞれの違いは以下のとおりです。

  • 論理バックアップ

    データベースに格納されているデータをファイルに取り出すバックアップ方法です。例えばSQLの形で取り出すと処理時間は長くなりますが、別バージョンや別システムへの移行などができるため柔軟性に優れています。

  • 物理バックアップ

    データベースのファイルそのものを物理的にコピーするバックアップ方法です。ファイルのコピーなので処理時間が短く、ハードウェア障害からのリカバリーなどに利用されています。

図1:各バックアップ方法のイメージ

次に、それぞれのバックアップ方法について具体的に説明していきます。

1.1 論理バックアップ

論理バックアップは、PostgreSQLデータベースを起動した状態でデータベースのデータをファイルに取り出します。
論理バックアップを実施する方法として以下の3つがあります。

  • pg_dumpallコマンド

    データベースクラスタ全体の内容をSQLの形でバックアップします。取得したバックアップデータは、psqlコマンドを使ってバックアップを取得した時点へリカバリーします。

  • pg_dumpコマンド

    指定したデータベースの内容をSQLの形でバックアップします。スクリプト形式のバックアップデータは、psqlコマンドを使ってバックアップを取得した時点へリカバリーします。アーカイブファイル形式のバックアップデータは、pg_restoreコマンドを使ってバックアップを取得した時点へリカバリーします。

  • SQLコマンドのCOPY

    指定したテーブルのデータを独自のテキスト形式、バイナリー形式、またはCSV形式でバックアップします。取得したバックアップデータは、COPYを使ってバックアップを取得した時点へリカバリーします。

1.2 物理バックアップ

物理バックアップは、データベースのファイルをそのまま物理的にコピーします。
PostgreSQLデータベースを停止した状態でバックアップを取得する「オフラインバックアップ」と、起動した状態でバックアップを取得する「オンラインバックアップ」があります。

1.2.1 オフラインバックアップ

オフラインバックアップは、PostgreSQLデータベースを停止した状態で、OS付属のコマンドなどを使ってデータベースのファイルをすべてコピーすることで、データベースクラスタ全体をバックアップします。取得したバックアップデータは、OS付属のコマンドを使って戻し、その後PostgreSQLデータベースを起動することで、バックアップを取得した時点へリカバリーできます。

1.2.2 オンラインバックアップ

オンラインバックアップは、PostgreSQLデータベースを起動した状態でバックアップを取得します。
まず、起点となるデータのベースバックアップを取得します。ベースバックアップの取得中もデータは更新されていきますので、更新処理はトランザクションログ(以降、WALと略します)として保存されます。WALは必要に応じてアーカイブされ、アーカイブログとして保存されます。データベース破壊など何らかのトラブルが発生した場合は、ベースバックアップ+アーカイブログ+WALを使ってリカバリーします。

    • トランザクションログとは、トランザクションによるデータベースに対する更新履歴です。Write-Ahead Log(WAL)とも呼ばれます。

以下に、オンラインバックアップを取得したあと、トラブルが発生して最新状態にリカバリーするまでの流れを示します。

図2 : オンラインバックアップの流れ

アーカイブログとWALを利用したリカバリーでは、バックアップ時点へのリカバリー、最新時点へのリカバリーのほか、任意の時点へのリカバリーも可能です。
PostgreSQLが持つオンラインバックアップ機能は以下です。

  • 継続的アーカイブによるオンラインバックアップ

    データベースをバックアップモードにしたあと、OSの機能などでファイルをコピーし、コピー完了後にバックアップモードを終了する方法です。取得したバックアップデータは、ポイントインタイムリカバリーを使ってリカバリーします。復旧時点(リストアポイント)にはバックアップ時点、任意の時刻または任意の地点などが設定できます。

Enterprise Postgresでは、PostgreSQLが持つ機能に加えて、さらに以下のオンラインバックアップ機能が使用できます。

  • pgx_dmpallコマンド

    Enterprise Postgresが提供するコマンドです。継続的アーカイブによるオンラインバックアップをワンタッチで行うコマンドです。取得したバックアップデータは、pgx_rcvallコマンドまたはWebAdminでリカバリーします。復旧時点(リストアポイント)にはバックアップ時点、任意の時刻または任意の地点などが設定できます。

  • WebAdmin

    Enterprise Postgresが提供するGUIです。継続的アーカイブによるオンラインバックアップをワンタッチで行うGUIです。バックアップ取得時点と最新時点へリカバリーできます。

いずれの方法においてもデータベースクラスタ全体をバックアップします。

    • ポイントインタイムリカバリー(PITR)とは、バックアップの時点から障害発生までの間の任意の時間を指定して、その時間のデータの状態に復旧させる機能です。例えば、誤操作などにより更新されてしまったデータベースを、バックアップ実施完了の日時を指定してリカバリーできます。
    • Enterprise Postgresで提供しているコマンドです。pgx_dmpallコマンドでバックアップしたデータとアーカイブ済みWALを使用して、データベースをリカバリーします。

Enterprise Postgresにはこんな使い方も!
大量データの高速バックアップ

PostgreSQLには差分バックアップの機能がないため、オンラインバックアップにおけるベースバックアップのデータが大量だった場合はバックアップに時間がかかります。このような場合に、FUJITSU Storage ETERNUSなどのストレージ製品にある高速コピー機能を活用すると、大量データを高速にバックアップすることができます。
Enterprise Postgtresでは、pgx_dmpallコマンドの実行時に、ユーザーが作成したコピーコマンドを呼び出すことで、任意のバックアップ先へバックアップできます。詳細については、製品に添付されているマニュアル“FUJITSU Software Enterprise Postgres 運用ガイド”をご覧ください。

2. バックアップ方法の決め方は?

PostgreSQLデータベースのバックアップには色々な方法があることがおわかりいただけたと思います。
では、業務に合ったバックアップ方法はどのように選ぶのが良いのでしょうか?選択基準となる観点には、「障害発生時にどの時点まで復旧する必要があるか、バックアップするために稼動している業務サービスを止めることができるか、どのような事象に備えるか」などがあります。お使いのシステムの運用要件に合った最適なバックアップ方法を選択してください。
例えば、以下のような運用要件があった場合における最適なバックアップ方法の選択例を示します。

  1. お客様の誤操作によりテーブルのデータ消失などが発生した際に、そのテーブルだけをバックアップ時点にリカバリーしたい場合は
    • テーブル単位のバックアップなので、論理バックアップのpg_dumpコマンドを選択。
  2. 別サーバに新システムを構築し、旧システムの全データを移行して同じ業務を継続したい場合は
    • システム全体の移行なので、論理バックアップのpg_dumpallコマンドを選択。
  3. ディスクのハードウェア障害が発生した際に、障害が発生する直前の最新時点にリカバリーしたい場合は
    • 物理的な復旧は物理バックアップで対応。最新時点への復旧は継続的アーカイブによるオンラインバックアップ、pgx_dmpallコマンドまたはWebAdminを選択。
  4. データが論理的に破壊されてデータベースが正常に動作しない際に、破壊された時刻にリカバリーしたい場合は
    • データベース破壊の復旧は物理バックアップで対応。復旧時刻を指定したいので継続的アーカイブによるオンラインバックアップまたはpgx_dmpallコマンドを選択。

これらの要件に対応するバックアップ方法の選択例を以下に示します。図中の「独自機能」のバッジが付与された赤枠の機能がEnterprise Postgresの提供する独自機能です。

図3 : バックアップ方法の選択例

3. PostgreSQLのバックアップとリカバリーのまとめ

今まで説明してきたことをここでまとめます。バックアップとリカバリーには、PostgreSQLの機能とEnterprise Postgresの機能を合わせて7種類の方法があります。
以下に、各バックアップの方法と対象、リカバリー時の復旧時点について詳細を表にまとめます。
なお、表中記号の意味は以下のとおりです。
○:機能有り、-:機能無し、赤塗りのセル:Enterprise Postgresの機能

分類 概要 バックアップ方法 バックアップ対象 リカバリーの復旧時点(リストアポイント)
バックアップ 最新 任意
論理バックアップ データベース起動状態で、データを取り出して保存。定義・データ単位のバックアップも可能。 pg_dumpallコマンド データベースクラスタ
pg_dumpコマンド データベース
SQLコマンドのCOPY テーブル
物理バックアップ オフラインバックアップ データベース停止状態で、データベースのファイルを物理的にコピー。 OS付属コマンド データベースクラスタ
オンラインバックアップ データベース起動状態で、データベースのファイルを物理的にコピー。WALも使用。 継続的アーカイブによるオンラインバックアップ データベースクラスタ
WebAdmin データベースクラスタ
pgx_dmpallコマンド データベースクラスタ

データベースではシステムの運用管理要件にあった最適なバックアップ方法を選択して、業務データの保守運用を実施してください。

本コンテンツに関するお問い合わせ

お電話でのお問い合わせ

Webでのお問い合わせ

当社はセキュリティ保護の観点からSSL技術を使用しております。

ページの先頭へ