概要
Greenplumデータベース環境では、大規模データの効率的な保護のために、専用のバックアップツールが提供されています。本記事では、並列処理に特化したgpbackup/gprestoreと、PostgreSQL互換のpg_dump/pg_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/gprestore | pg_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とディレクトリ形式を組み合わせ、ストレージコストを最適化