以下是我发现在MySQL中显示错误和警告的查询:
SELECT
`DIGEST_TEXT` AS `query`,
`SCHEMA_NAME` AS `db`,
`COUNT_STAR` AS `exec_count`,
`SUM_ERRORS` AS `errors`,
(ifnull((`SUM_ERRORS` / nullif(`COUNT_STAR`,0)),0) * 100) AS `error_pct`,
`SUM_WARNINGS` AS `warnings`,
(ifnull((`SUM_WARNINGS` / nullif(`COUNT_STAR`,0)),0) * 100) AS `warning_pct`,
`FIRST_SEEN` AS `first_seen`,
`LAST_SEEN` AS `last_seen`,
`DIGEST` AS `digest`
FROM
performance_schema.events_statements_summary_by_digest
WHERE
((`SUM_ERRORS` > 0) OR (`SUM_WARNINGS` > 0))
ORDER BY
`SUM_ERRORS` DESC,
`SUM_WARNINGS` DESC;
是否有某种方法可以深入查看performance_schema,以找到与上面的errors
或warnings
相关联的确切错误消息?
如果db
列或query
列显示为NULL
,我也很好奇。以下是我所谈论的一些具体例子
+---------------------+--------+------------+--------+----------+--------+
| query | db | exec_count | errors | warnings | digest |
+---------------------+--------+------------+--------+----------+--------+
| SHOW MASTER LOGS | NULL | 192 | 192 | 0 | ... |
+---------------------+--------+------------+--------+----------+--------+
| NULL | NULL | 553477 | 64 | 18783 | NULL |
+---------------------+--------+------------+--------+----------+--------+
| SELECT COUNT ( * ) | NULL | 48 | 47 | 0 | ... |
|FROM `mysql` . `user`| | | | | |
+---------------------+--------+------------+--------+----------+--------+
我也愿意使用不同的查询,有人可能需要显示这些错误/警告
答案 0 :(得分:1)
邮件将位于performance_schema.events_statements_history.message_text
列中。您需要确保performance_schema_events_statements_history_size
配置变量设置为正值且足够大的值,并且启用了历史记录集合。要启用历史记录收集,请运行:
update performance_schema.setup_consumers set enabled='YES'
where name='events_statements_history';
检查是否已启用:
select * from performance_schema.setup_consumers where
name='events_statements_history';
NULL
值db
表示没有选择活动数据库。请注意,活动数据库不必与查询中涉及的表的数据库相同。如果未在查询中明确指定活动数据库,则将其用作默认数据库。
这只会提供错误消息,而不是警告消息。从简短的代码看,警告文本似乎没有记录在任何地方 - 这是可以理解的,因为一个语句可以产生数百万个。所以你有几个选择:
events_statements_history.sql_text
中提取语句,重新执行该语句,然后运行SHOW WARNINGS
SHOW WARNINGS
的输出,以便在手动执行无法重现警告时将其捕获。