※記憶ベースで書いているところがほとんどなので、うまく行かない場合は参考情報をみていただけると大変助かります。
はじめに
運用・開発でデータベースに接続する機会は結構あるもので、いろんなところに接続しなきゃならないときがあります。でも、接続先とかユーザーとかパスワードとか覚えてられないですよね?接続を楽にしたいですよね?しましょう。
今回は僕がよく使っているMySQLとPostgreSQLで接続を楽してみます。
mysql
mysql_config_editorというものがあり、そこに接続プロファイルを書いてもらいます。プロファイルはホームディレクトリ下の~/.mylogin.confに難読化されて保存されます。
接続プロファイルを記録する
mysql_config_editor set -G ${profile-name} -h ${host} -P ${port} -u ${user} -p
mysql_config_editor set -G mydatabase-profile -h localhost -P 3306 -u akio -p
でパスワードを聞かれるので答えてください。これで記録されます。
使うときは
mysql --login-path=mydatabase-profile
で接続できるはずです。
mysql参考
より詳細なQiita記事はこちらにあります。
mysql_config_editorに使えるオプションはこちら。print -allでプロファイル一覧を出せます。
MySQL :: MySQL 8.0 リファレンスマニュアル :: 4.6.7 mysql_config_editor —
MySQL 構成ユーティリティー
psql
パスワードと接続プロファイルをホームディレクトリ下の2つのファイルに分けて管理します。
接続プロファイルは ~/.pg_service.conf に次のように書きます。
[mydatabase-profile]
host=localhost
port=5432
user=akio
dbname=mydb
パスワードは ~/.pgpass に次のように書きます。
localhost:5432:mydb:akio:mypassword
~/.pgpassは chmod 600 しておきます。これよりゆるくするとpsqlに読み取ってもらえなくなります。
接続するときは次のように書きます。
psql "service=mydatabase-profile" -w
-wでパスワードを聞かれなくなりますが、その代わり.pgpassを探しに行ってくれます。
ちなみに、.pgpassの中身をパスワード以外の部分で一致させて探すので少しでもserviceの内容と違うと取ってこれないかも...と思っています。ワイルドカードは使えそうなので適宜使うと良いのかもしれません。
psql参考
.pg_service.confにかける他パラメータはこちら。
.pgpassについて詳細なQiita記事はこちら。
pgpassについての公式はこちら。
psqlのオプションはこちら。
おわりに
mysqlとpsqlで接続プロファイルの保存方法に違いがあることが少々気になりました。mysqlは難読化している一方、psqlはファイル権限制御で読み取られにくくしています。目的は同じでも実装方法が異なる点が、どういう経緯でそうなったのか興味をひきました。誰か教えてください。(´・ω・`) <-(そこまで知りたいとは思っていない顔)