Mysql系统变量与状态变量详细介绍
本篇文章向大家介绍《Mysql系统变量与状态变量详细介绍》,主要包括变量、状态、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系统变量与状态变量详细介绍》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!
mysql timestamp字段规范使用详情
- 上一篇
- mysql timestamp字段规范使用详情
- 下一篇
- Mysql字符集和排序规则详解
-
- 数据库 · MySQL | 1天前 |
- MySQL数值函数大全及使用技巧
- 117浏览 收藏
-
- 数据库 · MySQL | 2天前 |
- 三种登录MySQL方法详解
- 411浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 420浏览 收藏
-
- 数据库 · MySQL | 3天前 |
- MySQL数据备份方法与工具推荐
- 264浏览 收藏
-
- 数据库 · MySQL | 4天前 |
- MySQL索引的作用是什么?
- 266浏览 收藏
-
- 数据库 · MySQL | 5天前 |
- MySQL排序原理与实战应用
- 392浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQLwhere条件查询技巧
- 333浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用数据类型有哪些?怎么选更合适?
- 234浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL常用命令大全管理员必学30条
- 448浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL高效批量插入数据方法大全
- 416浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL性能优化技巧大全
- 225浏览 收藏
-
- 数据库 · MySQL | 1星期前 |
- MySQL数据备份4种方法保障安全
- 145浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3163次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3375次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3403次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4506次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3784次使用
-
- Go语言中的变量和常量
- 2022-12-27 125浏览
-
- Go语言的变量定义详情
- 2022-12-23 328浏览
-
- Golang语言的多种变量声明方式与使用场景详解
- 2023-01-22 451浏览
-
- 聊聊Golang的语言结构和变量问题
- 2022-12-23 436浏览
-
- Go获取与设置环境变量的方法详解
- 2023-01-09 260浏览

