最近ではバッチ化や自動化等をして直接手動で作業するということは少なくなったかと思いますが、
mysqlクライアントの履歴に関して
第77回 mysqlコマンドラインクライアントの2ページめで紹介されているように、.mysql_に書き込まれます。
DockerのMySQLイメージを使って確認してみましょう。
$ docker-compose exec mysql bash root@f1e1c7cd03a5:/# mysql -uroot -ppassword mysql> exit
.mysql_history の基本機能に関して
ログインしてexitだけ行った場合に、.mysql_を表示してみます。
root@f1e1c7cd03a5:~# cat /root/.mysql_history _HiStOrY_V2_ exit
上記のように記憶されていることがわかります。
再度ログインをして上キーを押すと、
root@f1e1c7cd03a5:~# mysql -uroot -ppassword mysql> exit
このように、
root@f1e1c7cd03a5:~# cat /root/.mysql_history _HiStOrY_V2_ exit 良いお年を root@f1e1c7cd03a5:~# mysql -uroot -ppassword mysql> 良いお年を
あまりないかもしれませんが、_HiStOrY_は最初に登場するものだけが認識されるので、
また、
mysql> bck:
試してみる前に、
root@f1e1c7cd03a5:~# cat /root/.mysql_history _HiStOrY_V2_ exit こんにちは exit select\0401; select\04012; select\04013; select\04014; select\04015; select\04016; select\04017; exit
この状態でctrl+rを押して検索モードに入り、select 17;というコマンドが表示されました。
mysql> select 17; bck:s
この状態で、select 16;、select 15;といったように順々に検索条件に合致するコマンドを探していくことができます。使いたいSQLが見つかった場合はEnterキーを押すと検索モードから抜けて、
また、.mysql_はホームディレクトリに配置されると書きましたが、
今回/root/に置くように指定をしていきます。
root@f1e1c7cd03a5:~# mkdir /root/history root@f1e1c7cd03a5:~# export MYSQL_HISTFILE="/root/history/history_file"
続けて、
root@f1e1c7cd03a5:~# mysql -uroot -ppassword mysql> select 1; mysql> select 2; mysql> exit
上記の結果がMYSQL_
root@f1e1c7cd03a5:~# cat /root/history/history_file _HiStOrY_V2_ select\0401; select\0402; exit
このように、
historyを保存しないようにする
historyを保存しないようにするにはいくつか方法があり、
1つは.mysql_を/dev/のシンボリックリンクにするという方法があります。/dev/はLinuxの特殊なファイルで書き込んだ文字列を全て捨てるという処理をします。
root@f1e1c7cd03a5:~# ln -s /dev/null /root/.mysql_history ln: failed to create symbolic link '/root/.mysql_history': File exists
今の状態でシンボリックリンクを作ろうとすると、
root@f1e1c7cd03a5:~# rm /root/.mysql_history root@f1e1c7cd03a5:~# ln -s /dev/null /root/.mysql_history
mysqlクライアントが書き込もうとしたhistoryが、
もう1つは似たような話になってしまいますが、MYSQL_を/dev/に向けてしまうという方法があります。
続いて、--histignoreオプションを指定することで、"*IDENTIFIED*:*PASSWORD*"が指定されています。これは、
Dockerで建てたMySQLを再起動して、
mysql> CREATE USER 'kk2170'@'localhost' IDENTIFIED BY 'test'; root@43cfa3e9ffe9:/# cat /root/.mysql_history _HiStOrY_V2_ exit
確認してみたところ、--histignoreオプションで指定したオプションはそれらに加える形で追加されるため、"*IDENTIFIED*:*PASSWORD*"を改めて設定する必要はありません。
パターンは大文字小文字を区別せずに、:区切りで登録ができます。使用できる特殊文字は2つで、?と*です。*は長さ0以上の任意の文字列を指していて、?は長さ1の任意の文字を表しています。
つまり、--histignore="*"と登録すると、
この--histignoreは、--histignoreに設定したものが使用されます。
まとめ
今回は、