Database JUNKY

MySQL,MariaDBを中心としたブログです

MySQL リモートからの接続時にMySQLプロンプトにユーザー名とホスト名とデータベース名に変更する方法

すごく大した話ではないのですが、複数のデータベースを保有している時、コマンド接続した際に、どこのDBサーバに接続しているかわかんなくなっちゃうことありませんか? 自分の場合、管理が良くないので、本番データベースに接続しているのか、テスト用のデータベースに接続しているのかわからなくなることがあります。 基本的に自分はツールは使わないであくまでもコマンドラインです。パスワードを変えているから問題ないでしょ?と言われるかもしれませんが、複数のターミナルで本番環境とテスト環境が同時に立ち上がっている時が多く、テスト環境だと思いきや、実は本番環境を更新してたわ(汗)なんてことが多くあり、冷や汗を出したことがあります。

何書いているかわかんないですよね(笑)私が言いたいのはつまりこういうことです。

クライアントAからホストB(本番)のmydb に接続した場合のMySQLプロンプト

接続

[user@host_a ~] mysql -umyuser -p -h host_b -Dmydb

接続後のMySQLプロンプト

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [mydb]>

クライアントAからホストC(テスト)のmydbに接続した場合のMySQLプロンプト

接続

[user@host_a ~] mysql -umyuser -p -h host_c -Dmydb

接続後のMySQLプロンプト

Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [mydb]>

ね?この状態で本番、テスト環境ともに、同じデータベースだった場合、どっちに接続しているかわからなくないですか?

というわけで、私は、MySQLのプロンプトを以下のようにしたいのです

myuser@host_b [mydb] >

・・・で、どうするか?

答えは簡単、

接続元のMySQLクライアントに$HOME/.my.cnfにプロンプトの設定を追加します。

私が設定したのは以下のMySQLプロンプトです(host_aで設定しております)

ちなみに、.my.cnfがない場合は、touchコマンドでファイルを新規で作成してください。また。my.cnfではなく、.my.cnf(ドットファイルであることに注意してください

$ cat ~/.my.cnf
[mysql]
prompt='\\u@\\h [\\d] >\\_'

\u は、ユーザー名
\h は、DBサーバのホスト名
\d は、カレントのデータベース

です。 .my.cnfに設定する時、バックスラッシュ(\)は上記のように、2重に記述する必要がります、そうでないとエスケープ文字だと間違われてしまうためです。

その他の設定は以下の通りですが、うーん。。いまのところ上記以外は使い道がないかなー?

\c : コマンド実行回数
\D : システム日時
\d : カレントのデータベース
\h : DBサーバのホスト
\p : ポート番号
\n : 改行
\O : 月
\o : 数字の月
\R : 時(24)
\r : 時(12)
\P : AM/PM
\m : 分
\l : SQL区切り文字(デフォルトは;)
_ : スペース
\S : セミコロン
\s : 秒
\t : TAB
\U : ホスト名を含むユーザー名
\u : ユーザ名
\v : MySQLバージョン
\w : 曜日
\Y : 年(4)
\y : 年(2)

f:id:hit10231023:20180309104332j:plain