问题描述
应用侧对数据库的某些操作失败,但是应用侧并没有记录 SQL 执行失败的错误信息,那么在 RDS for MySQL 中如何查看具体的失败信息?
问题分析
对于 SQL 语句的语法错误,错误日志并不会记录,那么这个时候我们就需要查询 performance_schema 库中的语句事件记录表进行查看分析。
问题验证
1. 修改参数并重启
修改 RDS for MySQL 的 performance_schema 参数,设置为 ON
mysql> show variables like 'performance_schema';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| performance_schema | ON |
+--------------------+-------+
1 row in set (0.00 sec)
默认 performance_schema 是不打开的,会有性能损耗
2. 模拟报错
Session 1 执行如下 SQL
mysql> select id from code;
ERROR 1146 (42S02): Table 'lxb.code' doesn't exist
如果我们知道执行失败 SQL 的内容,可以通过关键字搜索,例如库名或者表名,我们可以执行如下 SQL
mysql> select THREAD_ID,SQL_TEXT,MYSQL_ERRNO,MESSAGE_TEXT from events_statements_history where SQL_TEXT like '%code%' \G;
*************************** 1. row ***************************
THREAD_ID: 146353
SQL_TEXT: select id from code
MYSQL_ERRNO: 1146
MESSAGE_TEXT: Table 'lxb.code' doesn't exist
1 row in set (0.00 sec)
ERROR:
No query specified
从结果中,我们可以看到线程的 ID 信息, SQL 的错误代码 MYSQL_ERRNO,SQL 的错误信息 MESSAGE_TEXT。 只能查看最近时间段的 SQL 错误信息,因为默认只保留每个线程的10个错误信息,如果多了会被覆盖掉。
参考文档
https://dev.mysql.com/doc/refman/8.0/en/performance-schema-events-statements-history-table.html 如果您有其他问题,欢迎您联系火山引擎技术支持服务