「MySQL」- 系统变量(System Variables)

  CREATED BY JENKINSBOT

环境概述

MySQL 8.0

系统变量(System Variables)是什么?

系统变量,由 MySQL 维护,用于控制 MySQL 行为。

某些系统变量是由组件与插件安装的变量,当插件或组件安装后才可使用。这些变量具有“组件名前缀”(或“插件名前缀”),但是他们依旧属于系统变量。

系统变量的作用范围

全局 与 会话

系统变量具有两个作用范围:全局,影响服务的整个操作;会话,影响当前客户端连接的操作;

给定的某个系统变量,可以同时具有全局值会话值

两者之间的关系

在服务启动时,所有全局变量初始化为默认值,或者在选项中配置的值。

在客户端连接时,使用全局变量值初始化会话变量值。注意,某些特殊变量,会话参数值不会被全局参数值初始化,在文档描述中会有说明

如何设置系统变量?

每个系统变量都有默认值。

在启动时,可以通过命令行选项设置;或者通过配置文件(my.cnf)设置;

在运行时,多数变量可以通过 SET 语句设置,这无需重启或停止数据库。

命令行选项

1)与普通命令行选项无异
2)使用横线、下划线皆可:--general_log=ON--general-log=ON
3)可以使用单位(K、M、G),大小写皆可:–innodb-log-file-size=16M –max-allowed-packet=1G

通过命令行选项 –maximum-var_name=value 形式,可以限制 SET 可设置的参数最大值。

配置文件(my.cnf)

1)与命令行选项类似,只需去除前缀:

[mysqld]
innodb_log_file_size=16M
max_allowed_packet=1G

使用 SET 语句

多数变量可以使用 SET 语句修改:
1)通过名称引用;
2)并前缀修饰符(可选);
3)只能使用下划线,不能使用横线;

使用 SET 语句

设置全局变量(临时)

SET GLOBAL max_connections = 1000;
SET @@GLOBAL.max_connections = 1000;

设置全局变量(并持久化到 mysqld-auto.cnf 文件)

SET PERSIST max_connections = 1000;
SET @@PERSIST.max_connections = 1000;

设置全局变量(仅持久化到 mysqld-auto.cnf 文件)

SET PERSIST_ONLY max_connections = 1000;
SET @@PERSIST_ONLY.max_connections = 1000;

设置会话变量

SET SESSION sql_mode = 'TRADITIONAL';
SET @@SESSION.sql_mode = 'TRADITIONAL';
SET @@sql_mode = 'TRADITIONAL';

注意事项

在修改全局变量后,会为新连接使用新值;对于现有连接,修改全局变量的值不会影响到对应的会话变量(即使是在当前连接中只用SET GLOBAL语句,也不会影响对应的会话变量)。

在服务重启后,全局变量会失效。如果要持久化,应该写入配置文件。

查看系统变量

使用 SHOW VARIABLES LIKE 'var_mame'; 或者 SHOW VARIABLES 语句来查看系统变量。

注意事项:
1)建议使用下划线,因为变量都是以下划线存储在数据库中的。

需要的用于权限

Section 5.1.9.1, “System Variable Privileges”

参考文献

MySQL 中的变量:系统变量(包括:会话变量、全局变量)、会话变量(包括:局部变量、会话变量)
How to change MySQL system parameters/variables
MySQL 5.7 Reference Manual/13.7.4.1 SET Syntax for Variable Assignment