WindowsServerにMySQLをインストールして運用するなんて稀だ。稀すぎてネットの海ではそう簡単に見つけられない。この無名なブログに頼る必要があるほどないわけでもないが、忘れないようにメモ。先日Windows batファイルからMySQLを操作してクエリログをローテーションする記事を書いた。その時の記事はこちら。
bishop.hatenadiary.com
この記事で使ったコマンドで、
mysql --defaults-extra-file=hoge.cnf -e "set global general_log=0;"
というものがあった。mysqlのコマンド引数には、-uや-pでユーザを指定したりパスワードを平打ちできるものがある。分かりやすいように便宜的に”平打ち引数”と呼ぼう。この平打ち引数は、通常コマンドプロンプトからMySQLをいじるときは当然楽で便利なのだが、MySQL5.6からWarningが出るようになった。
Warning: Using a password on the command line interface can be insecure.
セキュリティに問題がありますよって。
確かに。
実際batファイルでも実行はされてるので、気にしない人は気にしなくても構わないが、コマンドラインのセキュリティに不安を感じる諸兄は、セキュリティ情報を隔離して別途読み込みする方法が無難だろう。それが、--defaults-extra-fileオプションである。その使い方を説明、メモしておく。
設定ファイルの準備
まずは、下記を記述したファイルを用意しよう。
[client]
user=hoge
password=hogehoge
hogeとhogehogeは諸兄の環境で適宜変更してください。ファイル名はなんでもいいが、拡張子はcnfで保存する。保存する場所もどこでもいい。作るbatファイルと同じところに置いても構わないが、おススメはしない。また、MySQL自体の設定ファイルであるmy.iniがMySQLのインストールフォルダにあると思うが、これとは別ファイルにする。今回は「hoge.cnf」という名前で、Dドライブのetcフォルダ(D:\etc)に保存したと仮定して、サンプルを作る。
batファイル本体
@echo off mysql --defaults-extra-file=D:\etc\hoge.cnf -d "testdb" -e "select * from user_master" pause
このサンプルでは、--defaults-extra-fileオプションで接続情報として先ほど作成したhoge.cnfを読み込んでいる。-dオプションで接続先のDBを指定して-eでSQLを実行していることとなる。実際には、バッチファイルで直接SQLを実行することって今どきそんなにないと思うので、先のログローテーションや、Windowsで立ててしまったために監視やらなんやらをbatやVBSでなんとかしたい場合に使うことになると思う。例えばshow slave statusでレプリケーションの状態を定期的に取得したい時とか。