2023年10月13日金曜日

psqlとmysqlで接続を楽にしたいよね?しよっか

※記憶ベースで書いているところがほとんどなので、うまく行かない場合は参考情報をみていただけると大変助かります。

はじめに

運用・開発でデータベースに接続する機会は結構あるもので、いろんなところに接続しなきゃならないときがあります。でも、接続先とかユーザーとかパスワードとか覚えてられないですよね?接続を楽にしたいですよね?しましょう。

今回は僕がよく使っている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への接続を楽にする - 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記事はこちら。

psqlでパスワード入力を省略する - Qiita

pgpassについての公式はこちら。

パスワードファイル

psqlのオプションはこちら。

psql


おわりに

mysqlとpsqlで接続プロファイルの保存方法に違いがあることが少々気になりました。mysqlは難読化している一方、psqlはファイル権限制御で読み取られにくくしています。目的は同じでも実装方法が異なる点が、どういう経緯でそうなったのか興味をひきました。誰か教えてください。(´・ω・`) <-(そこまで知りたいとは思っていない顔)