![[小ネタ] MySQL のプロンプトを変更してみた](https://devio2024-media.developers.io/image/upload/v1756629387/user-gen-eyecatch/p87qtxepinmoyoow8uoe.png)
[小ネタ] MySQL のプロンプトを変更してみた
MySQL を色々いじっていると、自分がどのユーザーでログインしているのか、どのデータベースを現在扱っているのか分からなくなると思います。(というか、自分がそうです。)
なので今回は、mysql のプロンプトを変更して見やすくしてみました。
前準備
以下の設定で RDS for MySQL を作成します。
- RDS for MySQL 8.0.42
- db.t3.micro
- プライベートサブネット
以下の設定で EC2 を作成します。
- Amazon Linux 2023
- t3.micro
- パブリックサブネット
- 「パブリック IP の自動割り当て」を有効化
RDS および EC2 のセキュリティグループ(以下, SG と略す)の設定をします。
RDS は EC2 からの接続を許可するよう、EC2 はローカルからの接続を許可するように設定します。
RDS の SG 設定: EC2 の SG からのインバウンドを許可
EC2 の SG 設定: ローカル からのインバウンドを許可
ローカルから EC2 に ssh ログインし、以下のブログを参考に mysql をインストールします。
上記ブログで mysql コマンドが使えるようになったので RDS MySQL へアクセスしてみます。
以下の通り、アクセスできているので準備 OK です。
$ mysql -u <ユーザー名> -p -h <RDS 接続エンドポイント>
...
mysql>
プロンプトを変更する
準備ができたので、mysql プロンプトを変更していきます。
--prompt オプションを使う
mysql 接続時に --prompt
を指定すると、ユーザーとデータベースを含むプロンプトが作れます。
例えば以下のように書くことで、顔文字付きのプロンプトが作れます。
$ mysql -u sunagawa -p --prompt="(^_^) USER: \u DB: \d > " -h <RDS 接続エンドポイント>
...
(^_^) USER: sunagawa DB: (none) >
データベースを作成して、切り替えてみます。ちゃんと表示されていますね、よかった
(^_^) USER: sunagawa DB: (none) > CREATE DATABASE sample_db;
Query OK, 1 row affected (0.02 sec)
(^_^) USER: sunagawa DB: (none) > use sample_db;
Database changed
(^_^) USER: sunagawa DB: sample_db >
--prompt
オプションで指定している内容は以下です。
\u
: MySQL サーバーに接続しているユーザー\d
: 現在のデータベース。データベース未選択の場合は none になる。
ちなみに絵文字も設定できます。(当方は mac のターミナルを利用しています。)
$ mysql -u sunagawa -p --prompt="😄 USER: \u DB: \d>" -h <RDS 接続エンドポイント >
設定すると以下のような感じです。
環境変数を使う
ログインするときにプロンプトを毎回書くのが面倒な時もあります。そんな時は環境変数を使えば OK です。
(※下記は Linux の場合です。当方が Mac なので Windows のやり方がわからないですが、おそらく setx MYSQL_PS1
辺りでできるかと思うので、調べてみてください。)
shell> export MYSQL_PS1="<プロンプトの内容>"
実際にやってみます。
$ export MYSQL_PS1="(*_*) USER: \u DB: \d > "
$ mysql -u sunagawa -p -h <RDS 接続エンドポイント>
...
(*_*) USER: sunagawa DB: (none) >
環境変数をリセットしたいときは unset
を使います。
shell> unset MYSQL_PS1
unset
を使わずに export MYSQL_PS1=""
のように書いても全く空白のプロンプトが出来上がる(mysql>
とすら表示されない)ので注意です。
ログインした後にプロンプトを変更する
mysql にログインした後に、プロンプトを変えたいなと思うこともあります。
その場合はログイン後に prompt
ステートメントを使えばできます。
$ mysql -u sunagawa -p -h <RDS 接続エンドポイント>
...
mysql> prompt (>_<) USER: \u DB: \d >
PROMPT set to '(>_<) USER: \u DB: \d > '
(>_<) USER: sunagawa DB: (none) > use test_db;
Database changed
(>_<) USER: sunagawa DB: test_db >
プロンプトをデフォルトに戻したい時は、prompt
と直接入力します。
(>_<) USER: sunagawa DB: test_db > prompt
Returning to default PROMPT of mysql>
mysql>
終わりに
今回は MySQL プロンプトを変更してみました。調べてみると環境変数で変えることもできたり、ログイン後に変えられたり、色々な方法があることがわかりました。自分はどのユーザーやどの DB を使っているのか毎回よくわからず、ミスすることもしばしばだったため、今後は今日の方法を使って楽しく MySQL を触っていきたいと思います。
なお、今回は \u
と \d
しかプロンプトに設定しませんでしたが、その他にもたくさんの種類があります。
以下は、現在時刻(UTC)やどこから接続しているか、サーバーバージョンなどを指定してみた例です。
mysql> prompt NOW_TIME:\R:\m:\s FROM:\U VERSION:\v MESSAGE: FIGHT!\u!! >
PROMPT set to 'NOW_TIME:\R:\m:\s FROM:\U VERSION:\v MESSAGE: FIGHT!\u!! > '
NOW_TIME:12:40:51 FROM:sunagawa@10.0.7.32 VERSION:8.0.42 MESSAGE: FIGHT!sunagawa!! >
上記以外にもたくさんのオプションがあるので、
下記参考情報のドキュメントなどを見ながら色々お試しください。お疲れ様でした〜
参考情報