MySQL的系统变量

2023-05-22 00:00:00 变量 会话 设置 服务器 全局变量

MySQL的各种选项除了可以通过命令行和配置文件进行设置,还可以通过服务器的系统变量进行设置。本篇将介绍MySQL服务器的系统变量。

MySQL的服务器系统变量影响的范围有两种,全局变量(GLOBAL)和会话变量(SESSION)。全局变量影响服务器全体的操作,会话变量仅影响当前客户端的连接。全局变量通过“SET GLOBAL 变量名”或者“SET @@golbal.变量名”进行设置,会话变量通过“SET SESSION 变量名”或“SET @@session.变量名”进行设置。有一些变量可以在两种范围内分别设置,例如,“sort_buffer_size”,“join_buffer_size”。各种变量及变量值可以通过“SHOW”语句,或查询Performance_Schema中的表来获得。

  • global_variables;全局系统变量

  • session_variables:当前会话的变量

  • variables_by_thread:当前活动的每个会话变量

  • persisted_variables:持久化的全局变量

  • variables_info:近设置系统变量的来源信息


查看全部变量及变量值使用如下语句:

SHOW [GLOBAL!SESSION] VARIABLES;

查询指定的变量使用如下语句:

SHOW VARIABLES LIKE 'read_only';

通过Performance_Schema查询变量时,使用如下语句:


SELECT * FROM global_variables WHERE VARIABLE_NAME='pid_file';SELECT * FROM persisted_variables;SELECT * FROM variables_by_thread WHERE THREAD_ID=28 AND VARIABLE_NAME='sort_buffer_size';SELECT VARIABLE_NAME,VARIABLE_SOURCE,VARIABLE_PATH FROM VARIABLES_INFO;

当MySQL服务器运行时,一部分变量可以动态设置,可以避免改动配置文件和服务器的重启。当用户更改全局变量时,将影响全部新的连接,当用户更改会话变量时,将影响当前的连接。

MySQL8.0增加了动态权限,当用户更改全局变量时,需要具有“SYSTEM_VARIABLES_ADMIN”或“SUPER”权限。设置会话变量时无需特殊的权限,通过客户端仅能更改当前的会话变量。当用户在设置变量时没有指定范围,如果该变量可以设置为会话范围,则更改会话变量的值,如果该变量无法设置为会话范围,则报错。

MySQL提供了“SET PERSIST”命令,用于将全局变量持久化,服务器重启后,不会对该变量产生影响。持久化的详细信息将使用JSON格式记录在数据路径下的“mysqld-auto.cnf”文件中,信息包括变量名称、当前值,及更改者信息。该文件将在MySQL启动的后进行读取,因此,其中记载的变量值的优先级将高于配置文件和命令行输入的值。

以上内容是关于MySQL服务器系统变量的介绍,感谢关注“MySQL解决方案工程师”!

相关文章