技術を知る:PostgreSQLのバックアップとリカバリー ~ 大量データの高速バックアップ ~
PostgreSQLインサイド

ここでは、PostgreSQLデータベースとFUJITSU Software Enterprise Postgres(以降、Enterprise Postgresと略します)における大量データの高速バックアップについて解説します。

はじめに. 大量データのバックアップにおける課題と解決策

PostgreSQLで大量のデータをバックアップする場合、全データのファイルコピーを行っているため、コピー処理に膨大な時間がかかります。
当社のEnterprise Postgresでは、この課題を解決するためにFUJITSU Storage ETERNUSなどのストレージ製品に搭載された差分コピー機能を活用することで、バックアップの高速化を実現しておりバックアップにかかる時間を短縮できます。
その効果は、例えばデータ量が数テラバイトの大規模データベースにおいてデータ更新量が全体の10%だった場合、更新部分である10%だけを差分バックアップすれば済むため、バックアップ時間が10分の1まで短縮されます(当社実測値)。

1. 高速バックアップの実現方法

高速バックアップは、Enterprise Postgresのpgx_dmpallコマンドから、コピーコマンドを呼び出すことで実現します。ここで呼び出すコピーコマンドは、ユーザーが作成するスクリプト形式のコマンドです。このスクリプト内に、ストレージ製品のコピーコマンドを実装することで高速なコピー処理が可能となります。
高速バックアップの対象は、データベースクラスタとテーブル空間です。「データベースクラスタとテーブル空間をすべて対象とする」、または、「データベースクラスタのみ対象とする」や「特定のテーブル空間のみ対象とする」というように、高速バックアップの対象を選択することができます。さらに、Enterprise Postgresの通常のバックアップでは、全データが1つのバックアップ領域(バックアップデータ格納先)にバックアップされますが、高速バックアップを利用すると、バックアップデータ格納先以外の任意のバックアップ領域にもバックアップできます。
以下は、データベースクラスタとテーブル空間を別々のバックアップ領域にバックアップする例です。テーブル空間には、通常のバックアップでは時間がかかるようなデータ量が多いテーブルを配置しておき、高速バックアップを使用して任意のバックアップ領域にバックアップします。
また、高速バックアップでバックアップした「データベースクラスタ」や「テーブル空間」は、Enterprise Postgresのpgx_rcvallコマンドから、リカバリー用のコピーコマンドを呼び出すことでリカバリーできます。

図中に登場する用語について補足します。

  • データ格納先、バックアップデータ格納先:Enterprise Postgresが使用する既定のディスクです。
  • 任意のバックアップ領域:利用者が準備するバックアップ先のディスクです。
  • バックアップ情報ファイル:「データベースクラスタやテーブル空間がどこにバックアップされているか」など最新のバックアップ情報を管理するためのファイルです。

2. ユーザーが作成するコピーコマンドの内容

高速バックアップを実現するためにユーザーが作成するコピーコマンドの内容を解説します。
コピーコマンドは、prepare、backup、finalize、restoreの4種類があります。prepare、backup、finalizeはバックアップ用のモード、restoreはリカバリー用のモードです。このモード毎に処理を記述します。以下の例では、バックアップ処理とリカバリー処理を1つのコピーコマンドに実装しています。
コマンド内に実装する処理は、ETERNUSのコピー機能である「QuickOPC(Quick One Point Copy)」などを使用して作成できます。また、Enterprise Postgresでは、QuickOPCを使用するためのサンプルスクリプトを提供しています。

コピーコマンド:copy_command.shの例

# Parameters
# $1: operation mode for backup or recovery
# (prepare,backup,finalize or restore)

case $1 in
prepare)
#バックアップの準備処理を実装します#
ここでは、最新のバックアップ先を取得し、次のバックアップ先を決定します。バックアップ中の障害に備えてバックアップ先を2つ準備し、それぞれを交替で利用する処理を実施します。

backup)
#バックアップの実処理を実装します#
ここでは、差分コピーを実行します。

finalize)
#バックアップの完了処理を実装します#
ここでは、バックアップの完了状態を確認します。

restore)
#リカバリー処理を実装します#
ここでは、バックアップ情報ファイルを読み込んで、リカバリー元となる最新のバックアップ情報を特定し、リカバリー処理を実施します。

esac

3. 実行方法

3.1 高速バックアップの実行方法

バックアップの準備

バックアップ運用を行う前に、以下の準備が必要です。

  1. 高速バックアップの対象を選定
    データベースクラスタとテーブル空間のうち、コピーコマンドによるバックアップの対象を決定します。
  2. 任意のバックアップ領域を準備
    バックアップする領域を準備します。
  3. コピーコマンドを作成
    バックアップ用 / リカバリー用のコピーコマンドを作成します。

バックアップの実行

pgx_dmpallコマンドのオプションに、作成したコピーコマンドの格納先パス名やコピーコマンドのバックアップ対象を指定して、コマンドを実行します。高速バックアップの対象には、以下が指定できます。

  • データベースクラスタとすべてのテーブル空間(デフォルト)
  • データベースクラスタと一部のテーブル空間
  • すべてのテーブル空間
  • 一部のテーブル空間

【例】コピーコマンドをcopy_command.shとし、すべてのテーブル空間を高速バックアップの対象とした(--exclude-copy-clusterを指定)場合

$ pgx_dmpall -D /database/inst1 -Y '/database/command/copy_command.sh' --exclude-copy-cluster

3.2 リカバリーの実行方法

リカバリーの実行

pgx_rcvallコマンドのオプションに、リカバリー用コピーコマンドの格納先パス名を指定して、コマンドを実行します。pgx_rcvallコマンドでは、リカバリーの対象を自動認識するため、コマンド実行時の指定は不要です。

【例】コピーコマンドをcopy_command.shとした場合

$ pgx_rcvall -D /database/inst1 -B /backup/inst1 -Y '/database/command/copy_command.sh'

参考

高速バックアップの詳細については、製品添付の以下マニュアルを参照してください。

  • “FUJITSU Software Enterprise Postgres 運用ガイド”の“コピーコマンドを使用したバックアップ / リカバリー”
  • “FUJITSU Software Enterprise Postgres リファレンス”の“pgx_dmpall”、"pgx_rcvall"

このようにEnterprise Postgresとストレージ製品と組み合わせることで、大量データのバックアップを高速化できるため、効率的なデータベースの保守運用が実現できます。

2018年11月30日公開

オンデマンド(動画)セミナー

    • PostgreSQLに関連するセミナー動画を公開中。いつでもセミナーをご覧いただけます。
      • 【事例解説】運送業務改革をもたらす次世代の運送業界向けDXプラットフォームの構築
      • ハイブリッドクラウドに最適なOSSベースのデータベースご紹介

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

お電話でのお問い合わせ

Webでのお問い合わせ

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

ページの先頭へ