暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL8.0新特性~设置不记录某些错误到error log

进击的CJR 2024-07-04
169

在MySQL8.0 中 error lo相关参数多了log_error_services 和log_error_suppression_list ,另外log_error_verbosity 的默认值变成了2

5.7.33

+---------------------+----------------------+
| Variable_name       | Value                |
+---------------------+----------------------+
| log_error           | ./VM-20-8-centos.err |
| log_error_verbosity | 3                    |
+---------------------+----------------------+
2 rows in set (0.00 sec)


8.0.25

mysql> show variables like 'log_erro%';
+----------------------------+----------------------------------------+
| Variable_name              | Value                                  |
+----------------------------+----------------------------------------+
| log_error                  | ./VM-20-8-centos.err                   |
| log_error_services         | log_filter_internal; log_sink_internal |
| log_error_suppression_list |                                        |
| log_error_verbosity        | 2                                      |
+----------------------------+----------------------------------------+
4 rows in set (0.01 sec)z

log_error_services

在MySQL中,log_error_services 允许你配置一系列的日志过滤器和日志接收器(sinks),以控制错误日志的生成和输出。这些组件共同决定了哪些日志消息应该被记录,以及它们应该被发送到哪里。

log_filter_internal:

这是一个内置的日志过滤器组件。
它的主要目的是过滤掉那些不需要记录到错误日志的消息。
默认情况下,log_filter_internal 会过滤掉一些不太重要的消息,如警告、通知等,只保留错误和严重警告。
你可以通过配置log_filter_internal的过滤级别来改变它的行为,例如让它也记录警告消息。

log_sink_internal:

这是一个内置的日志接收器(sink)组件。
它的主要任务是将日志消息写入到指定的目的地。
默认情况下,log_sink_internal 会将日志消息写入到由 log_error 系统变量指定的文件中,通常是hostname.err文件,除非你改变了log_error的设置。
你可以配置多个sinks,并且log_sink_internal 只是其中之一。其他的sinks,如 log_sink_json 或 log_sink_syseventlog,也可以被配置来同时接收和处理日志消息。
当你设置 log_error_services 为 log_filter_internal; log_sink_internal 时,你实际上是在告诉MySQL:首先使用 log_filter_internal 过滤器来筛选日志消息,然后将筛选后的消息发送到 log_sink_internal 接收器进行记录。

这种配置方式提供了很大的灵活性,因为你可以很容易地添加、删除或修改过滤器和接收器,以满足特定的日志记录需求。同时,它也使得错误日志的管理和监控变得更加简单和高效。

log_error_verbosity

的值可以是 0 到 3 之间的整数,每个级别都决定了不同的日志详细程度:

0 (最低详细程度): 只记录严重的错误消息,例如服务器启动失败或表损坏等。
1 (低详细程度): 记录错误消息和一些警告。这是默认的设置。
2 (中详细程度): 除了错误和警告之外,还记录一些重要的通知信息。这通常用于诊断问题,因为它提供了比默认设置更多的上下文信息。
3 (高详细程度): 记录所有类型的消息,包括调试信息。这通常只在开发或调试阶段使用,因为它会产生大量的日志输出。

log_error_suppression_list

MySQL的error log中记录了实例启停,运行期间的错误、警告和注释,以及堆栈跟踪、innodb死锁,表的修复等一些诊断信息。对DBA分析、排查MySQL实例的问题非常有帮助。

但是在实际的环境中可能存在大量的注释信息,或者已知的警告或错误信息大量写入错误日志,增加分析和排查的困难,针对这种需求MySQL提供了参数log_error_suppression_list、log_error_verbosity能够按需设置写入错误日志的信息。

参数log_error_suppression_list、log_error_verbosity生效的前提条件需启用log_filter_internal(默认)。

log_error_suppression_list参数(8.0.13开始支持),顾名思义作用是“抑制”哪些信息写入错误日志,默认是空字符串。可以设置成需要“抑制”的错误代码,错误代码可以是 symbolic 或者 numeric,多个代码用逗号分隔。 numeric形式的代码可以是全称,也可以不加MY-和前缀零。例如MY-010926,MY-10926,010926,10926都是合法的。

mysql> set global log_error_suppression_list='MY-010926,MY-010914';
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> show variables like 'log_erro%';
+----------------------------+----------------------------------------+
| Variable_name              | Value                                  |
+----------------------------+----------------------------------------+
| log_error                  | ./VM-20-8-centos.err                   |
| log_error_services         | log_filter_internal; log_sink_internal |
| log_error_suppression_list | MY-010926,MY-010914                    |
| log_error_verbosity        | 3                                      |
+----------------------------+----------------------------------------+
4 rows in set (0.00 sec)

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论