每个系统变量都有一个默认值,我们可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值。大多数的系统变量的值也可以在程序运行过程中修改,而无需停止并重新启动它。 ## 查看系统变量 ``` 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 匹配的模式]; ```