每一个客户端成功连接服务器后,都会产生与之对应的会话。会话期间,MySQL 服务实例会在服务器内存中生成与该会话对应的会话变量,这些会话变量的初始值是全局变量值的拷贝。
查看系统变量
可以使用以下命令查看 MySQL 中所有的全局变量信息。
SHOW GLOBAL VARIABLES;
可以使用以下命令查看与当前会话相关的所有会话变量以及全局变量。
SHOW SESSION VARIABLES;
其中,SESSION 关键字可以省略。
MySQL 中的系统变量以两个“@”开头。
@@global 仅仅用于标记全局变量;
@@session 仅仅用于标记会话变量;
@@ 首先标记会话变量,如果会话变量不存在,则标记全局变量。
MySQL 中有一些系统变量仅仅是全局变量,例如 innodb_data_file_path,可以使用以下 3 种方法查看:
SHOW GLOBAL VARIABLES LIKE 'innodb_data_file_path';
SHOW SESSION VARIABLES LIKE 'innodb_data_file_path';
SHOW VARIABLES LIKE 'innodb_data_file_path';
MySQL 中有一些系统变量仅仅是会话变量,例如 MySQL 连接 ID 会话变量 pseudo_thread_id,可以使用以下 2 种方法查看。
SHOW SESSION VARIABLES LIKE 'pseudo_thread_id';
SHOW VARIABLES LIKE 'pseudo_thread_id';
MySQL 中有一些系统变量既是全局变量,又是会话变量,例如系统变量 character_set_client 既是全局变量,又是会话变量。
SHOW SESSION VARIABLES LIKE 'character_set_client';
SHOW VARIABLES LIKE 'character_set_client';
此时查看全局变量的方法如下:
SHOW GLOBAL VARIABLES LIKE 'character_set_client';
设置系统变量
可以通过以下方法设置系统变量:
修改 MySQL 源代码,然后对 MySQL 源代码重新编译(该方法适用于 MySQL 高级用户,这里不做阐述)。
在 MySQL 配置文件(mysql.ini 或 mysql.cnf)中修改 MySQL 系统变量的值(需要重启 MySQL 服务才会生效)。
在 MySQL 服务运行期间,使用 SET 命令重新设置系统变量的值。
服务器启动时,会将所有的全局变量赋予默认值。这些默认值可以在选项文件中或在命令行中对执行的选项进行更改。
更改全局变量,必须具有 SUPER 权限。设置全局变量的值的方法如下:
SET @@global.innodb_file_per_table=default;
SET @@global.innodb_file_per_table=ON;
SET global innodb_file_per_table=ON;
需要注意的是,更改全局变量只影响更改后连接客户端的相应会话变量,而不会影响目前已经连接的客户端的会话变量(即使客户端执行 SET GLOBAL 语句也不影响)。也就是说,对于修改全局变量之前连接的客户端只有在客户端重新连接后,才会影响到客户端。