MySQL system variables (system variables) are actually some system parameters used to initialize or set the database 's occupation of system resources, file storage locations, and so on. These system variables can be modified at the global and session level, and some can also be modified dynamically. This article mainly introduces some concepts of system variables and how to set and view these system variables.
1. What is a system variable
For settings involving size, the suffix K, M, or G can be used to denote kilobytes, megabytes, or gigabytes, respectively, case-insensitive.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
--当前的版本
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
--查看全部系统变量
root@localhost[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、全局与会话级别设置示例
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
--如何设置隔离级别
mysql> help
isolation
Name
:
'ISOLATION'
Description:
Syntax:
SET
[
GLOBAL
| SESSION]
TRANSACTION
ISOLATION
LEVEL
{
REPEATABLE
READ
|
READ
COMMITTED
|
READ
UNCOMMITTED
|
SERIALIZABLE
}
--下面我们通过演示隔离级别来设置全局与session级别变量
--查看当前session级别的隔离方式
root@localhost[(none)]> show variables
like
'%isolation%'
;
+
---------------+-----------------+
| Variable_name | Value |
+
---------------+-----------------+
| tx_isolation |
REPEATABLE
-
READ
|
+
---------------+-----------------+
--修改当前session级别的隔离方式为READ-COMMITTED
root@localhost[(none)]>
set
session
transaction
isolation
level
read
committed
;
root@localhost[(none)]> show variables
like
'%isolation%'
;
+
---------------+----------------+
| Variable_name | Value |
+
---------------+----------------+
| tx_isolation |
READ
-
COMMITTED
|
+
---------------+----------------+
--另外的一个session , 登录用户为fred
--当前sessioin级别继承全局隔离级别为REPEATABLE-READ
fred@localhost[(none)]> show variables
like
'%isolation%'
;
+
---------------+-----------------+
| Variable_name | Value |
+
---------------+-----------------+
| tx_isolation |
REPEATABLE
-
READ
|
+
---------------+-----------------+
--在root会话中设置全局隔离级别为serializable
root@localhost[(none)]>
set
global
transaction
isolation
level
serializable
;
--注意,在root会话中 session级别还是为READ-COMMITTED
root@localhost[(none)]> show variables
like
'%isolation%'
;
+
---------------+----------------+
| Variable_name | Value |
+
---------------+----------------+
| tx_isolation |
READ
-
COMMITTED
|
+
---------------+----------------+
--在root会话中我可以看到全局的值已经变为SERIALIZABLE
root@localhost[(none)]> show
global
variables
like
'%isolation%'
;
+
---------------+--------------+
| Variable_name | Value |
+
---------------+--------------+
| tx_isolation |
SERIALIZABLE
|
+
---------------+--------------+
--在fred中全局的也变成了SERIALIZABLE
fred@localhost[(none)]> show
global
variables
like
'%isolation%'
;
+
---------------+--------------+
| Variable_name | Value |
+
---------------+--------------+
| tx_isolation |
SERIALIZABLE
|
+
---------------+--------------+
--从上面的演示来说,无论global级别如何设置,不会影响到当前session级别的设置
--下面我们使用一个新用户登录来看看全局设置是否影响新会话
robin@SZDB:~> mysql -urobin
--如下查询新会话的隔离级别等于全局的隔离级别
robin@localhost[(none)]> show variables
like
'%isolation%'
;
+
---------------+--------------+
| Variable_name | Value |
+
---------------+--------------+
| tx_isolation |
SERIALIZABLE
|
+
---------------+--------------+
4、如何获取变量值
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
除了通过前面演示的使用show
global
|session variables
like
'vari_name'
方式之外,我们可以通过查询
information_schema数据中特定的表来获得这些变量的值。
通过查询数据information_schema的表global_variables
root@localhost[information_schema]>
select
variable_value
from
global_variables
where
-> variable_name=
'tx_isolation'
;
+
----------------+
| variable_value |
+
----------------+
|
SERIALIZABLE
|
+
----------------+
--Author: Leshami
--Blog : https://blog.csdn.net/leshami
root@localhost[information_schema]>
select
@@
global
.tx_isolation;
+
-----------------------+
| @@
global
.tx_isolation |
+
-----------------------+
|
SERIALIZABLE
|
+
-----------------------+
root@localhost[information_schema]>
select
@@session.tx_isolation;
+
------------------------+
| @@session.tx_isolation |
+
------------------------+
|
READ
-
COMMITTED
|
+
------------------------+
--下面查询session_variables结果与查询global_variables获得的值相同,究其原因还在进一步研究中
root@localhost[information_schema]>
select
*
from
session_variables
where
variable_name=
'tx_isolation'
;
+
---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+
---------------+----------------+
| TX_ISOLATION |
SERIALIZABLE
|
+
---------------+----------------+
|
5、总结
b、检索设置
c、其他注意事项
</div>
</div>