PostgreSQLバッチでバックアップ

このQ&Aのポイント
  • WindowsマシンからPostgreSQL 8.4のバックアップをバッチファイルで取得する方法について質問です。
  • バッチファイルでのバックアップ実行時にパスワード入力の自動化方法を知りたいです。
  • Linux上のPostgreSQLはSSL接続のみ許可されており、毎日バックアップする運用を想定しています。
回答を見る
  • ベストアンサー

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のタスクで毎日バックアップする運用を想定しています。

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

  • ベストアンサー
  • pa_cotta
  • ベストアンサー率43% (25/58)
回答No.1

.pgpassで出来ると思います。詳しくはこちらを参照してください。 http://www.postgresql.jp/document/9.2/html/libpq-pgpass.html バックアップのトリガがクライアントというのが理解に苦しむのですが、サーバでcron動かしちゃダメなんでしょうか? しかもバックアップファイルがローカルに出来ちゃいますよね。 ビックデータになった場合、下手するとパンクしそうですが大丈夫なんでしょうか…。

luca20110205
質問者

お礼

ご回答有難うございます。 バックアップ後のファイルはWindowsでやるので、 Linuxでバックアップ作成→ファイル転送まで自動化するなら 直接Windows上にバックアップを作った方が楽なのでは?と思った次第です。 ビッグデータ等を心配するような容量にはならないデータなので大丈夫です。 教えて頂いた.pgpassについて、試してみたいと思います。

luca20110205
質問者

補足

.pgpass(Windowsでは「pgpass.conf」)で、目的の処理を実行できました。 以下サイトに、Windowsでの設定方法がありました。 http://sfi.hamazo.tv/e1350560.html

その他の回答 (1)

  • world99
  • ベストアンサー率64% (20/31)
回答No.2

Windowsクライアントからバックアップするのではなく、 LinuxサーバでDBバックアップしてWindowsクライアントにダウンロードするという方法なら自動化できます。 しかし、私が携わったプロジェクトでは、サーバでバックアップしていましたが、自動化はしていませんでした。 その理由は、バックアップ前にハードディスクの空き容量を確認が必要だったからです。 シェルだけ用意しておいて、空き容量確認後にDBバックアップしていました。 バックアップは自動化してクライアントにダウンロード後にサーバから削除するなら、毎回サーバの空き容量を確認しなくてもいいので、サーバでのDBバックアップを自動化してもいいかもしれません。 私が携わったプロジェクトは月1回のバックアップだったのでサーバの空き容量確認が毎回必須でした。 1.Linux でDBバックアップ ・postgres の所有ユーザで pg_dump を実行する。  -h, -U といったオプション指定が不要になると思います。 2.WindowsクライアントにDBバックアップファイル取得 ・WinSCPとかを使ってLinuxサーバにあるDBバックアップファイルをWindowsクライアントにダウンロード ・サーバーのDBバックアップファイルを削除 手順は以上です。ご検討下さい。

luca20110205
質問者

お礼

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

関連するQ&A

  • Linux環境下(CentOS)でPostgreSQL8.1の自動バックアップを取りたいのですが、四苦八苦しています。

    Linux環境下(CentOS)でPostgreSQL8.1の自動バックアップを取りたいのですが、四苦八苦しています。 rootユーザにてcrontab -eで【10 0 * * * pg_dump -U postgres hogeraradb > /home/backupuser/backup.sql】と入力し保存しました。 しかし実際にバックアップが取れているのかなど確認の方法もわからず困っています。 思いつく範囲ではpg_dumpの設定も必要なのかも知れないのですが、どの画面で何を入力すればいいのかもわかりません。 何かアドバイスをよろしくお願いします。

  • pg_dumpのバッチ実行

    Windows2008環境で、PostgreSQL8xを開発しています。 日次のバックアップで、DOSバッチからpg_dumpコマンドを実行し、 ダンプを取りたいと思います。 そこでサンプルを作成し、実行したのですが、 途中パスワードを聞かれてしまい、止まってしまいます。 実行は下記のコマンドです。 >>pg_dump -U User01 -Fc testdb > backup.dat パスワードファイル、というファイルに 「ホスト名:ユーザ名:パスワード:DB」User01の エントリを追加したところ、パスワードが聞かれなくなりました。 これはマニュアルどおりだと思います。 ただファイルにユーザ毎にパスワードを書くのもどうもイマイチで 他の方法が無いか調べています。 ・パスワードを聞かれない管理ユーザで実行する ・実はpg_dumpでパスワードを指定するパラメータがある とかあれば良いのですが・・ パスワードファイル以外に、回避方法は ありますでしょうか?。

  • Linux上のpostgreSQLデータをWindowsでみたい

    サーバA(OS:Linux Fedora Core 4、データベース:PostgreSQL 8.0 で運用しているシステムがあり、毎日そのデータを下記のdumpコマンドで PostgreSQLの全データをバックアップしています pg_dumpall > postgres.out  サーバAを触るのは怖いので、別のマシンB(Windows-Xp)に postgresql-8.2.6をインストールしました。 このバージョンは、postgresqlとともに、pgAdmin3というGUIの管理 ツールもついていると聞きここに、サーバAからバックアップされている postgres.outをrestoreして pgAdmin3でデータベース・テーブル等をみようとしています (postgres.out)を使ってのリストアの仕方は (1)(postgres.out)をpostgresqlの/binディレクトリの中に入れる (2)psqlのメニューから次のコマンドを打つ psql -d manmg -f postgres.out   (3)pgAdmin3を立ち上げるとサーバAのDBは追加されているようなのですが  テーブルは(0)となって見えません マシンBの方のPostgreSQLについてはインストールしたままでサーバA のpostgresqlの設定等は何もしていません 何か設定する所はあるのでしょうか 上記手順でlinuxから吐出されたバックアップデータをWindowマシンに リストアする方法は間違っていないのでしょうか よろしくお願いします。

  • PostgreSQLの差分バックアップに関して

    よろしくお願いいたします。 ■経緯 Linuxサーバ & PostgreSQL 8.4.9 において開発を行っております。 データベースを日時でバックアップをとる案件がございまして、 pg_dumpでは差分バックアップができないことが判りました。 ネット等でも検索したところ、 「 PostgreSQL 8.0 以降では、前回バックアップした内容からの差分バックアップ、 特定時間までの巻き戻しが可能です 」 との書き込みも見つけたのですが、具体的な方法を調べてみたのですが、 目的の情報に、いまだたどり着いておりません。 ■質問内容 当然、私どもの使用するデータの種別、内容、に寄るところではありますが PostgreSQLを差分バックアップを取る場合に、 一般的にどのようなバックアップツール?(WAL?pg_rman?)を使用して、 差分を抽出しているのか、参考に教えていただけますでしょうか。 また具体的なコマンドの使用方法等を解説しているページなどもありましたら よろしくお願いいたします。

  • Postgresqlで8GB超えのバックアップ

    こんにちは。 Postgresqlでpg_dumpで8GBを超えるとバックアップに失敗してしまいます。 不要なデータを削除しても8GBを超えているようでバックアップに失敗してしまいます。 どうにかバックアップを取る手段はありますでしょうか? すいませんが、知っている方、ご教授お願いします。 環境は、Windwos2003Server、Powergres6(PostgreSQL8.X系)です。 宜しくお願いします。

  • バックアップ

    現在専用サーバーでlinuxを使っています。 dump -0uf /backup.dump / 全てのファイルをdumpし、バックアップを取りました。 今後問題が発生した場合、dumpファイルをリストアすればdumpした状態にサーバーが戻るのでしょうか? windowsの場合は再インストールをしないと無理だと思うのですが、linuxの場合はファイルを展開するだけで大丈夫なのでしょうか? 今後は特にシステムをいじる事もないので定期的にバックアップは考えていません。 mysqlなど更新される部分は定期的にバックアップを取っています。 又参考サイトでdumpする場合は同期が取れなくなるのでシングルモードでと書いていました。必要ですか? ご教授お願いいたします。

  • pg_dump スキーマ バックアップでエラー

    スキーマ単位でバックアップをしたいと思ってます。 が・・ pg_dumpにてあるスキーマを指定して実行すると「PG_DUMP: no matching tables were found」のエラーが表示されます。 【環境】 PostgreSQL :9.6.0 サーバー :Windows2008 R2 クライアント:Windows7 データベース:postgres ユーザ :postgres -- スーパユーザ スキーマ :SCM -- 注意 大文字 【コマンド】エラー時 パターンA PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -n SCM -Fc postgres 【コマンド】エラー時 パターンB (スキーマに”をつける) PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -n "SCM" -Fc postgres ちなみに -n スイッチを外すと正常に実行されます。 【コマンド】正常時(-n SCMを外す) PG_DUMP -h 192.168.xxx.xxx -U postgres -p 5432 -f D:\POSGRESQL_DUMP\SCM_DUMP.DAT -Fc postgres どうか、お助け下さい。よろしくお願いします。

  • Passwordを設定したPostgreSQLのバックアップなどができ

    Passwordを設定したPostgreSQLのバックアップなどができない。 PostgreSQLのバックアップを行おうとしているのですがバックアップSHELLを実行 するとパスワードを聞いてきます。 pg_dump -Udbuser -s DBANME > /DbBkup/dbbackup.out そこで実行ユーザのHOMEディレクトリに.pgpassを置き localhost:*:DBNAME:dbuser:dbpass と登録し、実行しところ、これでもパスワードを聞いてきます。 最終的にはcronで実行したいのですが、解決方法がわかりません。 お願いいたします。

  • Windows版 pg_dumpの結果をログ取得

    お世話になっております。 Windows版のPostgreSQL8.1を使用しています。 Windowsのバッチファイルで毎週自動実行で pg_dumpによるバックアップを取得しようと思っています。 バックアップは正常に取得できるのですが、 どうしてもログファイルが出力できません。 手動でバッチを動かすと、プロンプトには表示が出ます。 『pg_dump: テーブル×××の内容をダンプしています』 のように。それをどうやったらファイルに残せるかを知りたいです。 実行しているコマンドは、 pg_dump.exe -f "DBバックアップファイル" -i -v -h ホスト名 -p ポート -U "ユーザ名" -F c "DB名">>"ログファイル名" としています。 以上です。宜しくおねがいします。

  • バッチでのバックアップに関して

    バッチファイルを利用して、複数のフォルダのバックアップを行いたいと考えています。 C:\test1 C:\test2 D:\test1 D:\test2 E:\test1 E:\test2 上記のように複数のフォルダ(実際はもっとたくさんあります。) バックアップ先はX:\backup にまとめたいのですが、 繰り返し(for)等を利用して、1文でコピーできればと考えておりますが、 良い方法あればご教授お願いできませんでしょうか><