こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

PostgreSQL バッチでバックアップ

PostgreSQL 8.4に関する質問です。

サーバ:Linux、PostgreSQL 8.4
クライアント:Windows 7

Windowsマシンから、バッチファイルでサーバ上のPostgresのバックアップを取りたいのですが、
以下のコマンドをバッチファイルに記述して実行すると、
「パスワード:」というプロンプトが出て処理が止まってしまいます。

pg_dump.exe -h [DBサーバのIP] -U [ユーザ名] -F custom -b -v -f "C:\test.backup" "test"

パスワードを入れればバックアップはできるのですが、
パスワードの入力まで完全自動化するにはどうすればいいでしょうか。

Linux上のPostgresはSSL接続のみ許可するようになっています。
Windowsのタスクで毎日バックアップする運用を想定しています。

投稿日時 - 2013-04-08 18:47:09

QNo.8033750

困ってます

質問者が選んだベストアンサー

.pgpassで出来ると思います。詳しくはこちらを参照してください。

http://www.postgresql.jp/document/9.2/html/libpq-pgpass.html

バックアップのトリガがクライアントというのが理解に苦しむのですが、サーバでcron動かしちゃダメなんでしょうか?
しかもバックアップファイルがローカルに出来ちゃいますよね。
ビックデータになった場合、下手するとパンクしそうですが大丈夫なんでしょうか…。

投稿日時 - 2013-04-08 19:09:44

補足

.pgpass(Windowsでは「pgpass.conf」)で、目的の処理を実行できました。

以下サイトに、Windowsでの設定方法がありました。
http://sfi.hamazo.tv/e1350560.html

投稿日時 - 2013-04-09 11:24:13

お礼

ご回答有難うございます。

バックアップ後のファイルはWindowsでやるので、
Linuxでバックアップ作成→ファイル転送まで自動化するなら
直接Windows上にバックアップを作った方が楽なのでは?と思った次第です。

ビッグデータ等を心配するような容量にはならないデータなので大丈夫です。

教えて頂いた.pgpassについて、試してみたいと思います。

投稿日時 - 2013-04-09 09:15:32

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

Windowsクライアントからバックアップするのではなく、
LinuxサーバでDBバックアップしてWindowsクライアントにダウンロードするという方法なら自動化できます。

しかし、私が携わったプロジェクトでは、サーバでバックアップしていましたが、自動化はしていませんでした。
その理由は、バックアップ前にハードディスクの空き容量を確認が必要だったからです。
シェルだけ用意しておいて、空き容量確認後にDBバックアップしていました。

バックアップは自動化してクライアントにダウンロード後にサーバから削除するなら、毎回サーバの空き容量を確認しなくてもいいので、サーバでのDBバックアップを自動化してもいいかもしれません。

私が携わったプロジェクトは月1回のバックアップだったのでサーバの空き容量確認が毎回必須でした。


1.Linux でDBバックアップ
・postgres の所有ユーザで pg_dump を実行する。
 -h, -U といったオプション指定が不要になると思います。


2.WindowsクライアントにDBバックアップファイル取得
・WinSCPとかを使ってLinuxサーバにあるDBバックアップファイルをWindowsクライアントにダウンロード
・サーバーのDBバックアップファイルを削除


手順は以上です。ご検討下さい。

投稿日時 - 2013-04-09 05:04:23

お礼

ご回答有難うございます。
Linuxでバックアップし、Windowsにダウンロードすればバックアップを取得できる事は知っています。
Windowsから「自動で」バックアップを行う方法を知りたかったのです。

投稿日時 - 2013-04-09 11:20:22