我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

系统变量

什么是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系统变量内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Shell编程中的特殊变量之进程状态变量介绍

进程状态变量 1、$$获取当前shell的进程号(PID) 2、$!执行上一个指令的PID 3、$获取执行上一个命令的返回值(0为成功,非零为失败,这个很常用) 4、$_在此之前执行的命令或脚本的最后一个参数cat> test$.shech
2022-06-04

MySQL 中的系统变量与局部变量?

局部变量的作用域仅限于一组语句或语句块。每当一组语句或语句块完成时,局部变量就会超出范围。例如局部变量可以在存储过程、函数等中使用.与DECLARE关键字一起使用。局部变量的语法如下。DECLARE yourVariableName dat
2023-10-22

Python变量名详细规则的变量值介绍是怎样的

这篇文章给大家介绍Python变量名详细规则的变量值介绍是怎样的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。Python需要使用标识符给变量命名,其实标识符就是用于给程序中变量、类、方法命名的符号(简单来说,标识符就
2023-06-22

关于java中变量命名规范的详细介绍

Java是一种区分字母的大小写的语言,所以我们在定义变量名的时候应该注意区分大小写的使用和一些规范,接下来我们简单的来讲讲Java语言中包、类、变量等的命名规范。(一)Package(包)的命名Package的名字应该都是由一个小写单词组成,例如com、xue
关于java中变量命名规范的详细介绍
2019-10-05

winxp系统设置java环境变量的详细教程

我们都知道想要进行Java的程序编辑,就要首先在电脑上设置环境变量,这样编程客栈才编程客栈能够运行java程序,下面一起看看xp系统的电脑如何设置java变量。1、设置环境变量之前,我们肯定首先需要安装java,首先,找到你安装java的路
2023-06-13

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

本文实例讲述了MySQL 的启动选项和系统变量。分享给大家供大家参考,具体如下: MySQL的配置信息可以通过两种方式实现,一种是命令行形式,在启动MySQL服务时后边带上相关配置参数,此种方式会在MySQL重启后失效。另外一种是通过写入配
2022-05-27

Win7中使用命令提示符创建系统环境变量的方法介绍

环境变量是Windows系统运行的参数信息,为了更好的运行与管理进程,我们可以通过设置或创建环境变量,而环境变量的创建有几种方法,除了在我的电脑面板“高级”选项卡中进行设置外,其实我们也可以通过&ldphpquo;命
2023-06-13

一文详解Node中的模块化、文件系统与环境变量

本篇文章带大家深入了解Node中的模块化、文件系统与环境变量,有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。
2023-05-14

编程热搜

目录