前言
简单介绍一下mysql的系统变量
正文
当我们之间查看mysql的系统变量的时候呢?
我们使用show variables,这样我们就可以查看到系统变量。
但是这样显然是没有意义的。
可以看到很多很多的系统变量,如果想查具体的,那么就是:
SHOW VARIABLES LIKE 'default_storage_engine'
又比如查看最大连接数:
SHOW VARIABLES like 'max_connections';
当然这些我们肯定是记不住的,那么这个时候我们就用ai问就行了。
系统变量中又分为几类:
启动项:
例如:default_storage_engine
那么这种就必须在启动的时候进行修改设置。
mysqld --default-storage-engine=MyISAM --max-connections=10
还有可以写在配置文件之中:
[server]
default-storage-engine=MyISAM
max-connections=10
那么还有运行时配置。
这一类配置在运行时修改就生效了。
这一类运行时配置又分为两类:
-
客户端级(session 级)
-
系统级(global 级)
比如说我们创建表,没有指定使用什么数据引擎,那么这个时候就会用session的配置,如果session没有配置,那么就会使用global级。
有一些系统变量并不是针对单个客户端的,比如允许同时连接到服务器的客户端数量 max_connections ,查
询缓存的大小 query_cache_size ,这些公有的系统变量让某个客户端私有显然不合适。
那么这里就有一个问题,当我们客户端连接了,如果我们全局设置了default-storage-engine=MyISAM,那么是否对该连接生效呢?
答案是不生效,运行逻辑是这样的,当服务器启动的时候,那么会维护一个全局变量表,如果创建一个新连接的时候,那么会维护一个会话变量表,所以全局修改的时候并不会去影响已经连接的会话。
设置的时候可以这样设置:
set [global|session] 系统变量名 = 值
set [global|session].系统变量名 = 值
如果设置会话级别,那么可以省略:
set 系统变量名 = 值
那么我们如何查看session 系统变量和 global 系统变量呢? 我们到现在为止知道了一个叫做 show variables like 'xx' 这样的。
那么如何在这上面加一些条件方便我们查看session 或者global呢。
直接 show [session|global] variables like 'xx'
并不是所有系统变量都具有 GLOBAL 和 SESSION 的作用范围。
有一些系统变量只具有 GLOBAL 作用范围,比方说 max_connections ,表示服务器程序支持同时最多有
多少个客户端程序进行连接。
有一些系统变量只具有 SESSION 作用范围,比如 insert_id ,表示在对某个包含 AUTO_INCREMENT 列的
表进行插入时,该列初始的值。
有一些系统变量的值既具有 GLOBAL 作用范围,也具有 SESSION 作用范围,比如我们前边用到的
default_storage_engine ,而且其实大部分的系统变量都是这样的
有些系统变量是只读的,并不能设置值。
比方说 version ,表示当前 MySQL 的版本,我们客户端是不能设置它的值的,只能在 SHOW VARIABLES 语句
里查看。
启动选项和系统变量的区别
启动选项 是在程序启动时我们程序员传递的一些参数,而 系统变量 是影响服务器程序运行行为的变量,它们之间的关系如下:
大部分的系统变量都可以被当作启动选项传入。
有些系统变量是在程序运行过程中自动生成的,是不可以当作启动选项来设置,比如auto_increment_offset 、 character_set_client 啥的。
有些启动选项也不是系统变量,比如 defaults-file 。
说白了,就是启动选项可以设置一些系统变量,有些系统变量只有启动的时候才能生效。
状态变量
有一些运行状态是不能修改的,也就是运行过程中的状态数据。
同样的,也分为session 状态和global 状态。
结
系统变量大体如此吧,后续补充其他滴