MySQL系统变量(查看和修改)

1年前 (2024-04-27)
在 MySQL 数据库,变量分为系统变量和用户自定义变量。系统变量以 @@ 开头,用户自定义变量以 @ 开头。

服务器维护着两种系统变量,即全局变量(GLOBAL VARIABLES会话变量(SESSION VARIABLES。全局变量影响 MySQL 服务的整体运行方式,会话变量影响具体客户端连接的操作。

每一个客户端成功连接服务器后,都会产生与之对应的会话。会话期间,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';

设置系统变量

可以通过以下方法设置系统变量:

  1. 修改 MySQL 源代码,然后对 MySQL 源代码重新编译(该方法适用于 MySQL 高级用户,这里不做阐述)。

  2. 在 MySQL 配置文件(mysql.ini 或 mysql网站站点" rel="nofollow" />

    SET @@sort_buffer_size = 50000;

    上面语句没有指定是 GLOBAL 还是 SESSION,服务器会当做 SESSION 处理。

    使用 SET 设置全局变量或会话变量成功后,如果 MySQL 服务重启,数据库的配置就又会重新初始化。一切按照配置文件进行初始化,全局变量和会话变量的配置都会失效。

    MySQL 中还有一些特殊的全局变量,如 log_bin、tmpdir、version、datadir,在 MySQL 服务实例运行期间它们的值不能动态修改,也就是不能使用 SET 令进行重新设置,这种变量称为静态变量。数据库管理员可以使用前面提到的修改源代码或更改配置文件来重新设置静态变量的值。