MySQL道普請便り

第77回mysqlコマンドラインクライアント

皆さんはmysqlコマンドラインクライアントは利用していますでしょうか? 最近は便利なGUIツールもたくさんあるため、利用する機会が少ない方もいるかもしれません。

mysqlコマンドラインクライアントにはhelpというコマンドがあり、実行中はいつでもコマンド一覧を確認することができます。

今回はmysqlコマンドラインクライアントについて、使い方を一部紹介していきます。なお、今回利用しているMySQLはバージョン8.0.11、OSはCentOS7を利用しています。

mysqlコマンドラインクライアントの実行

mysqlコマンドラインクライアントは、起動時に様々なプションを渡すことができます。オプションによって接続するMySQLの向き先やユーザーを変更したり、出力結果を変更することが可能です。基本的にはmysqlコマンドの後ろにオプションを渡していくことで、組み合わせて利用することができます。同じオプションを複数回渡した場合は、最後に指定したオプションが有効となります。

また、--no-defaultsおよび--defaults-fileのオプションは最初のオプションとして指定しないとエラーとなります。
$ mysql -uroot  --defaults-file=/etc/mysql/my.cnf -p
mysql: [ERROR] unknown variable 'defaults-file=/etc/mysql/my.cnf'

これらのオプションはmy.cnfの[mysql]および、[client]セクションに記述しておくことも可能です。

my.cnfについては、第31回 MySQLのオプションファイル my.cnfの豆知識[その1]第33回 MySQLのオプションファイル my.cnfの豆知識[その2]を御覧ください。

HELPコマンドによるコマンド一覧の確認

mysqlコマンドラインクライアントでhelpを実行するとコマンドの一覧を確認することができます。

mysql&gt help

For information about MySQL products and services, visit:
   http://www.mysql.com/
For developer information, including the MySQL Reference Manual, visit:
   http://dev.mysql.com/
To buy MySQL Enterprise support, training, or other products, visit:
   https://shop.mysql.com/

List of all MySQL commands:
Note that all text commands must be first on line and end with ';'
?         (\?) Synonym for `help'.
clear     (\c) Clear the current input statement.
connect   (\r) Reconnect to the server. Optional arguments are db and host.
delimiter (\d) Set statement delimiter.
edit      (\e) Edit command with $EDITOR.
ego       (\G) Send command to mysql server, display result vertically.
exit      (\q) Exit mysql. Same as quit.
go        (\g) Send command to mysql server.
help      (\h) Display this help.
nopager   (\n) Disable pager, print to stdout.
notee     (\t) Don't write into outfile.
pager     (\P) Set PAGER [to_pager]. Print the query results via PAGER.
print     (\p) Print current command.
prompt    (\R) Change your mysql prompt.
quit      (\q) Quit mysql.
rehash    (\#) Rebuild completion hash.
source    (\.) Execute an SQL script file. Takes a file name as an argument.
status    (\s) Get status information from the server.
system    (\!) Execute a system shell command.
tee       (\T) Set outfile [to_outfile]. Append everything into given outfile.
use       (\u) Use another database. Takes database name as argument.
charset   (\C) Switch to another charset. Might be needed for processing binlog with multi-byte charsets.
warnings  (\W) Show warnings after every statement.
nowarning (\w) Don't show warnings after every statement.
resetconnection(\x) Clean session context.

For server side help, type 'help contents'

helpコマンドではMySQLのHELPに渡した引数の文字列を検索します。ただし、複数の候補がある場合は、さらに文字列を追加して項目を絞ります。

例えば、CREATE USER構文のhelpが読みたい場合、⁠CREATE」という文字列だけではCREATE USER構文やCREATE DATABASE構文が存在するため、\? CREATE USERと入力します。

詳しい使い方については第42回 MySQLのちょっとコアなドキュメントを探しにいこうのサーバーサイドヘルプをご参考ください。

\c (clearコマンド)

clearコマンドは入力中のステートメントを取り消すことができます。
例えば途中まで入力していたステートメントをやめて他のステートメントを実行する場合などに有効です。

\P、\n (pager、nopagerコマンド)

pagerコマンドはページング機能を有効にします。こちらは出力結果をlessやmoreなどのコマンドを使って確認することができます。
pagerにgrepを渡すことでgrepコマンドを実行することもできます。
nopagerを実行すると無効にすることができます。

(出力結果をlessで確認する例)
mysql&gt pager less
PAGER set to 'less'

mysql&gt SELECT * FROM d1.t1;
8 rows in set (0.00 sec)
(出力結果をgrepする例)
mysql&gt pager grep 'two'
PAGER set to 'grep 'two''
mysql&gt SELECT * FROM d1.t1;
|    2 | two   |
8 rows in set (0.00 sec)

\R (promptコマンド)

プロンプトを指定の文字列に変更することができます。また、特殊文字シーケンスを利用することで、現在使用中のデータベースや時間なども表示することができます。
デフォルトはmysql&gtとなっています。複数のトランザクションの検証を実施するときなどにプロントをtrx1,trx2 ...のようにトランザクションごとに変更しておくと区別しやすくなり便利です。特殊文字シーケンスの一覧は公式ドキュメントのmysql コマンドの項目をご確認ください。

mysql&gt \R \D >
PROMPT set to '\D >'
Mon Jul 30 08:46:34 2018 >

\s (statusコマンド)

statusコマンドは接続中のMySQLのcharactersetやアップタイムを確認することができます。
また、pagerを実行したり、delimiterを変更した場合もここで確認することが可能です。

mysql&gt status
--------------
/usr/local/mysql/bin/mysql  Ver 8.0.11 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

Connection id:		19
Current database:
Current user:		root@localhost
SSL:			Not in use
Current pager:		stdout
Using outfile:		''
Using delimiter:	;
Server version:		8.0.11 MySQL Community Server - GPL
Protocol version:	10
Connection:		Localhost via UNIX socket
Server characterset:	utf8mb4
Db     characterset:	utf8mb4
Client characterset:	utf8mb4
Conn.  characterset:	utf8mb4
UNIX socket:		/tmp/mysql.sock
Uptime:			5 days 13 hours 16 min 50 sec

Threads: 3  Questions: 103  Slow queries: 0  Opens: 177  Flush tables: 2  Open tables: 153  Queries per second avg: 0.000
--------------

\. (sourceコマンド)

sourceコマンドは引数に渡したSQLファイルを実行します。

mysql&gt source /home/mysql/sample.sql
Query OK, 1 row affected (0.10 sec)

\! (systemコマンド)

systemコマンドはUnixのshellコマンドを実行します。
実行後はmysqlクライアントに戻るため、一時的にリソースや、ファイルの場所を確認したりする際に利用します。

mysql&gt system echo "test"
test

\W、\w (warnings、nowarningsコマンド)

statementを実行後のwarningの表示を切り替えます。

mysqlクライアントのhistoryについて

mysqlコマンドラインクライントで実行した各コマンドは、homeディレクトリの.mysql_historyというファイルに保存されており、方向キーの↑(上)で遡ることができます。この.mysql_historyファイルを削除するとコマンド履歴を一括で削除することができます。
通常この履歴には、IDENTIFIEDPASSWORDという文字列については大文字、小文字関係なく履歴には残りません。もし他の文字列を履歴として残さないようにする場合は、mysqlコマンドラインクライアントを実行時に--histignoreを利用して、コロン区切りで文字列を追加します。

DELETE、INSERT構文を履歴に残さないようにmysqlコマンドラインクライアントを実行する例
$ mysql --histignore '*DELETE*:*INSERT*' -u root -p

また、履歴を一切残さないようにするには、.mysql_historyファイルを/dev/nullへのシンボリックリンクとして作成するか、MYSQL_HISTFILE環境変数を/dev/nullに指定します。詳細は公式ドキュメントのmysqlのロギングの履歴ファイルの制御を御覧ください。

まとめ

今回はmysqlコマンドラインクライアントのコマンドの紹介とhistoryについて説明しました。様々なオプションやコマンドを試してmysqlコマンドラインクライアントを使いこなして行きましょう。

おすすめ記事

記事・ニュース一覧