PostgreSQL9.2に20Tbのデータベースがあり、バックアップを効率的に作成する方法がわかりません。それは毎日少しずつ成長するデータベースであり、毎月1日に約200 Gb成長します。
Pg_dumpを実行することを考えていましたが、毎月実行するのに時間がかかりすぎて、一度実行することを考えてから、新しいテーブルまたは変更されたテーブルだけをコピーでバックアップしますが、データベースの使用を停止することはできません。最初のダンプを作成するために、バックアップにどのデータが含まれているか正確にはわかりません。
データベースの使用を停止せずに増分バックアップを実行するにはどうすればよいですか?
バックアップについては、 PostgreSQLマニュアル で詳しく説明されています。
継続的なバックアップを実現するには、 先行書き込みログ をアーカイブします。推奨される設定は次のとおりです。
archive_mode = on
wal_level = hot_standby
archive_command = '/usr/bin/rsync --archive --ignore-existing "%p" "/backup-dest/%p"'
# Ensures that a log file is written at least once every 30 minutes even if little
# activity has occurred
archive_timeout = 30min
ベースラインに対してpg_dump
を実行する代わりに、 pg_basebackup
を実行できます。これにより、データベースをフリーズする必要がなくなります。ただし、 archive_mode
をまだオンにしていない場合は、データベースを再起動してその設定を変更する必要があります。
AWSを使用してPostgres dbをホストしている場合は、Herokuによって作成されたツールを使用して、EC2からS3へのバックアップを作成できます Wal-E
個人的には、増分バックアップソリューションについては知りませんが、あなたが求めていることを達成する2つの方法を考えることができます。
barman を見ると、pg_basebackupが実行され(誤っていない場合)、WALレコードがbarmanサーバーにストリーミングされます。これには、毎月1日だけでなく、常にサーバーマンを実行するサーバーが必要になるという欠点があります。ただし、特定の日時に基づいてデータベースを作成できるという利点があります。
私が考えることができる他の解決策は、スナップショットファイルシステムを使用してみることです。私はZFSの経験しかありませんが、BTRFSも機能するはずです。次に、毎月1日に、データベースをホストするファイルシステムの増分スナップショットを作成し、問題が発生した場合に復元することができます。ただし、すでに実行中のデータベースがある場合、この理由で起動する読み取り専用レプリカでデータベースを使用しない限り、これは問題になります。