在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)