Use system variables

概述

系统维护着很多变量,这些变量表示当前服务器是怎样配置的.
每个系统变量都会有默认值.

  1. 大部分的系统变量可以使用set 语句动态改变(不必重启MySQL).

  2. 还可以使用系统变量进行表达式运算.

    服务器插件性功能的相关系统变量使用插件名称的前缀:例如log_fiter_gragnet 日志过滤组件的对应系统变量名为 log_error_filter_rules ,全名叫:dragnet.log_error_filter_rules.

系统变量的作用范围

  1. global 全局变量影响着整个MySQL 服务.
  2. session 变量只影响当前客户端连接的独立连接.
  1. 当服务器启动时,全局变量都会初始化为默认值,然后通过命令或者选项文件中指定选项更改这些默认值.

  2. 服务器还会维护每个连接的客户机的会话变量.会话变量使用全局变量的当前值进行初始化.

例如
:客户机的sql mode 有sql_mode 系统变量控制,当客户机连接时,sql_mode 值会被全局变量的sql_mode 赋值.

  1. 当系统启动时指定的选项包含数字时,请指定对应的单位(单位可以大写,可以小写),如: K,M,G

更改变量

命令行操作:

mysqld --innodb_log_file_size=16M --max_allowed_packet=1G

配置文件操作:

[mysqld]
innodb_log_file_size=16M
max_allowed_packet=1G

:::alert-warning
对于单位,大小写皆可,16m 和 16M 是同样的.
:::

set 语句

SET GLOBAL max_connections = 1000;
SET @@global.max_connections = 1000;
SET GLOBAL max_allowed_packet = 1G;
SET @@global.max_allowed_packet = 1G;

:::alert-info
Note:

  1. 当你改变了 全局变量. 会影响MySQL 整个服务器. 受影响的是全局变量.
    如果会话重新登录后,会话变量则会变成global 变量默认值,则会话变量改变.
  2. 当你改变了 会话变量,受影响的只是当前会话show session variables.重新登录后则恢复global 默认值.

:::

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

表2 : set 的 变量值

\ set set global set session set PERSIST eg
全局变量 报错无法设置 只设置global级 报错 只设置global ,且写入mysql_auto.cnf 文件 max_connections
全局变量 又为 session 变量 只设置会话级 只设置global级 只设置会话级 只设置global ,且写入mysql_auto.cnf 文件 default_week_format
session 变量 只设置会话级 报错 只设置会话级 报错 last_insert_id

查看变量

查看变量使用 show variables 语句.

表1:show variables 的变量值.

\ show variables show global variables show session variables eg
全局变量 显示global 值 显示global值 显示global值 max_connections
全局变量 又为 session变量 显示session值 显示global值 显示session值 default_week_format
session 变量 显示session值 显示为空 显示session 值 last_insert_id