Greenplumデータベースのバックアップ戦略:gpbackup/gprestoreとpg_dumpの詳細比較

概要

Greenplumデータベース環境では、大規模データの効率的な保護のために、専用のバックアップツールが提供されています。本記事では、並列処理に特化したgpbackupgprestoreと、PostgreSQL互換のpg_dumppg_restoreの機能差異、使用シナリオ、実践的な運用手法について解説します。

gpbackup/gprestoreによる並列バックアップアーキテクチャ

gpbackupはGreenplumクラスタ全体を効率的にバックアップするためのネイティブツールです。マスターノードではデータベースオブジェクトのメタデータ(DDL)を収集し、各セグメントノードではCOPY ... ON SEGMENTコマンドを用いて圧縮CSV形式でデータを並列出力します。

バックアップファイル構成

  • メタデータファイル: マスターに格納され、テーブル定義、インデックス、権限などを含む
  • データファイル: 各セグメントの<seg_dir>/backups/YYYYMMDD/YYYYMMDDhhmmss/に配置される圧縮CSV
  • 統計情報: --with-statsオプションでクエリプラナ統計を含めることが可能

デフォルトではパーティションテーブル全体を1ファイルで処理しますが、--leaf-partition-dataを指定するとリーフパーティションごとに個別ファイルを生成し、より細粒度のバックアップ選択が可能になります。

gpbackup実行パラメータリファレンス

gpbackup --dbname=対象データベース名 [追加オプション]

必須パラメータ:
--dbname DB_NAME          バックアップ対象のデータベース名を指定

主要なオプションパラメータ:
--backup-dir PATH         バックアップファイルの出力先を絶対パスで指定
                          省略時はマスター:$MASTER_DATA_DIRECTORY/backups/、
                          セグメント:<seg_dir>/backups/に自動作成
--compression-level 1-9   gzip圧縮レベル指定(デフォルト:1)
--data-only              データのみをバックアップ(DDLは含まない)
--metadata-only          DDLのみをバックアップ(データは含まない)
--no-compression         CSV圧縮を無効化

フィルタリングオプション:
--include-schema SCHEMA  特定スキーマのみを含める(複数回指定可)
--exclude-schema SCHEMA  特定スキーマを除外(複数回指定可)
--include-table FILE     バックアップ対象テーブルをファイルで指定(1行1テーブル)
--exclude-table FILE     バックアップ除外テーブルをファイルで指定

高度な機能:
--incremental            増分バックアップを作成(直前のバックアップからの差分)
--from-timestamp TS      増分バックアップの起点となるタイムスタンプを指定
--jobs NUM               並列バックアッププロセス数(1-最大接続数)
--leaf-partition-data    パーティションテーブルのリーフごとに個別ファイル作成
--single-data-file       セグメントごとに1つの統合データファイルを生成
--plugin-config YAML     外部ストレージプラグイン設定ファイルを指定
--with-stats             クエリ統計情報をバックアップに含める

実行完了時の終了コード

  • 0: バックアップが正常に完了
  • 1: 重大なエラーなしで完了(警告ありの可能性)
  • 2: 重大なエラーにより失敗

pg_dump/pg_restoreによる互換性重視のバックアップ

pg_dumpはPostgreSQL互換の標準ツールで、Greenplum環境でも利用可能です。単一プロセスでのシリアルバックアップのため、大規模データセットには不向きですが、異なるデータベースシステム間での移行や、異なるセグメント構成への移行時に有効です。

主要なダンプフォーマット

  • プレインフォーマット(-Fp): 人間が読めるSQLスクリプト
  • カスタムフォーマット(-Fc): 圧縮済みアーカイブ、pg_restoreで選択的リストア可能
  • ディレクトリフォーマット(-Fd): 並列ダンプ/リストア対応、圧縮済み
  • tarフォーマット(-Ft): 圧縮非対応だがポータビリティに優れる

Greenplum固有の注意事項

Greenplum固有の配布キー情報を保持するには、--gp-syntaxオプションを必ず使用してください。これによりCREATE TABLE文にDISTRIBUTED BY句が含まれ、正しいデータ分散が保証されます。

# Greenplum構文を含めてバックアップ
pg_dump --gp-syntax -Fc sample_db > gp_compatible_backup.dump

# ディレクトリ形式で並列ダンプ(マスター上でのみ並列)
pg_dump -Fd -j 4 -f /backup/dumpdir sample_db

pg_dumpコマンドラインオプション詳細

基本構文:
pg_dump [接続オプション] [ダンプオプション] [データベース名]

データ選択オプション:
-a, --data-only                データのみ出力(スキーマ定義は除外)
-s, --schema-only              スキーマ定義のみ出力(データは除外)
-t PATTERN, --table=PATTERN    特定テーブルのみ対象(ワイルドカード可)
-T PATTERN, --exclude-table=PATTERN  特定テーブルを除外
-n PATTERN, --schema=PATTERN   特定スキーマのみ対象
-N PATTERN, --exclude-schema=PATTERN 特定スキーマを除外

出力制御オプション:
-f FILE, --file=FILE           出力先ファイル指定
-F c|d|t|p, --format=custom|directory|tar|plain  出力フォーマット選択
-j NUM, --jobs=NUM             ディレクトリ形式での並列ダンププロセス数
-Z 0-9, --compress=0-9         圧縮レベル指定(0は無圧縮)

Greenplum拡張:
--gp-syntax                    配布ポリシー情報を含める
--no-gp-syntax                 配布ポリシー情報を除外

互換性オプション:
--quote-all-identifiers        全ての識別子をクォート(バージョン差異対策)
--no-synchronized-snapshots    Greenplum 6.0未満での並列ダンプ時に必要

接続パラメータ

-h HOST, --host=HOST           マスターホスト名(デフォルト:localhost)
-p PORT, --port=PORT           接続ポート(デフォルト:5432)
-U USER, --username=USER       接続ユーザ名
-W, --password                 パスワードプロンプトを強制
-w, --no-password              パスワードプロンプトを抑制
-d DBNAME, --dbname=DBNAME     対象データベース名

実践的な運用例

シナリオ1: 大規模データウェアハウスの日次バックアップ

# 全データベースの完全バックアップ(圧縮レベル最高、統計情報含む)
gpbackup --dbname=analytics_db --compression-level=9 --with-stats \
         --backup-dir=/data/backup/full

# 翌日の増分バックアップ
gpbackup --dbname=analytics_db --incremental \
         --backup-dir=/data/backup/incremental

シナリオ2: 開発環境への特定スキーマ移行

# 本番環境から開発環境へ販売データのみ抽出
pg_dump -h prod-master -U admin -n sales_schema --gp-syntax \
        -Fc analytics_db > sales_schema.dump

# 開発環境へリストア
pg_restore -h dev-master -U dev_user -d dev_db sales_schema.dump

シナリオ3: 巨大テーブルのパーティション単位バックアップ

# 2023年分の売上パーティションのみバックアップ
gpbackup --dbname=sales_db --leaf-partition-data \
         --include-table=sales.sales_2023_*

# リストア時は親テーブル構造と共に特定パーティションのみ復元可能
gprestore --backup-dir=/data/backup --timestamp=20231101120000 \
          --include-table=sales.sales_2023_q4

性能と運用のトレードオフ

評価項目gpbackup/gprestorepg_dump/pg_restore
並列処理セグメントノード間でデータを並列出力(高スループット)マスターノード上でのみ並列(制限あり)
実行速度大規模データ向けに最適化(TB単位でも実用可能)中小規模データ向け(数百GBまで)
互換性Greenplum固有機能完全対応異種DB間移行に適している
増分バックアップ組み込み対応(タイムスタンプベース)独自実装が必要
リソース消費セグメント全体のリソースを使用主にマスターのリソースのみ

推奨運用ガイドライン

  • 本番環境の定期バックアップ: gpbackupを使用し、--jobsで並列度を調整。バックアップディレクトリはNFSマウントまたは専用ストレージプラグイン経由で確保
  • DRサイトへのレプリケーション: --single-data-fileオプションで転送効率を向上
  • バージョンアップ作業: pg_dumpの--gp-syntax--quote-all-identifiersを併用して、新旧環境間の互換性を確保
  • 開発/テスト環境のクローン作成: 本番から特定スキーマのみpg_dumpで抽出し、統計情報はANALYZEで再作成
  • 長期アーカイブ: 圧縮レベル9とディレクトリ形式を組み合わせ、ストレージコストを最適化

タグ: Greenplum gpbackup gprestore pg_dump pg_restore

5月19日 01:47 投稿