MySQL 系统变量(system variables)

MySQL系统变量(system variables)实际上是一些系统参数,用于初始化或设定数据库对系统资源的占用,文件存放位置等等。这些个系统变量可以分为全局以及会话级别层面来修改,有些也可以进行动态修改。本文主要介绍了系统变量的一些概念以及如何设置查看这些系统变量。

1、什么是系统变量
   系统变量实际上用于控制数据库的一些行为和方式的参数。比如我们启动数据库的时候设定多大的内存,使用什么样的隔离级别,日志文件的大小,存放位置等等一系列的东东。当然我们数据库系统启动后,有些系统变量(参数)也可以通过动态修改来及时调整数据库。这个系统变量在Oracle里边是通过pfile或者spfile来控制,称之为参数,是一个意思。
   系统变量取值:都有默认值,可以在启动时及启动后修改。
   设置范围:全局与回话级别,全局级别需要super权限,会话级别只影响自身会话。
   设置方法:启动前可以通过配置文件以及启动选项来修改,启动后通过SET子句来设置。
   生效周期:全局变量全局可见,但只影响在更改后连接的从该全局变量初始化相应会话变量的客户端。当前会话及已登录的会话不受影响。

对于有关涉及到size的设置值,可以使用后缀K、M或G分别表示千字节、兆字节或gigabytes,不区分大小写。
  
2、set设置系统变量的用法

--当前的版本
mysql> show variables like ‘version%‘;
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| version                 | 5.5.37                       |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | Linux                        |
+-------------------------+------------------------------+

--获取有关set的帮助
mysql> help set
Name: ‘SET‘
Description:
Syntax:
SET variable_assignment [, variable_assignment] ...

variable_assignment:
      user_var_name = expr
    | [GLOBAL | SESSION] system_var_name = expr
    | [@@global. | @@session. | @@]system_var_name = expr

--查看全部系统变量
[email protected][tempdb]> show variables;  --该命令会输出当前系统全部系统变量

--查看sort_buffer
mysql> show variables like ‘sort_buffer%‘;
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| sort_buffer_size | 2097152 |
+------------------+---------+

--在省略global与session关键字的情形下为session级别
mysql> set sort_buffer_size=1024*1024*4;   --设置为4M

mysql> show variables like ‘sort_buffer%‘;
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| sort_buffer_size | 4194304 |
+------------------+---------+

--恢复到缺省值
mysql> set sort_buffer_size=default;

mysql> show variables like ‘sort_buffer%‘;
+------------------+---------+
| Variable_name    | Value   |
+------------------+---------+
| sort_buffer_size | 2097152 |
+------------------+---------+

3、全局与会话级别设置示例

--如何设置隔离级别
mysql> help isolation
Name: ‘ISOLATION‘
Description:
Syntax:
SET [GLOBAL | SESSION] TRANSACTION ISOLATION LEVEL
  {
       REPEATABLE READ
     | READ COMMITTED
     | READ UNCOMMITTED
     | SERIALIZABLE
   }

--下面我们通过演示隔离级别来设置全局与session级别变量
--查看当前session级别的隔离方式
[email protected][(none)]> show variables like ‘%isolation%‘;
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+

--修改当前session级别的隔离方式为READ-COMMITTED
[email protected][(none)]> set session transaction isolation level read committed;

[email protected][(none)]> show variables like ‘%isolation%‘;
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| tx_isolation  | READ-COMMITTED |
+---------------+----------------+

--另外的一个session , 登录用户为fred
--当前sessioin级别继承全局隔离级别为REPEATABLE-READ
[email protected][(none)]> show variables like ‘%isolation%‘;
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| tx_isolation  | REPEATABLE-READ |
+---------------+-----------------+

--在root会话中设置全局隔离级别为serializable
[email protected][(none)]> set global transaction isolation level serializable;

--注意,在root会话中 session级别还是为READ-COMMITTED
[email protected][(none)]> show variables like ‘%isolation%‘;
+---------------+----------------+
| Variable_name | Value          |
+---------------+----------------+
| tx_isolation  | READ-COMMITTED |
+---------------+----------------+

--在root会话中我可以看到全局的值已经变为SERIALIZABLE
[email protected][(none)]> show global variables like ‘%isolation%‘;
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| tx_isolation  | SERIALIZABLE |
+---------------+--------------+

--在fred中全局的也变成了SERIALIZABLE
[email protected][(none)]> show global variables like ‘%isolation%‘;
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| tx_isolation  | SERIALIZABLE |
+---------------+--------------+

--从上面的演示来说,无论global级别如何设置,不会影响到当前session级别的设置

--下面我们使用一个新用户登录来看看全局设置是否影响新会话
[email protected]:~> mysql -urobin

--如下查询新会话的隔离级别等于全局的隔离级别
[email protected][(none)]> show variables like ‘%isolation%‘;
+---------------+--------------+
| Variable_name | Value        |
+---------------+--------------+
| tx_isolation  | SERIALIZABLE |
+---------------+--------------+

4、如何获取变量值

除了通过前面演示的使用show global|session variables like ‘vari_name‘方式之外,我们可以通过查询
information_schema数据中特定的表来获得这些变量的值。
通过查询数据information_schema的表global_variables

[email protected][information_schema]> select variable_value from global_variables where
    -> variable_name=‘tx_isolation‘;
+----------------+
| variable_value |
+----------------+
| SERIALIZABLE   |
+----------------+

--Author: Leshami
--Blog  : http://blog.csdn.net/leshami

[email protected][information_schema]> select @@global.tx_isolation;
+-----------------------+
| @@global.tx_isolation |
+-----------------------+
| SERIALIZABLE          |
+-----------------------+

[email protected][information_schema]> select @@session.tx_isolation;
+------------------------+
| @@session.tx_isolation |
+------------------------+
| READ-COMMITTED         |
+------------------------+

--下面查询session_variables结果与查询global_variables获得的值相同,究其原因还在进一步研究中
[email protected][information_schema]> select * from session_variables where variable_name=‘tx_isolation‘;
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| TX_ISOLATION  | SERIALIZABLE   |
+---------------+----------------+

5、总结
a、设置方法
    要想设置一个GLOBAL变量的值,使用下面的语法:
       mysql> SET GLOBAL sort_buffer_size=value;
       mysql> SET @@global.sort_buffer_size=value;
  
    要想设置一个SESSION变量的值,使用下面的语法:
       mysql> SET SESSION sort_buffer_size=value;
       mysql> SET @@session.sort_buffer_size=value;
       mysql> SET sort_buffer_size=value;
       LOCAL是SESSION的同义词。
    如果设置变量时不指定GLOBAL、SESSION或者LOCAL,默认使用SESSION。

b、检索设置  
    要想检索一个GLOBAL变量的值,使用下面的语法:
       mysql> SELECT @@global.sort_buffer_size;
       mysql> SHOW GLOBAL VARIABLES like ‘sort_buffer_size‘;
  
    要想检索一个SESSION变量的值,使用下面的语法:
       mysql> SELECT @@sort_buffer_size;
       mysql> SELECT @@session.sort_buffer_size;
       mysql> SHOW SESSION VARIABLES like ‘sort_buffer_size‘;
    这里,LOCAL也是SESSION的同义词。

c、其他注意事项  
    当你用SELECT @@var_name搜索一个变量时(也就是说,不指定global.、session.或者local.),
    MySQL返回SESSION值(如果存在),否则返回GLOBAL值。
    对于SHOW VARIABLES,如果不指定GLOBAL、SESSION或者LOCAL,MySQL返回SESSION值。

时间: 2024-10-14 14:02:37

MySQL 系统变量(system variables)的相关文章

mysql系统变量查询

mysql系统变量包括全局变量(global)和会话变量(session),global变量对所有session生效,session变量包括global变量.mysql调优必然会涉及这些系统变量的调整,所以我们首先得会查询系统变量. 1. 查询全局变量:show global variables \G; 2. 查询会话变量:show session variables \G;或show variables: 可以看到,变量表包含variable_name,value两个字段,所以可以通过这两个字

MySQL系统变量

在数据库中,变量分为系统变量(以'@@'开头)以及用户自定义变量.系统变量分为全局系统变量以及会话系统变量,静态变量属于特殊的全局系统变量. 全局系统变量(global)和会话系统变量(session),有时也把全局系统变量称为全局变量,把会话系统变称为local变量或者系统会话变量.Mysql服务成功启动后,如果没有mysql客户机连接mysql服务器,那么mysql服务器内存中的系统变量全部是全局系统变量. 每个mysql客户机成功连接mysql服务器后,都会产生与之对应的会话.会话期间,没

mysql 系统变量和session变量

mysql系统变量包括全局变量(global)和会话变量(session),global变量对所有session生效,session变量包括global变量.mysql调优必然会涉及这些系统变量的调整,所以我们首先得会查询系统变量. 1. 查询全局变量:show global variables \G; 2. 查询会话变量:show session variables \G;或show variables: show session variables where variable_name l

mysql 系统变量

show variables; ---------------------------------+--------------------------------------------------------+ | Variable_name | Value | +---------------------------------+--------------------------------------------------------+ | auto_increment_increm

MySQL 系统变量和系统状态参数详解

1.查询缓存相关 mysql> show variables like '%query_cache%'; +------------------------------+----------+ | Variable_name                | Value    | +------------------------------+----------+ | have_query_cache             | YES      | | query_cache_limit  

mysql show variables系统变量详解

mysql系统变量详解 mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选项来更改这些默认值.服务器启动后,通过连接服务器并执行SET GLOBAL var_name语句可以更改动态全局变量.要想更改全局变量,必须具有SUPER权限. 服务器还为每个客户端连接维护会话变量.连接时使用相应全局变量的当前值对客户端会话变量进行初始化.客户可以通过SET SESSION var

MySQL的启动选项和系统变量该如何配置?

MySQL的配置信息可以通过两种方式实现,一种是命令行形式,在启动MySQL服务时后边带上相关配置参数,此种方式会在MySQL重启后失效.另外一种是通过写入配置文件,如my.cnf,启动或者重启MySQL服务都会生效,此种方式是永久生效. 启动选项 命令行 在MySQL服务命令启动时,带上配置参数 命令格式: 启动命令 --启动选项1[=值1] --启动选项2[=值2] ... --启动选项n[=值n] 例如: mysqld --default-storage-engine=MyISAM //设

使用MySQL会话变量实现窗口函数

一.MySQL窗口函数 (1) 序号函数 row_number()在相等的两条记录上随机排序,但序号按照1.2递增,然后后面的序号继续递增为3,中间不会产生序号间隙: rank()/dense_rank()则把前两条相等的记录序号都设置为1,但后续则分别设置为3(rank)和2(dense_rank).即rank()会产生序号相同的记录,同时可能产生序号间隙:而dense_rank()也会产生序号相同的记录,但不会产生序号间隙. (2) 分布函数 percent_rank() 用途:和之前的RA

java 读取环境变量和系统变量的方法

在web开发的过程中不免需要读取一些自定义的jvm系统变量或者环境变量.比如定义一些通用的log文件.或者数据库访问路径. 我们可以使用System.getProperties()读取所有的系统变量.通过System.getProperty("name");获取特定的系统变量 System.getenv();获取环境变量.System.getenv("name")获取特定的环境变量