pg_basebackupとWALストリーミングでPostgreSQLデータベースを高速にコピー
pg_dumpとpg_restoreを使用する
これは、PostgreSQLデータベースをコピーする最も一般的な方法です。pg_dumpはデータベースをダンプファイルにバックアップし、pg_restoreは別のサーバーでそのダンプファイルを復元します。
利点:
- シンプルで使いやすい
- すべてのデータベースオブジェクトをコピーできる
- 圧縮を使用して転送時間を短縮できる
- ダウンタイムが発生する
- 大規模なデータベースの場合、転送時間が長くなる
pg_basebackupは、データベースの物理的なコピーを作成します。これは、データベースが稼働している間に行うことができ、ダウンタイムが発生しません。
- 大規模なデータベースを高速にコピーできる
- 複雑な設定が必要
WALストリーミングは、PostgreSQL 9.6以降で利用可能な機能です。これは、データベースの変更をリアルタイムで別のサーバーに送信します。
- 常に最新の状態のデータベースコピーを維持できる
- 高度な知識が必要
他のツールを使用する
pg_dumpやpg_basebackup以外にも、PostgreSQLデータベースをコピーするためのツールがいくつかあります。これらのツールは、特定のニーズに対応するために設計されている場合があります。
例:
- pglogical: 論理的なデータベースコピーを作成する
- Bucardo: 複数のデータベースサーバー間でデータを同期する
最適な方法は、以下の要件に基づいて選択する必要があります。
- データベースのサイズ
- ネットワーク速度
- 必要なダウンタイム
- 技術的なスキル
一般的なガイドライン:
- 小さなデータベースの場合、pg_dumpとpg_restoreを使用するのが最も簡単です。
- 大規模なデータベースの場合、pg_basebackupまたはWALストリーミングを使用する必要があります。
pg_dumpとpg_restoreを使用する
# データベースをダンプする
pg_dump -Fc my_database > my_database.dump
# 別のサーバーでデータベースを復元する
pg_restore -d new_database my_database.dump
pg_basebackupを使用する
# ベースバックアップを作成する
pg_basebackup -D /tmp/my_database -P my_database
# 別のサーバーでデータベースを復元する
rsync -av /tmp/my_database/ /var/lib/postgresql/14/main/
# PostgreSQLを再起動する
systemctl restart postgresql
WALストリーミングを使用する
# 送信側のサーバーで設定する
wal_level = 'hot_standby'
max_wal_senders = 1
# 受信側のサーバーで設定する
recovery_target_timeline = 'latest'
primary_conninfo = 'host=送信側のサーバーのIPアドレス port=5432 user=postgres password=postgres'
# 受信側のサーバーでデータベースを復元する
pg_basebackup -D /tmp/my_database -P my_database -x
# PostgreSQLを再起動する
systemctl restart postgresql
PostgreSQLデータベースをコピーするその他の方法
pglogicalは、論理的なデータベースコピーを作成するツールです。論理的なコピーは、物理的なコピーとは異なり、テーブル構造とデータのみをコピーします。
- 異なるスキーマを持つデータベース間でデータをコピーできる
- 部分的なデータベースコピーを作成できる
Bucardoを使用する
Bucardoは、複数のデータベースサーバー間でデータを同期するツールです。Bucardoは、PostgreSQLのトリガーを使用して、データベースの変更をリアルタイムで送信します。
- 複数のデータベースサーバー間でデータを常に同期できる
- PostgreSQL 9.6以降でのみ利用可能
pg_copyを使用する
pg_copyは、テーブルデータを別のテーブルまたはファイルにコピーするツールです。
- 非常に高速
- 簡単に使える
- テーブル構造のみをコピーできる
- データベース全体をコピーできない
エクスポート/インポートを使用する
PostgreSQLは、CSVやJSONなどの形式でデータをエクスポート/インポートする機能を備えています。
- データベース全体または部分的なデータをコピーできる
クラウドサービスを使用する
Amazon RDSやGoogle Cloud SQLなどのクラウドサービスを使用している場合は、サービス提供のツールを使用してデータベースをコピーすることができます。
- 迅速かつ安全にコピーできる
- クラウドサービスに依存する必要がある
- 論理的なコピーが必要な場合は、pglogicalを使用する必要があります。
- 複数のデータベースサーバー間でデータを同期する必要がある場合は、Bucardoを使用する必要があります。
postgresql