SQL

MySQLへの接続

2011年01月05日
こんどのクライアントさんとのお仕事は、おそらくMySQLを使うことになりそうなので、テーブルの作成や、PHPからの接続をあらかじめやっておこうと思います。
使わないことになったとしても、自分のキャリアのために経験しておきたいと思います。
派遣先でWebの開発をやったときは、PostgreSQLだったので、自分のWebサイトはPostgreSQLで組んでいます。
いい機会なので、MySQLも経験しておこうと思います。
といっても、SQLコマンドほとんど同じだそうです。

まずはDBへの接続からです。
私の使っているサーバーでは、テーブルを作成したり、直接DBをみたり触ったりするには、Telnetでサーバーへ接続しなければいけません。

PostgreSQLは、自動でログインできるようにスクリプトを作っています。
それと、レンタルサーバー会社から送られてきた設定情報を参考にスクリプトを編集しました。
【mysql -h ホスト名 -u DBユーザーID -p DB名】
を自動で流すようにスクリプトを作ります。
当然のごとく、パスワードプロンプトが表示されます。パスワードを入力すると無事ログインできました。

これを、毎回パスワードを入力しなくていいようにするのが目標です。

初めに試したのが、スクリプトへパスワードを設定する方法です。
【-p】オプションの後ろへパスワードを設定します。
【mysql -h ホスト名 -u DBユーザーID -pパスワード DB名】
でパスワードを自動で送信し、DBへ接続できます。
【-p】オプションと【パスワード】はくっつけます。半角スペースは入れません。
ここで少々はまってしまいました。パスワードに【&】が含まれていたため、それ以降の文字がパスワードとして認識されず、何度やってもエラーになっていました。
【&】を【\】でエスケープすると、問題なくログインできるようになりました。

スクリプトにパスワードを含めるやり方は、パスワードが盗み見られる可能性があるので、セキュアな方法ではありません。
なので、次はもっとセキュアな方法をさがすことにしました。
PostgreSQLの場合を見てみると、自動スクリプトへはパスワードを設定していません。
そういえば、Webサーバーへパスワードを設定したファイルをアップロードしたような記憶があります。
サーバーを調べると、【.pgpass】へパスワードを設定していました。
おそらくMySQLにもなにかあるはずです。

ネットを調べると、いくつか見つかりました。
MySQLクライアントログイン時にパスワードを省略
MySQL my.cnf オプション設定ファイル
これらが参考になります。

【.my.cnf】へ
-------------------------------
[client]
host="ホスト名"
user="DBユーザー名"
password="DBパスワード"
-------------------------------
を書き込み、WebサーバーのトップディレクトリにアップロードすればOKです。
-------------------------------
[client]
password="DBパスワード"
-------------------------------
だけでもOKです。
【=】の後ろのパスワードは【"】でくくらなければダメなようです。もしかしてサーバーごとに違うのかも。
そして、Telnetへ接続するスクリプトの【-p】オプションをはずします。
【mysql -h ホスト名 -u DBユーザーID DB名】
です。

これでパスワードを自動で読んでくれるようになりました。