TL;DR
- events_statements_*テーブル の
message_text
カラムにエラーメッセージが入っている - MySQL 5.6とそれ以降で使える
- こんな便利なものに気が付いていなかった…
注意
- MySQL 5.6では
events_statements_history
は enabled = ‘NO’ になっているので自分でUPDATE
する必要がある - events_statements_historyテーブル に記録されない場合、 events_statements_history_longテーブル を有効にするか、 performance_schema_events_statements_history_size を大きくするか
- 動作自体は説明するより↓を見てもらった方が速いと思う。
errors > 0
にしてエラーを返さなかったクエリーは無視warnings > 0
にはしたけど、ワーニングメッセージはmysql_errno
にもmessage_text
にも入ってこないのでダメだった。。
予約語を踏み抜いたり、
GROUP BY .. ASC
みたいなのはパースエラー( mysql_errno = 1064
) で出てくるので、それを知ってるとユニットテストとかと組み合わせて予約語対応も捗るかも知れない。mysql80 48> SELECT * FROM d1.t1 GROUP BY num ASC;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ASC' at line 1
mysql80 48> SELECT num AS rank FROM d1.t1 GROUP BY num ASC;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'rank FROM d1.t1 GROUP BY num ASC' at line 1
mysql80 48> SELECT thread_id, event_name, sql_text, current_schema, mysql_errno, message_text, errors, warnings FROM performance_schema.events_statements_history WHERE errors > 0 OR warnings > 0;
+-----------+---------------------+------------------------------------------------+----------------+-------------+----------------------------------------------------------------------------------------------------------------------------------+--------+----------+
| thread_id | event_name | sql_text | current_schema | mysql_errno | message_text | errors | warnings |
+-----------+---------------------+------------------------------------------------+----------------+-------------+----------------------------------------------------------------------------------------------------------------------------------+--------+----------+
| 111 | statement/sql/error | SELECT * FROM d1.t1 GROUP BY num ASC | NULL | 1064 | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use | 1 | 0 |
| 111 | statement/sql/error | SELECT num AS rank FROM d1.t1 GROUP BY num ASC | NULL | 1064 | You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use | 1 | 0 |
+-----------+---------------------+------------------------------------------------+----------------+-------------+----------------------------------------------------------------------------------------------------------------------------------+--------+----------+
2 rows in set (0.00 sec)
0 件のコメント :
コメントを投稿