MySQL 中的系统变量是MySQL自带的变量参数,用于对MySQL服务器的配置,其对所有客户端生效。系统变量根据其作用范围可分为全局级(Global)和会话级(Session),顾名思义,前者是对整个MySQL服务器生效,后者只对当前连接的客户端会话生效。有些系统变量会同时拥有全局级和会话级。MySQL 客户端连接之后,会使用全局级的系统变量来对当前会话的会话级系统变量进行初始化工作。需要注意的是,客户端连接建立之后,全局级系统变量的修改将不会影响到该客户端的会话级系统变量中。与此同时,本文也将对MySQL的状态变量作简要介绍
查看系统变量
前文所述,系统变量分为全局级(Global)和会话级(Session),故在客户端连接到服务端后,可以分别查看全局级的系统变量和当前连接会话的会话级系统变量
查看会话级系统变量
显示所有当前会话级系统变量的配置。当不显式指定为session时,将优先显示会话级系统变量(如果不存在,将显示全局级系统变量)
1 | show session variables; -- 显示所有当前会话级系统变量 |
日常开发中,更多的是查看我们care的相关变量,为此可以在其后面使用 like 语句进行变量名匹配,其pattern中同样支持 % 进行模糊匹配
1 | show session variables like [pattern]; |
示例如下:
查看系统变量的配置结果时,有时候其结果并不是配置的实际值,例如上图的 autocommit 项,如果期望查看该项配置的实际值,可以通过下述命令实现。同样地,当不显式指定为session时,将优先显示会话级系统变量(如果不存在,将显示全局级系统变量)
1 | select @@session.[variableName]; -- 查看指定变量的会话级系统变量的值 |
示例如下:
查看全局级系统变量
显示所有当前全局级系统变量的配置
1 | show global variables; |
日常开发中,更多的是查看我们care的相关变量,为此可以在其后面使用 like 语句进行变量名匹配,其pattern中同样支持 % 进行模糊匹配
1 | show global variables like [pattern]; |
示例如下:
查看系统变量的配置结果时,有时候其结果并不是配置的实际值,例如上图的 autocommit 项,如果期望查看该项配置的实际值,可以通过下述命令实现。
1 | select @@global.[variableName]; -- 查看指定变量的全局级系统变量的值 |
示例如下:
修改系统变量
前文所述,系统变量分为全局级(Global)和会话级(Session),所以,修改系统变量,也同样分为两种情形:修改会话级系统变量、修改全局级系统变量
修改会话级系统变量
可通过下述命令,来修改会话级系统变量。其只对当前连接的客户端的当次连接会话生效,对其他客户端无效。同样地,当不显式指定为session时,将默认修改会话级系统变量
1 | set session variable = value; |
示例如下:
修改全局级系统变量
可通过下述命令,来修改全局级系统变量。如前所述,全局级系统变量用于在客户端建立连接时来初始化该连接会话的会话级系统变量。所以在Client 1修改了全局级系统变量后,该客户端的当次会话级系统变量的值不会发生更新。而只有其后续的新客户端连接时,才会应用修改后的全局级系统变量来初始化新连接的会话级系统变量
1 | set global variable = value; |
示例如下:
查看状态变量
状态变量,用于反应MySQL服务的运行状态信息,故只可看不可写。与系统变量类似,其也分为全局级(Global)和会话级(Session)。可通过下面语句查看状态变量。若未显式地指定global或session,则默认为session
1 | show [session|global] status [like pattern]; -- 查看状态变量 |
日常开发中,更多的是查看我们care的相关状态变量,为此可以在其后面使用 like 语句进行变量名匹配,其pattern中同样支持 % 进行模糊匹配
1 | show [session|global] status like [pattern]; |
示例如下