実稼働環境では、 PostgreSQLの大小に関係なく データベースはそうかもしれませんが、定期的なバックはデータベース管理の重要な側面です。この記事では、PostgreSQLデータベースをバックアップおよび復元する方法を学習します。
PostgreSQLデータベースシステムがすでに正常にインストールされていることを前提としています。そうでない場合は、次の記事を読んで PostgreSQLをインストールしてください Linuxディストリビューションで。
- Ubuntu20.04にPostgreSQLとpgAdmin4をインストールする方法
- CentOS8にPostgreSQLとpgAdminをインストールする方法
- RHEL8にPostgreSQLとpgAdminをインストールする方法
始めましょう…
単一の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を使用してダンプを復元できます 示されているように。
$ pgsql -f all_pg_dbs.sql postgres
PostgreSQLデータベースの復元
PostgreSQLを復元するには データベースでは、 psqlを使用できます またはpg_restore ユーティリティ。 psql pg_dumpによって作成されたテキストファイルを復元するために使用されます 一方、 pg_restore pg_dumpによって作成されたアーカイブからPostgreSQLデータベースを復元するために使用されます プレーンテキスト以外の形式(カスタム、tar、またはディレクトリ)のいずれか。
プレーンテキストファイルダンプを復元する方法の例を次に示します。
$ psql tecmintdb < tecmintdb.sql
上記のように、カスタム形式のダンプは pgsqlのスクリプトではありません 、したがって、 pg_restoreで復元する必要があります 示されているように。
$ pg_restore -d tecmintdb tecmintdb.dump OR $ pg_restore -d tecmintdb tecmintdb.tar OR $ pg_restore -d tecmintdb tecmintdumpdir
大規模なPostgreSQLデータベースのバックアップ
バックアップしているデータベースが大きく、かなり小さい出力ファイルを生成したい場合は、 pg_dumpの出力をフィルタリングする必要がある圧縮ダンプを実行できます。 gzipなどの圧縮ツールを介して またはお気に入りのいずれか:
$ pg_dump tecmintdb | gzip > tecmintdb.gz
データベースが非常に大きい場合は、 number_of_jobsをダンプすることで並行してダンプできます。 -j
を同時に使用するテーブル 示されているように、フラグ。
$ 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 ジョブは、サーバー上で実行するさまざまな種類のタスクをスケジュールするために一般的に使用される手段です。
PostgreSQLを自動化するようにcronジョブを構成できます データベースのバックアップは次のとおりです。 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のリファレンスページを参照してください。