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)
我们在使用set命令改变系统变量的值其实默认就是session范围的语法,具体语法如下:
### 语法一:默认采用sessionmysql 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初始值,
演示如下:
### 初始值默认0mysql 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系统变量内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
我想要获取技术服务或软件
服务范围:MySQL、ORACLE、SQLSERVER、MongoDB、PostgreSQL 、程序问题
服务方式:远程服务、电话支持、现场服务,沟通指定方式服务
技术标签:数据恢复、安装配置、数据迁移、集群容灾、异常处理、其它问题
本站部分文章参考或来源于网络,如有侵权请联系站长。
数据库远程运维 Mysql系统变量与状态变量详细介绍
相关文章
- MySQL:解决连接乱码问题(mysql连接乱码)
- 调整MySQL内存设置:提高系统性能(设置mysql的内存大小)
- 安装MySQL云主机:一步到位(云主机安装mysql)
- MySQL 今日零点:重新开始的时刻(mysql今日零点)
- 登录MySQL:服务器教程指南(服务器怎么登陆mysql)
- MySQL外键的全面使用指南(mysql外键的使用)
- Linux查看MySQL日志:快速及有效获取日志信息(linux查看mysql日志)
- MySQL:配置变量指南(mysql配置变量)
- MySQL: 实现安全的并发读写(mysql并发读写)
- MySQL变量与集合的使用(mysql变量集合)
- 解决MySQL编码问题:小白初探(修改mysql编码)
- MySQL系统视图:揭秘隐秘的数据库背后(mysql系统视图)
- MySQL 如何获取表中的自增ID?(mysql获取自增id)
- MySQL远程使用:掌握基础知识,远程操作Mysql数据库。(mysql远程使用)
- 告警MySQL 慢日志告警:谁在拖累系统?(mysql慢日志)
- 系统掌握MySQL正版系统,安全稳妥运行(mysql 正版)
- MySQL中使用绑定变量防止SQL注入攻击(mysql绑定变量)
- MySQL中变量赋值的技巧(mysql变量赋值)
- 探寻Linux系统下MySQL安装路径(linux查看mysql安装路径)
- 安卓系统APK与MySQL数据库连接(apk连接mysql)
- 快速使用CMD运行MySQL(cmd怎样运行mysql)
- Mysql高效查询表的二次连接实现(mysql一张表二次连接)
- 深入解析MySQL中的通配符代表什么含义(mysql_%代表什么)
- 如何从MYSQL下载音乐节解析MySQL与音乐节下载的完美结合(MYSQL下载音乐节)