MySQL 系统变量(查看,修改)!

  • A+
所属分类:SQL技巧

MySQL 系统变量(查看,修改)!

MySQL的系统变量是由MySQL服务器管理的,用于控制服务器的各种行为和特性,本文主要介绍了MySQL 系统变量(查看,修改),感兴趣的可以了解一下。

MySQL的系统变量是由MySQL服务器管理的,用于控制服务器的各种行为和特性。这些变量由系统提供,不是用户定义的,并且属于服务器层面的语法。它们包括全局变量和会话变量。

全局变量:这些变量影响整个MySQL服务器,它们的更改需要具有相应的权限,并且通常需要重启服务器才能生效。
会话变量:这些变量仅对当前连接到服务器的客户端有效,每个连接都有自己的会话变量设置。

 示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 查看所有系统变量
SHOW GLOBAL | SESSION VARIABLES;
# 查看满足条件的部分系统变量
SHOW GLOBAL | SESSION VARIABLES LIKE '%char%';
# 查看指定的某个系统变量的值
SELECT @@global | session.系统变量名;
# 为某个系统变量赋值
SET GLOBAL | 【SESSION】系统变量名 = 值;
# 使用用户变量
SET @myvar = 1;
SELECT @myvar;

这里, @@global 或 @@session 是访问系统变量的特殊形式,用于区分全局变量和会话变量。

MySQL中的系统变量权限

MySQL的系统变量用于控制服务器的操作。它们可以是全局的(影响整个MySQL服务器实例),也可以是会话的(仅影响当前客户端会话),或者两者兼有。

你可以使用SET语句来动态地改变这些变量的值。例如:

  • 设置全局系统变量的运行时值

使用set global语句,该语句需要system_VARIABLES_ADMIN权限(或不推荐使用的SUPER权限)。例如:

1
SET GLOBAL max_connections = 1000;
  • 设置会话变量(仅影响当前会话):
1
SET SESSION sort_buffer_size = 256K;
  • 将全局系统变量的值持久化到 mysqld-auto.cnf 文件(并设置运行时值)

使用set persist语句,该语句需要system_VARIABLES_ADMIN或SUPER权限。

  • 仅将全局系统变量的值持久化到 mysqld-auto.cnf 文件(不设置运行时值)

使用SET persist_ONLY语句,该语句需要system_VARIABLES_ADMIN和persist_RO_VARIABLES_ADMIN权限。SET PERSIST_ONLY既可用于动态系统变量,也可用于只读系统变量,但对于不能使用SET PERSIST的持久只读变量特别有用。

  • 持久化限制的系统变量

一些全局系统变量是持久受限的。要持久化这些变量,请使用SET persist_ONLY语句,该语句需要前面描述的权限。此外,必须使用加密连接连接到服务器,并提供具有由persist_only_admin_x509_Subject系统变量指定的Subject值的SSL证书。

例如:

1
SET PERSIST max_connections = 1000;

或者:

1
SET GLOBAL PERSIST max_connections = 1000;

要从mysqld-auto.cnf文件中删除持久化的全局系统变量,请使用RESET PERSIST语句。这些特权适用于:

  • 对于动态系统变量,RESET PERSIST需要system_variables_ADMIN或SUPER权限。
  • 对于只读系统变量,RESET PERSIST需要system_variables_ADMIN和PERSIST_RO_variables_ADMIN权限。
  • 对于持久受限变量,RESET persist不需要使用特定SSL证书加密连接到服务器。

例如:

1
RESET PERSIST max_connections;

如果全局系统变量对前面的特权要求有任何异常,则变量描述会指示这些异常。示例包括default_table_encryption和commandory_roles,它们需要额外的权限。这些附加权限适用于设置全局运行时值的操作,但不适用于保留该值的操作。

要设置会话系统变量运行时值,请使用set session语句。与设置全局运行时值相比,设置会话运行时值通常不需要特殊权限,任何用户都可以进行设置以影响当前会话。对于某些系统变量,设置会话值可能会在当前会话之外产生影响,因此这是一项受限制的操作,只能由具有特殊权限的用户执行:

  • 从MySQL 8.0.14开始,所需的权限为SESSION_VARIABLES_ADMIN。

任何具有SYSTEM_VARIABLES_ADMIN或SUPER的用户实际上隐含地具有SESSION_VARIABLES _ADMIN,并且无需明确授予SESSION_VARIABLES_AADMIN。

  • 在MySQL 8.0.14之前,所需的权限是SYSTEM_VARIABLES_ADMIN或SUPER。

如果会话系统变量受到限制,则变量描述会指示该限制。示例包括binlog_format和sql_log_bin。设置这些变量的会话值会影响当前会话的二进制日志记录,但也可能对服务器复制和备份的完整性产生更广泛的影响。

SESSION_VARIABLES_ADMIN使管理员能够最大限度地减少先前可能已被授予SYSTEM_VARIABLES _ADMIN或SUPER的用户的权限占用,以使他们能够修改受限制的会话系统变量。假设管理员创建了以下角色以授予设置受限会话系统变量的能力:

1
2
CREATE ROLE set_session_sysvars;
GRANT SYSTEM_VARIABLES_ADMIN ON *.* TO set_session_sysvars;

任何被授予set_session_sysvars角色的用户(以及该角色处于活动状态的用户)都可以设置受限制的会话系统变量。然而,该用户也能够设置全局系统变量,这可能是不希望的。

通过将角色修改为具有SESSION_VARIABLES_ADMIN而不是SYSTEM_VARIABLES _ADMIN,可以将角色权限减少为设置受限会话系统变量的能力,而不设置其他内容。要修改角色,请使用以下语句:

1
2
GRANT SESSION_VARIABLES_ADMIN ON *.* TO set_session_sysvars;
REVOKE SYSTEM_VARIABLES_ADMIN ON *.* FROM set_session_sysvars;

修改角色会立即生效:任何被授予set_session_sysvars角色的帐户都不再具有SYSTEM_VARIABLES_ADMIN,并且在没有明确授予该功能的情况下无法设置全局系统变量。类似的GRANT/REVOKE序列可以应用于直接授予SYSTEM_VARIABLES_ADMIN而不是通过角色授予的任何帐户。

 

学习资料见知识星球。

以上就是今天要分享的技巧,你学会了吗?若有什么问题,欢迎在下方留言。

快来试试吧,小琥 my21ke007。获取 1000个免费 Excel模板福利​​​​!

更多技巧, www.excelbook.cn

欢迎 加入 零售创新 知识星球,知识星球主要以数据分析、报告分享、数据工具讨论为主;

MySQL 系统变量(查看,修改)!

你将获得:

1、价值上万元的专业的PPT报告模板。

2、专业案例分析和解读笔记。

3、实用的Excel、Word、PPT技巧。

4、VIP讨论群,共享资源。

5、优惠的会员商品。

6、一次付费只需99元,即可下载本站文章涉及的文件和软件。

  • 我的微信
  • weinxin
  • 我的知识星球
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: