mysqlコマンドのエラー出力をログに吐く #mysql

mysqlコマンドは問題発生時はエラー出力にメッセージを吐くので、標準エラーをファイルにリダイレクトしてやればよい。

mysql -u root sample_db < test.sql >> result.log 2>> error.log

この場合だと、test.sqlを実行した結果、result.logに標準出力が、error.logに標準エラー出力が吐かれる。

どんなエラーが吐かれるか?

例えばDBと接続が切れた場合などは、下記のようなエラーが吐かれる。

ERROR 2013 (HY000) at line 3: Lost connection to MySQL server during query

検証にはSLEEPが便利

実際には下記のような流れで検証した。

  1. DBを起動する
  2. mysqlコマンドを実行する
  3. DBを停止する
  4. エラー出力を確認する

この際、mysqlコマンドが実行中にDBを停止する必要があるのだが、そんなに都合よく重いクエリなんてないと思ったら、MySQLsqlでsleepできる(SLEEP関数がある)。

SELECT SLEEP(10)

引数に止めたい秒を渡してあげると、その時間sleepしてくれる。

今回はmysqlコマンドの検証に使ったけど、重いクエリ発行時の挙動確認とか、テスト関連で使い所がありそう。

参考

https://dev.mysql.com/doc/refman/5.6/ja/miscellaneous-functions.html#function_sleep