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解决方案工程师”!