こんばんは。先日はawsについて書きましたが、今日はデータベースの話を書きます。
はじめに
postgreSQLのバックアップを取得するのに、シェルを作成してcronに登録して定期実行したいというケース。あるかと思います。
そんな時のつまづきポイント。それは
postgreSQLはpg_dumpコマンド実行時に、オプションでパスワードを渡すことができない。
これに私は結構悩まされたので、解決方法を今回まとめました。
pg_dumpはオプションでパスワードを渡すことができない
どういうことかと言うと
#pg_dump -p password (あくまで例えばですよ!)
とかで実行できればいいのですが、残念ながらパスワードを引数にするオプションがないみたいです。
対話式なのです。
そうするとcronで定期ジョブとしてバックアップを自動実行したいときに困ります。
毎日夜中にサーバに繋いで、コマンド打って、パスワード手入力するなんて嫌です。
そこでパスワード入力を省略する設定を行っていきます。
環境
・centOS7
・postgreSQL9.6
パスワードをファイルに書いて保存
まずは公式ドキュメントをご覧ください。ここにすべて書いてあります。
.pgpass
というファイルをユーザのホームディレクトリに配置することで、postgreSQLはそこからパスワードを読み込んでくれるようです。意外なことにpostgreSQL自体のconfigファイルとかは編集しないのですね。
cornでrootがバックアップシェルを実行する場合の設定です。
rootになる
su -
rootのホームディレクトリに移動する
cd ~
postgreSQLが読み込む用のパスワードを情報を記載したファイルを作成する
vi .pgpass
書式については公式ドキュメントにも記載がありますが、ファイル内の行の書式は次の通りです。
hostname:port:database:username:password
先頭の4フィールドはワイルドカードが使えるとのことで、今回はそれに従って
*:*:*:*:password
こんな感じでいきます。
権限変更。これよりも緩くすると、このファイルは無視される仕様。
chmod 600 .pgpass
さて、ここまできたら準備完了。
パスワード入力なしでpg_dumpが実行できるか確認する
pg_dump DBname -U username -w > test
DBnameとusernameは置き換えてくださいね。testファイルに正常に書き込まれていればOKです。
-w はパスワードの入力を省略するオプションです。
これさえあればDBバックアップ実行シェルも作れますね!