データベースのバックアップは、システム運用において重要な業務の一つです。
特に、クラウド上のRDS(リレーショナルデータベースサービス)を利用している場合、定期的なバックアップを取得し、万が一のデータ損失に備えることが不可欠です。
本記事では、Windowsのバッチを活用してRDS(ここではPostgreSQL)のバックアップを取得し、それをタスクスケジューラーで自動化する方法を解説します。
また、バックアップデータのリストア手順についても詳しく説明します。
バックアップの実装方法
この記事では、pg_dump
コマンドを使用したバックアップを紹介しますので、前提として、以下のインストーラー(Windowsの場合は、Windows x86-64)をダウンロードし、クライアントだけでもインストールしてください。
あわせて読みたい
EDB: Open-Source, Enterprise Postgres Database Management
EnterpriseDB provides secure, scalable database management software, enterprise-class Postgres solutions and a wide-range services with 24×7 Postgres support.
バックアップ用バッチの作成
以下のバッチを使用して、RDSのバックアップを取得できます。
RDSの接続情報を外部の設定ファイル(CSV形式)に保存し、複数のデータベースを一括でバックアップする仕組みです。
設定ファイル(config.txt)
ホスト名,ポート,ユーザー名,パスワード,データベース名1 データベース名2 example-db.xxxx.rds.amazonaws.com,5432,admin,password123,db1 db2 db3
バッチスクリプト(backup_postgres.bat)
@echo off setlocal enabledelayedexpansion rem バックアップ設定 set BACKUP_DIR=D:\Backup\RDS set CONFIG_FILE=D:\Backup\rds_config.txt set RETENTION_DAYS=7 rem 日付フォーマット (YYYYMMDD) for /f "tokens=2 delims==" %%I in ('"wmic os get localdatetime /value"') do set datetime=%%I set DATESTR=%datetime:~0,8% if not exist "%CONFIG_FILE%" ( echo エラー: 設定ファイルが見つかりません - %CONFIG_FILE% exit /b 1 ) for /f "usebackq tokens=1,2,3,4,* delims=," %%A in ("%CONFIG_FILE%") do ( set PGHOST=%%A set PGPORT=%%B set PGUSER=%%C set PGPASSWORD=%%D set DATABASES=%%E echo バックアップ開始: インスタンス !PGHOST! for %%D in (!DATABASES!) do ( set DB_NAME=%%D set BACKUP_FILE=%BACKUP_DIR%\!DB_NAME!_%DATESTR%.dump set PGPASSWORD=!PGPASSWORD! echo バックアップ: !PGHOST! の !DB_NAME! pg_dump -h !PGHOST! -p !PGPORT! -U !PGUSER! -F c -b -v -f "!BACKUP_FILE!" !DB_NAME! echo バックアップ完了: !BACKUP_FILE! ) ) rem 古いバックアップ削除 forfiles /p "%BACKUP_DIR%" /s /m *.dump /d -%RETENTION_DAYS% /c "cmd /c del @path" echo 古いバックアップ削除完了(%RETENTION_DAYS%日以上前のファイル) endlocal
タスクスケジューラーによる自動化
タスクの作成
- [Windowsキー] + [R] を押して「taskschd.msc」と入力し、Enterを押す
- 「タスクスケジューラー」内で「基本タスクの作成」をクリック
- 名前:
PostgreSQL Backup
- 「次へ」をクリック
トリガーの設定
- 「毎日」を選択し、「次へ」をクリック
- 実行時間を午前2:00(例)に設定し、「次へ」をクリック
操作の設定
- 「プログラムの開始」を選択し、「次へ」をクリック
- プログラム/スクリプト:
D:\Backup\backup_postgres.bat
- 開始(オプション):
D:\Backup\
- 「次へ」をクリックし、「完了」を押す
詳細設定
- 作成したタスクをダブルクリック
- 「全般」タブで「最上位の特権で実行」にチェック
- 「構成対象」→ 「Windows 10(例)」 に変更
- 「ユーザーがログオンしていなくても実行する」を選択し、管理者パスワードを入力
バックアップのリストア手順
バックアップからデータベースを復元するには、pg_restore
コマンドを使用します。
リストアコマンド
pg_restore -h example-db.xxxx.rds.amazonaws.com -p 5432 -U admin -d db1 -v D:\Backup\RDS\db1_YYYYMMDD.dump
リストア手順
- コマンドプロンプトを管理者権限で開く
PGPASSWORD
を環境変数に設定set PGPASSWORD=password123
- 上記の
pg_restore
コマンドを実行
まとめ
本記事では、バッチを用いたRDSのバックアップ方法、タスクスケジューラーによる自動化、そしてリストア手順について解説しました。
定期的なバックアップを行い、データの保全性を確保することで、障害発生時の影響を最小限に抑えることができます。
運用効率を向上させるために、ぜひこの方法を活用してください。
- Original:https://minory.org/postgresql-backup-batch.html
- Source:minory
- Author:管理者