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が便利
実際には下記のような流れで検証した。
- DBを起動する
- mysqlコマンドを実行する
- DBを停止する
- エラー出力を確認する
この際、mysqlコマンドが実行中にDBを停止する必要があるのだが、そんなに都合よく重いクエリなんてないと思ったら、MySQLはsqlでsleepできる(SLEEP関数がある)。
SELECT SLEEP(10)
引数に止めたい秒を渡してあげると、その時間sleepしてくれる。
今回はmysqlコマンドの検証に使ったけど、重いクエリ発行時の挙動確認とか、テスト関連で使い所がありそう。
参考
https://dev.mysql.com/doc/refman/5.6/ja/miscellaneous-functions.html#function_sleep