Mysql系统变量与状态变量详细介绍

目录
  • 系统变量
    • 什么是Mysql系统变量
    • 设置系统变量
      • my.cnf设置配置
      • 启动项配置
      • Set的形式修改系统变量
      • SESSION作用范围语法
      • GLOBAL作用范围语法
      • 查看系统变量值
    • 系统变量注意点
      • 并不是所有的系统变量都有session范围和global范围
      • 并不是所有系统变量可以修改
  • 状态变量

系统变量

什么是Mysql系统变量

能够在程序运行过程中影响Mysql程序行为的变量称之为系统变量。

在Mysql中存在多个系统变量,可以使用show variables查看,如果直接执行得到的结果是查询了所有的系统变量,所以这个命令支持模糊匹配,

演示如下:

### 模糊搜索系统变量中包含conn的所有变量,精确匹配时值不包含%
mysql> show variables like '%conn%';
+-----------------------------------------------+-----------------+
| Variable_name                                 | Value           |
+-----------------------------------------------+-----------------+
| character_set_connection                      | utf8            |
| collation_connection                          | utf8_general_ci |
| connect_timeout                               | 10              |
| disconnect_on_expired_password                | ON              |
| init_connect                                  |                 |
| max_connect_errors                            | 100             |
| max_connections                               | 400             |
| max_user_connections                          | 0               |
| performance_schema_session_connect_attrs_size | 512             |
+-----------------------------------------------+-----------------+

设置系统变量

设置系统变量其实在上篇已经聊过两种通过启动项配置以及my.cnf配置文件配置,演示如下

my.cnf设置配置

my.cnf文件配置;

[mysqld]
datadir=/usr/local/mysql-5.7.26/data
default-storage-engine=MyISAM
max-connections=10
### 其它配置省略

客户端读取:

mysql> show variables like '%datadir%';
+---------------+-------------------------------+
| Variable_name | Value                         |
+---------------+-------------------------------+
| datadir       | /usr/local/mysql-5.7.26/data/ |
+---------------+-------------------------------+
1 row in set (0.00 sec)

mysql> show variables like '%default-storage-engine%';
Empty set (0.01 sec)
#### 注意搜索系统变量名字的区别!!!
mysql> show variables like '%default_storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | MyISAM |
+------------------------+--------+
1 row in set (0.00 sec)

注意:在MySQL客户端读取配置时所有系统变量采用的是下划线(仅支持下划线),而在配置文件My.cnf或者启动配置项中采用中划线或者下划线是等价的,一定要注意区分!!!!!!。

启动项配置

服务端启动配置

### root用户执行采用配置--user=root,非root用户不用
mysqld --user=root --max-connections=111

客户端查询系统变量

mysql> show variables like '%max_connections%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 111   |
+-----------------+-------+
1 row in set (0.00 sec)

这两种方法都可以修改系统变量,但是缺点也是存在的

  • 修改完需要重启服务端才可以生效。
  • 修改完对所有的客户端都生效,有时单个客户端需要有特定的系统变量,显然不符合要求。

所以这里介绍第三种方式,采用set的形式修改系统变量。

Set的形式修改系统变量

在Mysql客户端我们可以采用Set命令直接修改系统变量,不过需要注意的是,Set的形式修改会指定系统变量生效的范围,因为当多个客户端连接同一个服务端时可能一个系统变量需要作用于所有的客户端,有的系统变量只需要作用于当前的客户端即可,根据作用范围分为如下两种。

  • **GLOBAL:**针对所有的客户端生效。
  • **SESSION(也被称为local):**只对当前会话生效,其余客户端不受影响。

显然对于my.cnf设置配置和启动项配置都是作用于所有的客户端,也就是GLOBAL作用范围,那么只针对当前客户端的系统变量需要如何设置呢,

体验如下所示:

#### 先查询一次存储引擎的值
mysql> show variables like '%default_storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | MyISAM |
+------------------------+--------+
1 row in set (0.00 sec)

mysql> set default_storage_engine=InnoDB;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like '%default_storage_engine%';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

SESSION作用范围语法

我们在使用set命令改变系统变量的值其实默认就是session范围的语法,具体语法如下:

### 语法一:默认采用session
mysql> set default_storage_engine=InnoDB;
### 语法二:指定作用范围session
mysql> set session default_storage_engine InnoDB;
### 语法三
mysql> set @@session.default_storage_engine=InnoDB;

GLOBAL作用范围语法

global影响范围是所有的客户端,具体语法如下所示:

### 语法一
mysql> set global default_storage_engine=InnoDB;
### 语法二
mysql> set @@global.default_storage_engine=MyISAM;

查看系统变量值

从上面我们知道了Mysql中的系统变量分为两种操作范围,同样查询系统变量时也是分作用范围查询,查询系统变量语法如下所示。

show [global|session]  variables like [匹配元素支持模糊匹配%]

默认显示的是session作用范围的系统变量。

命令演示如下:

### 查询session当前客户端存储引擎的系统变量
mysql> show session variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.01 sec)
### 查询global所有客户端存储引擎的系统变量
mysql> show global  variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.01 sec)

### 改变全局系统变量【默认存储引擎】
mysql> set global default_storage_engine=MyISAM;
Query OK, 0 rows affected (0.00 sec)

### 再次查询全局系统变量【默认存储引擎】值,修改成功!!!!!!!
mysql> show global  variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | MyISAM |
+------------------------+--------+
1 row in set (0.00 sec)

### 再次查询当前客户端【默认存储引擎】值,没有被修改!!
mysql> show session variables like 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

注意:当修改全局global作用范围的系统变量时,session作用范围的相同名字系统变量值并不会马上修改,需要等客户端下一次接入时才会生效,也就是说修改全局global作用范围的系统变量,只会影响后续接入客户端作用范围为session的系统变量。

系统变量注意点

并不是所有的系统变量都有session范围和global范围

只有session范围的系统变量

只有session范围的系统变量,如insert_id,表示对当前客户端表设置了自增长AUTO_INCREMENT列,插入数据的自增长id初始值,

演示如下:

### 初始值默认0
mysql> show variables like 'insert_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| insert_id     | 0     |
+---------------+-------+
1 row in set (0.00 sec)
### 设置初始值为2
mysql> set session insert_id=2;
Query OK, 0 rows affected (0.00 sec)

### 创建一张表,带有自增长AUTO_INCREMENT列
mysql> CREATE TABLE tb_student(
    -> id INT(4) PRIMARY KEY AUTO_INCREMENT,
    -> name VARCHAR(25) NOT NULL
    -> );
Query OK, 0 rows affected (0.00 sec)

mysql> insert into tb_student(name) values('zhangsan');
Query OK, 1 row affected (0.00 sec)

### 自增长初始值由0变为2,设置成功!!
mysql> select * from tb_student;
+----+----------+
| id | name     |
+----+----------+
|  2 | zhangsan |
+----+----------+
1 row in set (0.00 sec)

session作用范围的不能设置为全局系统变量,提示如下:

mysql> set global insert_id=2;
ERROR 1228 (HY000): Variable 'insert_id' is a SESSION variable and can't be used with SET GLOBAL

只有global范围的系统变量

这类变量多为系统功能支持变量,如max_connections系统最大连接数,只能采用global修改

mysql> set max_connections=123;
ERROR 1229 (HY000): Variable 'max_connections' is a GLOBAL variable and should be set with SET GLOBAL

并不是所有系统变量可以修改

对于绝大多数系统变量来讲都是可以修改的,但万事有例外,有些系统变量只读,如version查看数据库版本。

mysql> show variables like 'version';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| version       | 5.7.26 |
+---------------+--------+
1 row in set (0.01 sec)

### 只读系统变量修改报错
mysql> set version='1.0.0';
ERROR 1238 (HY000): Variable 'version' is a read only variable

状态变量

系统变量是能够影响程序的运行行为的变量,而状态变量是能够帮我们了解程序运行过程中的情况,这些状态变量的值由程序运行过程中产生,不可设置,具体语法如下

show [global|session] status like  [匹配元素支持模糊匹配%]

不写明作用范围默认session

命令演示如下:

### 默认查询session作用范围的数据
mysql> show status like '%threads%';
+------------------------+-------+
| Variable_name          | Value |
+------------------------+-------+
| Delayed_insert_threads | 0     |
| Slow_launch_threads    | 0     |
| Threads_cached         | 0     |
| Threads_connected      | 2     |
| Threads_created        | 2     |
| Threads_running        | 1     |
+------------------------+-------+

到此这篇关于Mysql系统变量与状态变量详细介绍的文章就介绍到这了,更多相关Mysql系统变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MySQL 的启动选项和系统变量实例详解

    本文实例讲述了MySQL 的启动选项和系统变量.分享给大家供大家参考,具体如下: MySQL的配置信息可以通过两种方式实现,一种是命令行形式,在启动MySQL服务时后边带上相关配置参数,此种方式会在MySQL重启后失效.另外一种是通过写入配置文件,如my.cnf,启动或者重启MySQL服务都会生效,此种方式是永久生效. 启动选项 命令行 在MySQL服务命令启动时,带上配置参数 启动方式可参考这篇:MySQL 的启动和连接方式 命令格式: 启动命令 --启动选项1[=值1] --启动选项2[=值

  • MySql服务器系统变量和状态变量介绍

    服务器系统变量 服务器将维护许多表示其配置的系统变量.所有变量均有默认值.可以在命令行中或选项文件设置选项在服务器启动时对它们进行设置.大多数可以在运行时使用SET语句来设置. mysqld服务器维护两种变量.全局变量影响服务器的全局操作.会话变量影响具体客户端连接相关操作. 服务器启动时,将所有全局变量初始化为默认值.可以在选项文件或命令行中指定的选项来更改这些默认值.服务器启动后,通过连接服务器并执行SET GLOBAL var_name语句可以更改动态全局变量.要想更改全局变量,必须具有S

  • linux CentOS 系统下如何将php和mysql命令加入到环境变量中

    linux CentOS 系统下如何将php和mysql命令加入到环境变量中 在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行"php -v"命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法(假设php.mysql和apache分别安装在/phpstudy/server/php/./phpstudy

  • linux CentOS 系统php和mysql命令加入到环境变量中

    在Linux CentOS系统上安装完php和MySQL后,为了使用方便,需要将php和mysql命令加到系统命令中,如果在没有添加到环境变量之前,执行"php -v"命令查看当前php版本信息时时,则会提示命令不存在的错误,下面我们详细介绍一下在linux下将php和mysql加入到环境变量中的方法(假设php.mysql和apache分别安装在/phpstudy/server/php/./phpstudy/server/mysql/和/phpstudy/server/php/中).

  • mysql 字符集的系统变量说明

    1.character_set_server和collation_server 这两个变量是服务器的字符集.在系统启动的时候可以通过--character-set-server和--collation-server来设置它们.如果没有的话系统会把这两各变量设置成默认值latin1和latin1_swedish_ci.默认值是编译在程序中的,只能通过重新编译来改变. 这两个变量只用来为create database命令提供默认值. 2.character_set_database和collatio

  • mysql变量用法实例分析【系统变量、用户变量】

    本文实例讲述了mysql变量用法.分享给大家供大家参考,具体如下: 本文内容: 系统变量 用户变量 局部变量 首发日期:2018-04-18 系统变量: 系统变量就是系统已经提前定义好了的变量 系统变量一般都有其特殊意义.比如某些变量代表字符集.某些变量代表某些mysql文件位置 系统变量中包括会话级变量(当次会话连接生效的变量,如names),以及全局变量(一直生效的变量) [系统变量中全局变量和会话变量其实是使用一套变量,不同的是会话变量仅当次会话生效.] 会话变量的赋值:set 变量名 =

  • Mysql系统变量与状态变量详细介绍

    目录 系统变量 什么是Mysql系统变量 设置系统变量 my.cnf设置配置 启动项配置 Set的形式修改系统变量 SESSION作用范围语法 GLOBAL作用范围语法 查看系统变量值 系统变量注意点 并不是所有的系统变量都有session范围和global范围 并不是所有系统变量可以修改 状态变量 系统变量 什么是Mysql系统变量 能够在程序运行过程中影响Mysql程序行为的变量称之为系统变量. 在Mysql中存在多个系统变量,可以使用show variables查看,如果直接执行得到的结果

  • MySQL Test Run 测试框架详细介绍 

    目录 一.介绍 二.安装 三.测试示例 四.创建测试用例 五.mtr其他常用参数介绍 –force –record –big-test –suite=[dirname] 六.测试用例编写的规范 一.介绍 MySQL Test Run 简称MTR,是MySQL官方提供的自动化测试框架,执行脚本在发布路径的mysql-test目录下. 主要测试步骤,是通过执行一个case(*.test)中的语句(包括sql语句和其他管理语句),将case的输出记录保存在结果文件(*.result)中,或者是将语句执

  • Linux系统下netstat命令详细介绍

    目录 一.介绍 二.输出信息描述 三.netstat常见参数 四.netstat网络状态详解 Linux的相关keepalive参数 五.常用netstat相关命令 一.介绍 Netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表.实际的网络连接以及每一个网络接口设备的状态信息. Netstat用于显示与IP.TCP.UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况. 二.输出信息描述 执行netstat后输出如下: [root@sy-s

  • MySQL主从复制之GTID模式详细介绍 

    目录 一.GTID概述 二.GTID相较与传统复制的优势 三.GTID自身存在哪些限制 四.GTID工作原理简单介绍 五.如何开启GTID复制 六.查看GTID相关参数 七.GTID与传统模式建立复制时候语句的不同点 八.GTID同步状态简单解析 一.GTID概述 MySQL5.6 在原有主从复制的基础上增加了一个新的复制方式,即基于GTID的复制方式,它由UUID和事务ID两个部分组成,具有如下特点. GTID事务是全局唯一性的,并且一个事务对应一个GTID值. 一个GTID值在同一个MySQ

  • Mysql环境变量配置的详细图文教程

    一.安装mysql之后,在命令窗口显示出错,如下: 二.桌面找到此电脑图标,右击属性,如下: 三.高级系统设置进入后,点击环境变量,如下图: 四.系统变量下,点击新建,如下所示: 五.变量名和变量值的填写 变量名:MYSQL_HOME 变量值:默认在C盘如下地址: C:\Program Files\MySQL\MySQL Server 5.5 填写后为下图,确定即可! 六.配置Path路径: (1)选中Path,点击编辑 (2)新建 (3)新增一个:%MYSQL_HOME%\bin,即可!所有设

  • mysql安全启动脚本mysqld_safe详细介绍

    在Unix和NetWare中推荐使用mysqld_safe来启动mysqld服务器.mysqld_safe增加了一些安全特性,例如当出现错误时重启服务器并向错误日志文件写入运行时间信息.本节后面列出了NetWare的特定行为. 注释:为了保持同旧版本MySQL的向后兼容性,MySQL二进制分发版仍然包括safe_mysqld作为mysqld_safe的符号链接.但是,你不应再依赖它,因为再将来将删掉它. 默认情况下,mysqld_safe尝试启动可执行mysqld-max(如果存在),否则启动m

  • java中静态变量和实例变量的区别详细介绍

    运行效果: 控制台效果: ================================================== 代码部分 ================================================== /hello_test/src/com/b510/test/StaticTest.java 复制代码 代码如下: /**  *   */ package com.b510.test; /**  * 在程序运行时的区别:实例变量属于某个对象的属性,必须创建了实例

  • Mysql 删除数据库drop database详细介绍

    Mysql 删除数据库drop database 方法-:使用cmd模式下载删除 mysql> drop database school; 此命名删除了school数据库.但如果school数据库不存在就会报错.所以完整的语句应该这么写: mysql> drop database if exists school; 方法二:PHP脚本删除数据库 在php中,我们可以使用mysql_query函数来执行sql语句. 所以删除数据库时,我们可以直接用mysql_query来执行删除命令. <

  • php 变量引用与变量销毁机制详细介绍

    php 变量引用与变量销毁机制 在php中,符号"&"表示引用. 1.看看不引用的情况是这样子: $a = "hello world";//定义一个变量,下面赋值给$b $b = $a;//这一步没有在$a之前加符号&,像这样子"$b= & $a".没有加&,实际上原理是会将变量$a复制拷贝一份,也就是内存中重新申请一个地址存储变量$b了 ps:在php中,使用"="直接赋值,其实就是拷贝一份右

随机推荐