如何记录RDS for MySQL 的 SQL 执行错误信息?

数据库关系型数据库技术服务知识库
问题描述

应用侧对数据库的某些操作失败,但是应用侧并没有记录 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 如果您有其他问题,欢迎您联系火山引擎技术支持服务

25
0
0
0
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论