加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

相知MySQL(二):系统变量

发布时间:2022-09-21 15:22:27 所属栏目:MySql教程 来源:
导读:  系统变量简介

  MySQL服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为MySQL系统变量,比如允许同时连入的客户端数量用系统变量max_connections表示,表的默认存储引擎用系统变量default_st
  系统变量简介
 
  MySQL服务器程序运行过程中会用到许多影响程序行为的变量,它们被称为MySQL系统变量,比如允许同时连入的客户端数量用系统变量max_connections表示,表的默认存储引擎用系统变量default_storage_engine表示,查询缓存的大小用系统变量query_cache_size表示,等等。每个系统变量都有一个默认值,我们可以使用命令行或者配置文件中的选项在启动服务器时改变一些系统变量的值。大多数的系统变量的值也可以在程序运行过程中修改,而无需停止并重新启动它。
 
  系统变量详解
 
  我们可以使用下列命令查看MySQL服务器程序支持的系统变量以及它们的当前值:
 
  SHOW VARIABLES [LIKE 匹配的模式];
  由于系统变量实在太多了,如果我们直接使用SHOW VARIABLES查看的话就直接刷屏了,所以通常都会带一个LIKE过滤条件来查看我们需要的系统变量的值,比方说这么写:
 
  mysql> SHOW VARIABLES LIKE 'default_storage_engine';
  mysql> SHOW VARIABLES like 'max_connections';
  可以看到,现在服务器程序使用的默认存储引擎就是InnoDB,允许同时连接的客户端数量最多为151。别忘了LIKE表达式后边可以跟通配符来进行模糊查询,也就是说我们可以这么写:
 
  mysql> SHOW VARIABLES LIKE 'character%';
  这样就查出了所有以character开头的系统变量的值。
 
  设置系统变量
 
  大部分的系统变量都可以通过启动服务器时传送启动选项的方式来进行设置。如何填写启动选项可以看这篇文章相知MySQL(一):启动选项与配置 ,就是下边两种方式:
 
  当使用上边两种方式中的任意一种启动服务器程序后,我们再来查看一下系统变量的值:
 
  mysql> SHOW VARIABLES LIKE 'default_storage_engine';
  +------------------------+--------+
  | Variable_name????????? | Value? |
  +------------------------+--------+
  | default_storage_engine | MyISAM |
 
  +------------------------+--------+
  1 row in set (0.00 sec)
  mysql> SHOW VARIABLES LIKE 'max_connections';
  +-----------------+-------+
  | Variable_name?? | Value |
  +-----------------+-------+
  | max_connections | 10??? |
  +-----------------+-------+
  1 row in set (0.00 sec)
  可以看到default_storage_engine和max_connections这两个系统变量的值已经被修改了。有一点需要注意的是,对于启动选项来说,如果启动选项名由多个单词组成,各个单词之间用短划线-或者下划线_连接起来都可以,但是它对应的系统变量的单词之间必须使用下划线_连接起来。
 
  系统变量比较厉害的一点就是,对于大部分系统变量来说,它们的值可以在服务器程序运行过程中进行动态修改而无需停止并重启服务器。不过系统变量有作用范围之分。
 
  我们前边说过,多个客户端程序可以同时连接到一个服务器程序。对于同一个系统变量,我们有时想让不同的客户端有不同的值。比方说小刘使用客户端A,他想让当前客户端对应的默认存储引擎为InnoDB,所以他可以把系统变量default_storage_engine的值设置为InnoDB;小丽使用客户端B,他想让当前客户端对应的默认存储引擎为MyISAM,所以他可以把系统变量default_storage_engine的值设置为MyISAM。这样可以使小刘和小丽的的客户端拥有不同的默认存储引擎,使用时互不影响,十分方便。但是这样各个客户端都私有一份系统变量会产生这么两个问题:
 
  为了解决这两个问题,设计MySQL的大叔提出了系统变量的作用域的概念:
 
  作用域
 
  格式:
  1、SET [GLOBAL|SESSION] 系统变量名 = 值;
  2、SET [@@(GLOBAL|SESSION).]var_name = XXX;
  如果我们想在服务器运行过程中把作用域为GLOBAL的系统变量default_storage_engine的值修改为InnoDB,也就是想让之后新连接到服务器的客户端都用InnoDB作为默认的存储引擎,那我们可以选择下边两条语句中的任意一条来进行设置:
 
  例如:
  1、SET GLOBAL default_storage_engine = InnoDB;
  2、SET @@GLOBAL.default_storage_engine = InnoDB;
  如果只想对本客户端生效,也可以选择下边三条语句中的任意一条来进行设置:
 
  例如:
  1、SET SESSION default_storage_engine = InnoDB;
  2、SET @@SESSION.default_storage_engine = InnoDB;
  3、SET default_storage_engine = InnoDB;//默认 session
  从上边的语句三也可以看出,如果在设置系统变量的语句中省略了作用范围,默认的作用范围就是SESSION。也就是说SET 系统变量名 = 值和SET SESSION 系统变量名 = 值是等价的。
 
  既然系统变量有作用范围之分,那我们的SHOW VARIABLES语句查看的是什么作用范围的系统变量呢?
 
  答:默认查看的是SESSION作用范围的系统变量。
 
  当然我们也可以在查看系统变量的语句上加上要查看哪个作用范围的系统变量,就像这样:
 
  SET [GLOBAL|SESSION] 系统变量名 = 值;
  小贴士: 如果某个客户端改变了某个系统变量在`GLOBAL`作用范围的值,并不会影响该系统变量在当前已经连接的客户端作用范围为`SESSION`的值,只会影响后续连入的客户端在作用范围为`SESSION`的值。
 
  有些系统变量是只读的,并不能设置值。比方说version,表示当前MySQL的版本,我们客户端是不能设置它的值的,只能在SHOW VARIABLES语句里查看。启动选项和系统变量的区别
 
  启动选项是在程序启动时我们程序员传递的一些参数,而系统变量是影响服务器程序运行行为的变量,它们之间的关系如下:
 
  状态变量
 
  为了让我们更好的了解服务器程序的运行情况,MySQL服务器程序中维护了好多关于程序运行状态的变量,它们被称为状态变量。比方说Threads_connected表示当前有多少客户端与服务器建立了连接,Handler_update表示已经更新了多少行记录,像这样显示服务器程序状态信息的状态变量还有好几百个,平时用到的可以多去了解哦。
 
  由于状态变量是用来显示服务器程序运行状况的,所以它们的值只能由服务器程序自己来设置,我们程序员是不能设置的。与系统变量类似,状态变量也有GLOBAL和SESSION两个作用范围的,所以查看状态变量的语句可以这么写:
 
  SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];
  类似的,如果我们不写明作用范围,默认的作用范围是SESSION,比方说这样:
 
  mysql> SHOW STATUS LIKE 'thread%';
  所有以Thread开头的SESSION作用范围的状态变量就都被展示出来了。
 
  总结
 
  今天主要学习了MySQL中的系统变量,很多时候,这些变量配置好了,对于我们使用和分析问题都是很有帮助的mysql系统,所以用好系统变量很重要。希望对大家有所帮助~
 

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!