分类: MySQL
MySQL系统变量VARIABLES

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

系统变量实际上用于控制数据库的一些行为和方式的参数。比如我们启动数据库的时候设定多大的内存,使用什么样的隔离级别,日志文件的大小,存放位置等等一系列的东东。当然我们数据库系统启动后,些系统变量(参数)也可以通过动态修改来及时调整数据库。这个系统变量在Oracle里边是通过pfile或者spfile来控制,称之为参数,是一个意思。

系统变量取值:都有默认值,可以在启动时及启动后修改。

设置范围:全局与回话级别,全局级别需要super权限,会话级别只影响自身会话。

设置方法:启动前可以通过配置文件以及启动选项来修改,启动后通过SET子句来设置。

生效周期:全局变量全局可见,但只影响在更改后连接的从该全局变量初始化相应会话变量的客户端。当前会话及已登录的会话不受影响。

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

set设置系统变量的用法

mysql> show variables like 'version%';    #查看当前版本
+-------------------------+------------------------------+
| Variable_name           | Value                        |
+-------------------------+------------------------------+
| version                 | 5.7.16-log                   |
| version_comment         | MySQL Community Server (GPL) |
| version_compile_machine | x86_64                       |
| version_compile_os      | linux-glibc2.5               |
+-------------------------+------------------------------+
4 rows in set (0.00 sec)

mysql> help SET;    #查看帮助
Name: 'SET'
Description:
Syntax:
SET variable_assignment [, variable_assignment] ...

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

SET syntax for variable assignment enables you to assign values to
different types of variables that affect the operation of the server or
clients:

o System variables. See
  http://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html.
  System variables also can be set at server startup, as described in
  http://dev.mysql.com/doc/refman/5.7/en/using-system-variables.html.
  (To display system variable names and values, use the SHOW VARIABLES
  statement; see [HELP SHOW VARIABLES].)

o User-defined variables. See
  http://dev.mysql.com/doc/refman/5.7/en/user-variables.html.

o Stored procedure and function parameters, and stored program local
  variables. See
  http://dev.mysql.com/doc/refman/5.7/en/stored-program-variables.html.

URL: http://dev.mysql.com/doc/refman/5.7/en/set-variable.html

进程使用情况

mysql> show global status like 'Thread%';  
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 19    |
| Threads_connected | 7     |
| Threads_created   | 26    |
| Threads_running   | 3     |
+-------------------+-------+
4 rows in set (0.00 sec)

查看链接数:

mysql> show variables like '%connections';
+----------------------+-------+
| Variable_name        | Value |
+----------------------+-------+
| max_connections      | 10000 |
| max_user_connections | 3000  |
+----------------------+-------+
2 rows in set (0.00 sec)

要想设置一个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。
检索设置

要想检索一个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的同义词。

注意事项

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


相关博文:

发表新评论