PostgreSQL データベースをバックアップおよび復元する方法
運用環境では、PostgreSQL データベースの大小に関係なく、定期的なバックアップはデータベース管理の重要な側面です。この記事では、PostgreSQL データベースをバックアップおよび復元する方法を学習します。
PostgreSQL データベース システムがすでに動作するようにインストールされていることを前提としています。そうでない場合は、次の記事を読んで Linux ディストリビューションにPostgreSQL をインストールしてください。
始めましょう…
単一の PostgreSQL データベースをバックアップする
PostgreSQL は、データベースのバックアップに役立つ pg_dump ユーティリティを提供します。 SQL コマンドを含むデータベース ファイルを、将来簡単に復元できる形式で生成します。
PostgreSQL データベースをバックアップするには、まずデータベース サーバーにログインし、Postgres ユーザー アカウントに切り替えて、次のように pg_dump を実行します。 (tecmintdb
をバックアップするデータベースの名前に置き換えます)。デフォルトでは、出力形式はプレーンテキストの SQL スクリプト ファイルです。
pg_dump tecmintdb > tecmintdb.sql
pg_dump は他の出力形式もサポートしています。 -F
オプションを使用して出力形式を指定できます。c
はカスタム形式のアーカイブ ファイルを意味し、d
はディレクトリ形式のアーカイブを意味し、 >t
は tar 形式のアーカイブ ファイルを意味します。すべての形式が pg_restore への入力に適しています。
例えば:
pg_dump -F c tecmintdb > tecmintdb.dump
OR
pg_dump -F t tecmintdb > tecmintdb.tar
ディレクトリ出力形式で出力をダンプするには、-f
フラグ (出力ファイルの指定に使用されます) を使用して、ファイルの代わりにターゲット ディレクトリを指定します。 pg_dump によって作成されるディレクトリは存在してはいけません。
pg_dump -F d tecmintdb -f tecmintdumpdir
すべてのPostgreSQLデータベースをバックアップするには、示されているようにpg_dumpallツールを使用します。
pg_dumpall > all_pg_dbs.sql
図に示すように、psql を使用してダンプを復元できます。
psql -f all_pg_dbs.sql postgres
PostgreSQL データベースの復元
PostgreSQL データベースを復元するには、psql または pg_restore ユーティリティを使用できます。 psql は、pg_dump によって作成されたテキスト ファイルを復元するために使用されます。一方、pg_restore は、pg_dump< によって作成されたアーカイブから PostgreSQL データベースを復元するために使用されます。 非プレーンテキスト形式 (カスタム、tar、またはディレクトリ) のいずれかで。
次に、プレーン テキスト ファイル ダンプを復元する方法の例を示します。
psql tecmintdb < tecmintdb.sql
上で述べたように、カスタム形式のダンプはpsql のスクリプトではないため、示されているようにpg_restore を使用して復元する必要があります。
pg_restore -d tecmintdb tecmintdb.dump
OR
pg_restore -d tecmintdb tecmintdb.tar
OR
pg_restore -d tecmintdb tecmintdumpdir
圧縮されたPostgreSQLデータベースのバックアップ
バックアップしているデータベースが大きく、かなり小さい出力ファイルを生成したい場合は、gzip などの圧縮ツールを使用して pg_dump の出力をフィルタリングする必要がある圧縮ダンプを実行できます。またはあなたのお気に入り:
pg_dump tecmintdb | gzip > tecmintdb.gz
データベースが非常に大きい場合は、図に示すように -j
フラグを使用して number_of_jobs 個のテーブルを同時にダンプすることで、並列ダンプできます。
pg_dump -F d -j 5 -f tecmintdumpdir
並列ダンプ オプションを使用すると、ダンプの時間が短縮されますが、その一方で、データベース サーバーの負荷も増加することに注意することが重要です。
リモート PostgreSQL データベースのバックアップ
pg_dump は通常の PostgreSQL クライアント ツールで、リモート データベース サーバーでの操作をサポートします。 pg_dump が接続するリモート データベース サーバーを指定するには、コマンドライン オプション -h
を使用してリモート ホストを指定し、-p
でリモート ホストを指定します。データベースサーバーがリッスンしているポート。さらに、 -U
フラグを使用して、接続するデータベース ロール名を指定します。
10.10.20.10 と 5432 と tecmintdb を、それぞれリモート ホストの IP アドレスまたはホスト名、データベース ポート、データベース名に置き換えてください。
pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql
リモート接続しているユーザーがデータベースにアクセスするために必要な権限を持っていること、および適切なデータベース認証方法がデータベース サーバーで構成されていることを確認してください。そうでない場合は、次のスクリーンショットに示すようなエラーが発生します。
また、示されているように pg_dump ユーティリティと psql ユーティリティを使用して、あるサーバーから別のサーバーにデータベースを直接ダンプすることもできます。
pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb
Cron ジョブを使用した PostgreSQL データベースの自動バックアップ
cron ジョブを使用して、定期的にバックアップを実行できます。 Cron ジョブは、サーバー上で実行するさまざまな種類のタスクをスケジュールするために一般的に使用される手段です。
次のように cron ジョブを設定してPostgreSQL データベースのバックアップを自動化できます。 PostgreSQL スーパーユーザーとして次のコマンドを実行する必要があることに注意してください。
mkdir -p /srv/backups/databases
次に、次のコマンドを実行して crontab を編集し、新しい cron ジョブを追加します。
crontab -e
次の行をコピーして、crontab の最後に貼り付けます。上で説明したダンプ形式のいずれかを使用できます。
0 0 * * * pg_dump -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql
ファイルを保存して終了します。
cron サービスは、再起動しなくても、この新しいジョブの実行を自動的に開始します。この cron ジョブは毎日深夜に実行され、バックアップ タスクに対する最小限のソリューションとなります。
cron ジョブをスケジュールする方法の詳細については、「Linux で Cron ジョブを作成および管理する方法」を参照してください。
今のところはここまでです!データのバックアップをデータベース管理ルーチンの一部にすることをお勧めします。ご質問やご意見がございましたら、以下のフィードバック フォームをご利用ください。詳細については、pg_dump および pg_restore のリファレンス ページを参照してください。