[Windows][PostgreSQL8.4] バックアップバッチのサンプル

パスワードファイルを作成する

 以下の場所にパスワードファイルを作成します。

%APPDATA%\postgresql\pgpass.conf

 ちなみに、以下のコマンドを実行すれば、実際のパスが分かります。

echo %APPDATA%

例:C:\Users\Administrator\AppData\Roaming

 pgpass.confに記述する内容は以下の通りです。1行に1件記述します。詳細はマニュアルを参照してください。

ホスト名:ポート番号:DB名:ユーザ名:パスワード

本エントリでは、
localhost:5432:hoge_db:hoge_user:hoge_password

随時バックアップ用のバッチ (メンテナンス作業前に行う)

 ダンプファイルは、年月日時分秒を使って「db_name.20091219-010101.dmp」のようなファイル名となります。

@echo off
rem DBバックアップ (随時バックアップ用)
rem
rem パスワードは %APPDATA%\postgresql\pgpass.conf を参照
rem ダンプファイルの圧縮に「7-Zip」を使用

rem 環境に応じて変更
set db_name=hoge_db
set db_user=hoge_user
set backup_dir=C:\backup\hoge_project
set postgres_bin_dir="C:\Program Files\PostgreSQL\8.4\bin"
set zip_bin_dir="C:\Program Files\7-Zip"

rem バックアップファイル名 (db_name.年月日-時分秒.dmp)
set time_formatted=%time: =0%
set now=%date:~-10,4%%date:~-5,2%%date:~-2,2%-%time_formatted:~-12,2%%time_formatted:~-8,2%%time_formatted:~-5,2%
set dmp_file=%backup_dir%\%db_name%.%now%.dmp

rem バックアップフォルダ作成&エクスポート
mkdir %backup_dir%
%postgres_bin_dir%\pg_dump.exe -U %db_user% %db_name% > %dmp_file%

rem 圧縮&元ファイルを削除
%zip_bin_dir%\7z.exe a -tzip %dmp_file%.zip %dmp_file%
if exist %dmp_file%.zip (
    del %dmp_file%
)

定期バックアップ用のバッチ (1週間でローテーション)

 1週間でローテーションを行う場合は、以下のようにしています。スマートではありませんが、まぁいいかな、と放置しています…。

@echo off
rem DBバックアップ (定期バックアップ用)
rem
rem パスワードは %APPDATA%\postgresql\pgpass.conf を参照
rem ダンプファイルの圧縮に「7-Zip」を使用

rem 環境に応じて変更
set db_name=hoge_db
set db_user=hoge_user
set backup_dir=C:\backup\hoge_project
set postgres_bin_dir="C:\Program Files\PostgreSQL\8.4\bin"
set zip_bin_dir="C:\Program Files\7-Zip"

rem バックアップファイル名 (db_name.1.dmp)
set dmp_file=%backup_dir%\%db_name%.1.dmp

rem バックアップフォルダ作成&古いダンプファイルをリネーム
mkdir %backup_dir%
cd %backup_dir%
if exist %db_name%.7.dmp (
  del %db_name%.7.dmp
)
if exist %db_name%.6.dmp (
  rename %db_name%.6.dmp %db_name%.7.dmp
)
if exist %db_name%.5.dmp (
  rename %db_name%.5.dmp %db_name%.6.dmp
)
if exist %db_name%.4.dmp (
  rename %db_name%.4.dmp %db_name%.5.dmp
)
if exist %db_name%.3.dmp (
  rename %db_name%.3.dmp %db_name%.4.dmp
)
if exist %db_name%.2.dmp (
  rename %db_name%.2.dmp %db_name%.3.dmp
)
if exist %db_name%.1.dmp (
  rename %db_name%.1.dmp %db_name%.2.dmp
)

rem エクスポート
%postgres_bin_dir%\pg_dump.exe -U %db_user% %db_name% > %dmp_file%

rem 圧縮&元ファイルを削除
%zip_bin_dir%\7z.exe a -tzip %dmp_file%.zip %dmp_file%
if exist %dmp_file%.zip (
    del %dmp_file%
)

動作確認

 あとは、以下の点を確認すればOKです。

  • Windowsのタスクにこのバッチを登録し、定期的に自動実行するようにします。
  • 指定したフォルダにダンプファイルが出力されていることを確認します。
  • 出力されたダンプファイルを使って、リストアできることを確認します。

コメントを残す

XHTML: 以下のタグを使用できます。: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>