MySQL sys 系统库作为 MySQL 的管理工具集,从 MySQL 5.7 开始被引入,它帮助数据库管理员简化了性能监控和诊断工作。随着 MySQL 的发展,sys 系统库的功能也逐渐完善,比如在 MySQL 5.8 中,sys_config 表管理变得更加便捷,配置也变得更灵活。接下来,我将对 sys_config 表及相关的功能做一个详细说明,并通过举例使内容更加易于理解。

在 MySQL 5.8 中,sys 系统库中包含的 sys_config 表用于存储数据库中的配置信息。通过修改这个表,可以轻松对系统配置进行持久化管理,也就是说,即使重启数据库,配置也不会丢失。
sys_config 表提供了一个集中管理 MySQL 系统配置选项的方式,允许用户根据需要进行调整和优化。通过理解这些配置项及其含义,用户可以更好地管理和调优 MySQL 实例的性能和行为。
SELECT * FROM sys.sys_config;
可以通过查询 sys_config 表来查看当前的配置选项及其状态。
mysql> SELECT * FROM sys.sys_config;
+--------------------------------------+-------+---------------------+--------+
| variable | value | set_time | set_by |
+--------------------------------------+-------+---------------------+--------+
| diagnostics.allow_i_s_tables | OFF | 2024-05-23 16:33:49 | NULL |
| diagnostics.include_raw | OFF | 2024-05-23 16:33:49 | NULL |
| ps_thread_trx_info.max_length | 65535 | 2024-05-23 16:33:49 | NULL |
| statement_performance_analyzer.limit | 100 | 2024-05-23 16:33:49 | NULL |
| statement_performance_analyzer.view | NULL | 2024-05-23 16:33:49 | NULL |
| statement_truncate_len | 64 | 2024-05-23 16:33:49 | NULL |
+--------------------------------------+-------+---------------------+--------+
6 rows in set要修改这些配置,可以通过 SET 命令来调整自定义变量,然后这些变量会在当前会话中生效。例如:
SET @sys.statement_truncate_len = 32;这样,format_statement() 函数在当前会话中的最大长度将调整为 32 字节。要恢复默认值,可以将自定义变量设为 NULL:
SET @sys.statement_truncate_len = NULL;在 MySQL 5.8 中,sys 系统库对配置的读取是有优先级的。每当 MySQL 的视图、存储过程或函数调用某些配置项时,它们首先会检查是否有相应的会话级自定义配置变量存在。如果存在且非空,系统会优先使用自定义变量的值;否则,将从 sys_config 表中读取默认配置。
例如,statement_truncate_len 配置项控制 SQL 语句在调用 format_statement() 函数时的最大长度,默认情况下,语句长度被限制为 64 个字符。
如果想在当前会话中将这个长度修改为 32 个字符,可以使用如下命令:
SET @sys.statement_truncate_len = 32;此时,任何调用 format_statement() 的函数都会使用这个会话变量的值(32 个字符)。如果希望恢复默认配置(64 个字符),可以将这个变量设为 NULL 或者重启会话:
SET @sys.statement_truncate_len = NULL;注意:如果当前会话中存在自定义变量值(如上例中的 32),那么即使在 sys_config 表中修改了 statement_truncate_len,对当前会话来说,新的值也不会生效。
sys_config 表的联动可以通过自定义配置变量临时修改某些配置项,而无需直接修改 sys_config 表。例如,当执行 SQL 语句性能分析时,可以临时调整某些设置,而这些设置仅对当前会话生效,不会影响其他会话。
假设要暂时将 statement_performance_analyzer.limit 从默认的 100 修改为 50,可以执行以下操作:
SET @sys.statement_performance_analyzer.limit = 50;执行此操作后,任何基于 statement_performance_analyzer() 的查询都将返回最多 50 行。如果希望恢复默认的 100 行限制,只需将该变量设为 NULL:
SET @sys.statement_performance_analyzer.limit = NULL;在 MySQL 5.8 中,sys_config 表的 insert 和 update 操作会触发两个触发器:
set_by 字段设置为当前用户。set_by 字段设置为当前用户。注意事项:
通过 sys_config 表,MySQL 5.8 提供了灵活的配置持久化和会话级自定义变量功能。可以根据具体需求,调整系统的行为或性能监控设置,而这些配置既可以临时应用于当前会话,也可以通过修改 sys_config 表来永久生效。
使用这些配置项和触发器时,务必注意 mysql.sys 用户的权限管理,以及会话变量与 sys_config 表配置的优先级关系,以避免潜在的配置冲突问题。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。