wiki/运维/数据库/MySQL/mysql笔记/系统变量详解.md
2025-01-02 10:46:09 +08:00

35 lines
2.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

每个系统变量都有一个默认值,我们可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值。大多数的系统变量的值也可以在程序运行过程中修改,而无需停止并重新启动它。
## 查看系统变量
```
SHOW VARIABLES [LIKE 匹配的模式];
```
## 服务器程序运行过程中设置
系统变量比较牛逼的一点就是,对于大部分系统变量来说,它们的值可以在服务器程序运行过程中,进行动态修改而无需停止并重启服务器。不过系统变量有作用范围之分
#### 设置不同作用范围的系统变量
系统变量的作用范围的概念,具体来说作用范围分为这两种:
- GLOBAL全局变量影响服务器的整体操作。
- SESSION会话变量影响某个客户端连接的操作。SESSION有个别名叫LOCAL
通过启动选项设置的系统变量的作用范围都是GLOBAL的也就是对所有客户端都有效的因为在系统启动的时候还没有客户端程序连接进来
```
SET [GLOBAL|SESSION] 系统变量名 = 值;
```
#### 查看不同作用范围的系统变量
SHOW VARIABLES语句默认查看的是SESSION作用范围的系统变量
我们也可以在查看系统变量的语句上加上要查看哪个作用范围的系统变量
```
SHOW [GLOBAL|SESSION] VARIABLES [LIKE 匹配的模式];
```
- 并不是所有系统变量都具有GLOBAL和SESSION的作用范围。
- 有一些系统变量只具有GLOBAL作用范围比方说max_connections表示服务器程序支持同时最多有多少个客户端程序进行连接。
- 有一些系统变量只具有SESSION作用范围比如insert_id表示在对某个包含AUTO_INCREMENT列的表进行插入时该列初始的值。
- 有一些系统变量的值既具有GLOBAL作用范围也具有SESSION作用范围比如我们前面用到的default_storage_engine而且其实大部分的系统变量都是这样的
- 有些系统变量是只读的并不能设置值。比方说version表示当前MySQL的版本我们客户端是不能设置它的值的只能在SHOW VARIABLES语句里查看
## 状态变量
MySQL服务器程序中维护了很多关于程序运行状态的变量它们被称为状态变量。
```
SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
```