07 查看与设置系统变量

查看与设置系统变量

MySQL 服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为 MySQL 系统变量。

1. 查看系统变量

SHOW VARIABLES [LIKE 匹配的模式];

SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];

2. 设置系统变量

  • 通过启动参数设置(略)

  • 运行过程中设置

对于大部分系统变量来说,它们的值可以在服务器程序运行过程中进行动态修改而无需停止并重启服务器。

2.1 不同范围的系统变量

对于同一个系统变量,我们有时想让不同的客户端有不同的值。例如,对于客户端A,默认引擎是InnoDB,对于客户端B,默认引擎是MyISAM。

  • GLOBAL :全局变量,影响服务器的整体操作。

  • SESSION :会话变量,影响某个客户端连接的操作。

在服务器启动时,会将每个Global变量初始化为其默认值(可以通过命令行或选项文件中指定的选项更改这些默认值)。然后服务器还为每个连接的客户端维护一组Session变量,客户端的会话变量在连接时使用相应全局变量的当前值初始化。

通过启动选项设置的系统变量的作用范围都是 GLOBAL 的,也就是对所有客户端都有效的,因为在系统启动的时候还没有客户端程序连接进来。

2.2 设置系统变量

语法

SET [GLOBAL|SESSION] 系统变量名 = 值;
SET [@@(GLOBAL|SESSION).]var_name = XXX;

GLOBAL

语句一:SET GLOBAL default_storage_engine = MyISAM;
语句二:SET @@GLOBAL.default_storage_engine = MyISAM;

SESSION

语句一:SET SESSION default_storage_engine = MyISAM;
语句二:SET @@SESSION.default_storage_engine = MyISAM;
语句三:SET default_storage_engine = MyISAM;

2.3 系统变量范围的注意点

  • 并不是所有系统变量都具有 GLOBAL 和 SESSION 的作用范围。

    • GLOBAL:有一些系统变量只具有 GLOBAL 作用范围,比方说 max_connections ,表示服务器程序支持同时最多有多少个客户端程序进行连接。
    • SESSION:有一些系统变量只具有 SESSION 作用范围,比如 insert_id ,表示在对某个包含 AUTO_INCREMENT 列的表进行插入时,该列初始的值。
    • 都有:有一些系统变量的值既具有 GLOBAL 作用范围,也具有 SESSION 作用范围,比如我们前边用到的 default_storage_engine ,而且其实大部分的系统变量都是这样的,
  • 有些系统变量是只读的,并不能设置值

    • 比方说 version ,表示当前 MySQL 的版本,我们客户端是不能设置它的值的,只能在 SHOW VARIABLES 语句里查看。