Loading...

We've detected that your browser language is Chinese. Would you like to visit our Chinese website? [ Dismiss ]
By: Dylan

PostgreSQLのバックアップ・リストアが重要な理由

PostgreSQLは人気のオープンソースオブジェクトリレーショナルデータベース管理システム(RDBMS)です。PostgreSQLを活用する企業にとって、堅牢なバックアップ施策は、人為的ミス、システム障害、ランサムウェア攻撃からデータを守り、コンプライアンスを順守するために不可欠です。

  • 人為的ミス:誤操作によるデータ削除。WHERE句を記述しないDELETE文、記述ミスのあるDROP TABLEコマンド1つで、長年蓄積したデータが瞬時に消去される可能性があります。
  • ハードウェア・システム障害:高性能なSSDでも故障する可能性があり、クラウドリージョンが停止するケースも存在します。別拠点にバックアップを保管していなければ、ハードウェア障害と共にデータが失われます。
  • ランサムウェア・サイバー攻撃:データベースはハッカーの主要な標的です。悪意のある攻撃者にデータを暗号化された場合、オフサイトバックアップが身代金を支払わずに復旧する唯一の手段となる場合が多いです。
  • コンプライアンス要件:GDPR、HIPAA、SOC2などの法令では、検証可能なデータ保管・復旧手順の整備が義務付けられることが一般的です。

本ガイドでは、PostgreSQLのバックアップとリストアに活用できる信頼性の高い6つの手法を解説します。コマンドライン、pgAdmin 4のGUI、簡易ダンプ、Cronによる自動実行、企業向けバックアップソリューションi2Backupを紹介します。

手法1 コマンドラインによるPostgreSQLバックアップ

コマンドライン(CLI)はPostgreSQLバックアップの代表的な手法です。バックアップ作成には標準ツールのpg_dump、データ復旧にはpsqlまたはpg_restoreを使用します。この手法は特定テーブルのみのバックアップに対応し、スクリプトに記述して定期実行することが可能です。ただし、ポイントインタイムリカバリには対応していません。

詳細な手順は下記の通りです。

手順1. PostgreSQLのbinフォルダに移動します。既定のパスは C:\Program Files\PostgreSQL\16\ となります。

手順2. binフォルダを右クリックし、「ターミナルで開く」を選択します。

手順3. 単一データベースの標準バックアップを作成する場合は、下記構文を使用します。

pg_dump -U [ユーザー名] -W -F t [データベース名] > c:\[バックアップ保存先]

pgdump Backup postgreSQL

手順4. パスワード入力を求められるので、パスワードを入力しEnterキーを押下します。バックアップ完了後、保存先フォルダにファイルが作成されているか確認します。

補足

1. PostgreSQL全体をバックアップする場合は./pg_dumpall、スキーマのみをバックアップする場合も./pg_dumpallを使用します。

2. Docker環境でPostgreSQLをバックアップする手順:

  • docker ps コマンドでコンテナ名を確認
  • 下記コマンドを実行しDocker経由でダンプを実行
    docker exec -t コンテナ名 pg_dump -U ユーザー名 DB名 > backup.sql
  • ローカルフォルダにbackup.sqlファイルが出力されることを確認

3. AWS S3へPostgreSQLをバックアップする場合はAWS CLIを設定します。

  • aws configure を実行し、アクセスキーIDとシークレットアクセスキーを登録
  • 使用するAWSリージョンを指定し、標準出力形式をjsonに設定
  • IAMユーザーにS3:PutObject権限を付与
  • 保存先としてS3を指定

PostgreSQLのリストアには下記スクリプトを利用します。

1. テキスト形式(.sql)ファイルのリストア

psql -U [ユーザー名] -d [リストア先DB名] < [バックアップファイル].sql

2. カスタム圧縮形式(.dump)ファイルのリストア

-Fcオプションでバックアップを作成した場合に使用します。

pg_restore -U [ユーザー名] -d [リストア先DB名] [バックアップファイル].dump

手法2 pgAdmin 4(GUI)によるPostgreSQLバックアップ

pgAdmin 4は視覚的にバックアップを実行できる強力なGUIツールです。単発のバックアップ、初心者、対象オブジェクトを画面上で選択したい開発者に適しています。一方、自動化の設定が難しく、超大規模データベースの処理速度は低速になります。

手順は下記の通りです。

手順1. pgAdminを起動し、サーバーツリーを展開し、バックアップ対象のデータベースを選択します。

手順2. データベース名を右クリックし、「Backup…」を選択します。

手順3. 各種設定を構成します。

  • Filename:フォルダアイコンをクリックし保存先を指定し、ファイル名を設定(例:my_db_backup.dump)
  • 形式:圧縮率と柔軟なリストアに優れるCustom(推奨)、または可読なSQLスクリプトであるPlainを選択

手順4. オプションタブにて、完全バックアップが不要な場合は「データのみ」または「スキーマのみ」を選択可能です。

手順5. Backupをクリックし実行します。右下のプロセス画面から進捗を確認できます。 Backup postgreSQL pgadmin4

pgAdmin4からのリストア手順は以下の通りです。

手順1. 空のリストア先データベースを新規作成

手順2. 対象データベースを右クリックし「Restore…」を選択

手順3. ファイルを指定

  • 形式:バックアップ時と同一形式(CustomまたはTar)を選択
  • Filename:.dumpまたは.sqlファイルを参照し選択

手順4. オプションタブにおいて、既存オブジェクトを削除してから再作成する場合は「リストア前にクリーン」を有効にします。

手順5. 「Restore」をクリック。処理完了後に通知が表示されます。

補足:pgAdminでPlain形式を選択すると標準SQLファイルが作成されます。このファイルをリストアする際はクエリツールで実行するかpsqlコマンドを使用してください。pgAdminのRestore画面は主にCustom・Tar形式向けに設計されています。

手法4 DBeaverによる簡易ダンプ

DBeaverはほとんどすべてのデータベースエンジンに対応する汎用ツールとして開発者に人気があります。「簡易ダンプ」のための洗練されたUIを備えていますが、内部の処理にはローカルにインストールされたPostgreSQLツールを利用します。

DBeaverは直感的な画面を備え、簡易なデータ出力に適しています。ただし定期的な保護運用には不向きで、Java製のため動作が重いという特徴があります。

事前準備:バックアップを実行する前に、DBeaverにPostgreSQLツール(pg_dump)のパスを登録する必要があります。
データベースナビゲーター内の接続先を右クリックし「接続の編集」を選択
接続設定>ローカルクライアントへ移動
参照をクリックしPostgreSQLのbinフォルダを指定(Windows:C:\Program Files\PostgreSQL\15\bin、Linux:/usr/bin)
ローカルにPostgreSQLをインストールしていない場合、DBeaverがネイティブクライアントのバイナリをダウンロードするよう提案する場合があります。

事前設定完了後、下記手順を実施します。

手順1. データベース名を右クリックし「ツール」→「Backup」を選択

手順2. バックアップ対象のスキーマまたはテーブルを選択

手順3. 出力形式を選択(PlainまたはCustom)

  • Plain:可読性の高いSQLスクリプトに適します
  • Custom:圧縮された業務利用向けバックアップに適します

手順4. 保存先(ローカルディスクまたは外部ドライブ)を指定し「開始」をクリック

backup postgresql dbeaver

手法5 PostgreSQLの自動バックアップ(Cronジョブ)

単発作業であれば手動バックアップでも問題ありませんが、本番データベースには自動実行が不可欠です。Linux・macOS環境で定期バックアップを実行する代表的な手段がCronジョブです。ただしCronに慣れていない場合、運用の難易度が高くなります。

パート1 パスワードの取り扱い

Cronジョブはバックグラウンドで実行されるため、実行中に手動でパスワードを入力できません。運用で利用可能な2つの方法は下記です。

  • .pgpassファイル:ホームディレクトリに .pgpass ファイルを作成し「ホスト名:ポート:DB名:ユーザー名:パスワード」の形式で記述。
    chmod 600 ~/.pgpass でアクセス権を設定し、自身のみ参照可能にする
  • 環境変数を利用:スクリプト内で直接PGPASSWORDを定義(シンプルな環境向け)

パート2 スクリプトと実行設定

crontabに長いコマンドを直接記載するより、bashスクリプト(backup_db.sh)を作成する方法が推奨されます。ファイル名への日時付与、古いバックアップ自動削除などの機能を追加しやすくなります。

#!/bin/bash
# 設定項目
DB_NAME="my_database"
BACKUP_DIR="/home/user/backups"
DATE=$(date +%Y-%m-%d_%H-%M)

# 圧縮形式でバックアップ作成
export PGPASSWORD='自身のパスワード'
pg_dump -U postgres -d $DB_NAME | gzip > $BACKUP_DIR/db_backup_$DATE.sql.gz

# オプション:30日以上古いバックアップを自動削除し容量を節約
find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +30 -delete
重要:スクリプト保存後、chmod +x backup_db.sh を実行し実行権限を付与してください。

パート3 Cronジョブの登録

Crontabに実行スケジュールを定義します。

手順1. エディタ起動:crontab -e

手順2. ファイル下部にスケジュール行を追加。例:毎日午前2時に実行する場合

00 02 * * * /home/user/scripts/backup_db.sh >> /home/user/logs/backup.log 2>&1

Cronスケジュール解説

  • 00 02:2時00分に実行
  • * * *:毎日、毎月、曜日を問わず実行
  • >> … 2>&1:実行ログ・エラーをファイルに出力。トラブル調査に不可欠です。

手法6 i2Backup:企業向け自動運用バックアップソリューション

単純な小規模プロジェクトではスクリプトやオープンソースGUIでも対応可能ですが、膨大なデータを扱い、稼働要件の厳しい企業環境には、人手による運用を抑えた堅牢なソリューションが必要となります。

データ損失や手動設定ミスを許容できない組織には、Info2softのi2Backupが最適です。重要なPostgreSQLデータベースの定期バックアップを簡単に構築でき、ローカルディスク、外付けストレージ、ZFS、NAS、重複排除ストレージ、AWS S3など複数の保存先に対応しています。

PostgreSQL向けi2Backupの主な特長

  • 一元管理:物理サーバー、仮想環境、クラウド上に分散する数百台のPostgreSQLインスタンスのバックアップを単一コンソールから管理可能
  • 自動ワークフロー:スケジュールに基づき自動でバックアップを実行し、人為的ミスを低減
  • 増分バックアップ:毎回DB全体を出力せず、変更箇所のみ取得。バックアップ時間とストレージ容量を大幅削減
  • 重複排除機能:バックアップ保存ルールを設定し、古い世代を自動削除しストレージを最適化
  • スケーラブルなバックアップ基盤:単一のローカルインスタンスから数千台のPostgreSQLノードまで、環境の拡大に追随可能
  • ポイントインタイムリカバリ(PITR):データ破損や誤削除が発生する直前の任意の時点までデータを巻き戻し可能

比較:i2Backupと手動運用方式

機能項目 手動スクリプト(Cron/CLI) i2Backup(企業向け)
環境構築 サーバーごとに手間のかかる設定が必要 ポリシーベースで迅速に導入可能
データ転送 フルダンプのみの運用が中心 真の増分バックアップに対応
監視 ログを手動で確認 自動アラート・レポート機能搭載
拡張性 規模が大きくなると管理が困難 増加するインフラに対応可能

i2BackupによるPostgreSQLバックアップ手順

手順1. i2Backupの60日間無料トライアルを申し込み、Info2soft技術者と連携し環境へ導入します。

60日間無料トライアル

手順2. 管理画面にて「バックアップ&リストア」>「アプリ保護」>「バックアップルール」を開き「新規」をクリック。

New Task i2Backup

手順3. 基本設定画面にタスク名称を入力し、ルール種別に「PostgreSQL」を選択。必要項目を設定し「次へ」をクリック。

Basic Parameters i2Backup Backup PostgreSQL

  • 名称:タスク名。文字、数字、記号を使用可能
  • ルール種別:PostgreSQLを選択
  • タイムアウト閾値:設定時間内にバックアップが完了しない場合アラームを出力。0~168時間で設定、0はアラーム無効
  • 優先度:タスク実行優先順位
  • ルール無効化:一時的にバックアップを停止したい場合に使用

手順4. バックアップクライアントを選択し、保存先ストレージをバックアップ先に指定、「次へ」。

choose backup client and target

手順5. バックアップ対象・パラメータ画面にてインスタンスを選択。バックアップスケジュール画面でバックアップ種別と世代保持ルールを設定。

backup schedule backup postgresql

手順6. 必要に応じて詳細設定にて圧縮・暗号化ルールを設定後、「確定・タスク登録」を実行。

advanced backup postgreSQL

まとめ

PostgreSQLバックアップの最適な手法は、環境とデータの重要度によって異なります。開発環境や小規模プロジェクトでは、標準コマンドやpgAdminなどのGUIツールを活用することで、費用をかけず手動スナップショットや簡易的な自動運用が実現できます。開発環境や小規模な本番業務に柔軟に対応可能です。

一方、データ量が増大するにつれ、手動スクリプトは障害の検知が難しく、ストレージ負荷が大きくなる課題が生まれます。基幹システムではInfo2softのi2Backupといった企業向けソリューションが最も効率的な選択肢となります。手動運用では実現困難な自動化、増分バックアップ、拡張性の高い保護機能を提供します。i2BackupはPostgreSQL以外にも、SQL Serverデータバックアップなど多数のプラットフォームに対応しています。

概要は準備中です

関連記事

目次:
最新情報を購読
最新のインサイト、ニュース、限定コンテンツをお届けします。いつでも配信解除が可能です。
購読する
ビジネスデータのセキュリティ強化を始めませんか?
60日間の無料トライアルまたはデモで、Info2softが企業データをどのように保護するかをご確認ください。
フォームにご記入の上、送信してください。担当者より追ってご連絡いたします。
このフォームを送信することにより、 プライバシー通知を読み、同意したことを確認します。
{{ isSubmitting ? '送信中...' : '送信する' }}