Automated Backup on Windows/ja
From PostgreSQL wiki
Jump to navigationJump to search
原文最終更新日: 26 November 2009
Windows上でのバックアップの自動化
以下はWindows環境でのPostgreSQLサーバのバックアップを自動化する2つの方法です。
- 最初の方法はバッチファイルによってpg_dump.exeを呼び出す方法です。このバッチファイルは、それぞれの実行する日に新規ファイルを作成します。
- 2番目の方法はPgPass、pg_dumpall.exe、サーバ全体のバックアップのためのバッチファイルを使用する方法で実行するごとにファイルを上書きします。
pgdumpを使ってそれぞれの日で新しいファイルを作成する
- サーバ上にて"ドライブ名:PostgresqlBack"というディレクトリを作成し、その中に"bin"サブディレクトリを作成します。
- pg_dump.exeをコンパイルする代わりに、pgAdmin IIIのインストールに使用する準備ができているpg_dumpが含まれています。以下のファイルはpgAdmin IIIからpg_dump.exeを使用するときに必要なファイルとなり、これらのファイルはpg_dump.exeと同一のbinフォルダに設置する必要があります。
comerr32.dll
gssapi32.dll
k5sprt32.dll
krb_32.dll
libeay32.dll
libiconv2.dll
libpq.dll
Microsoft.VC80.CRT.manifest
msvcm80.dll
msvcp80.dll
msvcr80.dll
pg_dump.dll
ssleay32.dll
zlib1.dll
- postgresqlBackup.batのような名前のバッチファイルを作成します。ファイルはbinフォルダではなく、PostgresqlBackディレクトリに設置する必要があります。
- ファイルを開き、以下をコピー/ペーストします。
@echo off
for /f "tokens=1-4 delims=/ " %%i in ("%date%") do (
set dow=%%i
set month=%%j
set day=%%k
set year=%%l
)
set datestr=%month%_%day%_%year%
echo datestr is %datestr%
set BACKUP_FILE=<NameOfTheFile>_%datestr%.backup
echo backup file name is %BACKUP_FILE%
SET PGPASSWORD=<PassWord>
echo on
bin\pg_dump -i -h <HostName> -p 5432 -U <UserName> -F c -b -v -f %BACKUP_FILE% <DATABASENAME>
- バッチファイルの<NameOfTheFile>を別のものに変更します。アイディアとしてはデータベース名を使用することが挙げられます。(BACKUP_FILE句の後に空白を入れてはいけないことに注意してください。空白を入れると正しく動作しません。)ファイル名の最初の部分をに続けて日付に設定し、.backup拡張子を付けたファイルが作成されます。
- 上記の<PassWord>をバックアップユーザの正しいパスワードに書き換えます。(PGPASSWORD句の後に空白を入れてはいけないことに注意してください。空白を入れると正しく動作しません。 pgPasswordの説明を参照してください。)
- <HostName>をPostgresqlが動作しているサーバのIPアドレスかDNS名に変更します。
- <UserName>をバックアップユーザに変更します。このユーザはバックアップ目的のためにデータベースにアクセスすることに注意してください。
- <DATABASENAME>をバックアップするデータベース名に変更します。
- ファイルを保存します。
- タスクスケジューラにタスクを作成します。
- 実行されるタスクのセキュリティコンテキストを一度選択したら、バックアップが実行され、ファイルが格納されるディレクトリセキュリティを高次のユーザ名とパスワードがプレーンテキストに格納されているのと同様に変更することをお勧めします。
.pgpassとpgdumpallを使用し、同一のファイルを上書きして使用する
windows環境にて自動バックアップを達成するには、私は以下のやり方をしました。
- .pgpassファイルを作成します。
- (自身のものはpgpass.confと呼んでいました)そしてどこか安全な場所に設置します。私はバックアップを実行するスクリプトは以下のサブディレクトリに設置しています。
- .pgpassファイルをロックダウンします。
- NTFS権限設定を使用し、このファイルへ実行ユーザ以外の全員に対してアクセスを無効にします。
- (もしシステムアカウントで実行しているなら、自身のユーザ資格情報を使うべきです)
- pg_dumpallを呼び出すためのスクリプトを作成します。
- 私のスクリプトは以下のようなものです:
SET PGPASSFILE=C:\foo\bar\PG_BACKUP\PGPASSFILE\pgpass.conf
"C:\Program Files\PostgreSQL\8.2\bin\pg_dumpall.exe" -U scfcu_postgres > C:\foo\bar\PG_BACKUP\db.out current
- 重要なのは最初の行で、PGPASSFILE環境変数が動的に設定されます。これはスクリプトの終了後にリリースされ、故に自動ログインを持った実行の時のみのこの処理においてのみ使用されます。2行目は、ユーザ名を(-U)にて指定し、データベース(ここでは'current')のバックアップと同様にファイル名を(db.out)を指定したとても基本的なpg_dumpallのコマンドです。
- スケジュールされたタスクを作成します。
- 私はwindowsにて毎夜11:00PMに実行するタスクを作成しました。コマンドは以下となり、
- C:\Windows\System32\cmd.exe /c "C:\foo\bar\PG_BACKUP\pg_backup.bat"
- そして以下のディレクトリで実行されます。
- C:\foo\bar\PG_BACKUP
全ての設定を行ってから、pg_dumpallは自動的に毎夜実行され、このディレクトリにファイルが出力されます。この時点であなたが現在使用している(ディレクトリを含んだ)システム全体のバックアップと、上手くいけば上手にオフサイトへのコピーを取ることが最善のバックアップソリューションとなるでしょう。もしリストアする必要があるなら、バックアップされたdb.outファイルが使用できます。pg_dumpallとrestoreの使用を同じバージョン番号で維持してさえいれば、すべて良いものとなるでしょう。
どのように自動的にパスワードを安全に(もしくはwindowsにおいて同様にセキュアに)パスするかを示しました。これは批判の心配がないわけではありませんが、3支店の信用組合にてデータマイニング情報のすべてを保持するデータベース上でしばらくの間実行されています。実行し始めると上手くいけばwindows上でのバックアップ時のやっかいなユーザの相互作用を削減できる助けになるでしょう。