MySQL 系统变量查看与设置(System Variables Configuration)

MySQL中有大量的系统变量控制服务器的行为,大部分的系统变量是不需要我们调整的,保持默认即可。但为了获得更高的性能和稳定性,有时需要适当对部分变量进行调整,本文总结了MySQL中系统变量的查看与设置方法。

目录

  • 一、变量的类型
  • 二、变量值的查看
    • 2.1 使用show命令查看变量
    • 2.2 使用select命令查看变量
    • 2.3 使用命令行工具mysqladmin查看
    • 2.4 通过performance_schema视图查看
  • 三、变量值的设置
    • 3.1 通过参数文件设置
    • 3.2 通过命令行启动项设置
    • 3.3 通过set命令设置
      • 3.3.1 使用persist/persist_only关键字持久化变更
      • 3.3.2 查询persist持久化变更信息

一、变量的类型

MySQL中根据变量的作用范围可以将其分为两种:

  • 全局变量:影响整个数据库
  • 会话变量:影响某个会话

大部分变量同时具有全局和会话两种作用范围,其中会话变量会在客户端连接到MySQL时会根据全局变量进行初始化。

而根据变量是否可以在数据库运行时动态修改,也可将变量分为两种:

  • 静态变量:数据库运行时不能修改,需要重启生效
  • 动态变量:可以数据库运行时修改,不需要重启

二、变量值的查看

系统变量有很多查询方式,以下为4种常用的查询变量值方法:

  • 通过show命令查看
  • 通过select命令查看
  • 通过命令行工具mysqladmin查看
  • 通过查询performance_schema视图查看

2.1 使用show命令查看变量

使用show [global | session] variables [like ‘variable_name’];可以查看变量的值。global和session关键字指定查看全局或会话变量,省略时默认查看会话变量。like ‘variable_name’ 子句查看指定变量的值,可以使用通配符%和_,省略like子句则会输出所有变量。

示例:使用show命令查看autocommit(自动提交)变量的值,省略global/session时,默认返回会话变量的值(查看全局变量global不能省略):

show variables like 'autocommit';  -- 等于show session variables like 'autocommit';
show global variables like 'autocommit';

在这里插入图片描述

部分变量的范围只有全局,此时global/session关键字,无论用哪个关键字或省略,返回的都是全局变量值。例如max_connctions作用范围只有全局,下面的3个命令返回的都是全局的值:

show variables like 'max_connections';
show session variables like 'max_connections';
show global variables like 'max_connections';

在这里插入图片描述

2.2 使用select命令查看变量

使用select @@[global|session].variable_name; 可以查看指定变量的值,global/session省略时,默认查看会话变量。和show命令不同,select命令不能模糊匹配,只能查看某个具体变量的值。

示例:查看autocommit变量的值:

select @@autocommit;  -- 等于 select @@session.autocommit;
select @@global.autocommit;

在这里插入图片描述

2.3 使用命令行工具mysqladmin查看

使用MySQL自带的管理工具mysqladmin variables也可以查看系统变量,但这个命令只能输出全部的变量,通常配合grep过滤或重定向到文件后再查看。

mysqladmin variables > variables.txt 

在这里插入图片描述

2.4 通过performance_schema视图查看

MySQL的performance_schema提供了几张视图可以直接用SQL查询变量信息:

  • global_variables 查询所有全局变量值
  • session_variables 查询所有会话变量值(当前会话)
  • variables_by_thread 查询每个会话的变量值(比session_variables多了一个thread_id)
  • variables_info 查询变量最近一次的设置信息,包括变量来源,范围,修改人,修改时间等

示例:查看全局变量autocommit的值:

select * from performance_schema.global_variables where variable_name='autocommit';

在这里插入图片描述

示例:查看最近一次autocommit变量的设置:

select * from performance_schema.variables_info where variable_name='autocommit';

在这里插入图片描述

三、变量值的设置

MySQL变量的设置有3种方式:

  • 通过参数文件设置
  • 通过命令行启动项设置
  • 通过set命令设置

MySQL启动时会根据参数文件初始化变量值,但MySQL的系统变量都有默认值,所以即使没有参数文件数据库也可以启动。这点和Oracle不同,Oracle如果没有初始化参数文件则无法启动。

3.1 通过参数文件设置

MySQL的参数文件是my.cnf,数据库在启动时会读取其[mysqld]和[server]模块下的内容并设置变量值。

可以通过下面的命令查看参数文件搜索路径,通常保留一个参数文件即可,后面的设置会覆盖前面的设置:

mysqld --verbose --help | grep my.cnf

在这里插入图片描述

将需要设置的参数放在my.cnf中的[mysqld]或[server]模块下,变量名中的"-“和”_"是通用的。对于布尔类型的变量,1和on代表启用,0和off代表关闭。对于数值类型的变量,可以用数字,表达式或者K, M, G作为单位来设置,例如设置max_allowed_packet为8M,下面的3种设置方式是等价的:

max_allowed_packet=8388608
max_allowed_packet=8*1024*1024
max_allowed_packet=8M

在这里插入图片描述

3.2 通过命令行启动项设置

在MySQL启动时用–variables(前面有双横杠)的方式也可以设置系统变量,通过命令行启动参数设置变量比my.cnf文件中的设置优先级更高,但缺点是不能持久化,重启时容易忘记。因此这种设置方式不太建议(把重要的配置放到参数文件中)。

示例:下面通过命令行选项启动数据库,变量名中"_“和”-"是通用的:

mysqld --user=mysql --port=3306 --max_allowed_packet=8M --lower-case-table-names=1 &

在这里插入图片描述

3.3 通过set命令设置

MySQL中set命令除了可以设置自定义变量,还可以在运行时修改系统变量的值。修改会话变量对当前会话立刻生效,修改全局变量只会影响后续新建会话,已存在的会话不受影响。

示例:全局变量设置,使用global或@@gloabl.限定全局变量,下面的2种设置方式是等价的:

set global max_connections=500;
set @@global.max_connections=500;

在这里插入图片描述

示例:会话变量设置使用session/@@session.,local/@@local.或省略,下面6种设置方式是等价的:

set session sql_mode='traditional';
set @@session.sql_mode='traditional';set local sql_mode='traditional';
set @@local.sql_mode='traditional';set sql_mode='traditional';
set @@sql_mode='traditional';

在这里插入图片描述

set命令还有个关键字default,可以将变量设置为初始值。会话变量会还原为全局变量的值,全局变量则设置为MySQL自己编译的默认值(不是启动时参数文件初始化的值):

set autocommit=default;
set global server_id=default;

在这里插入图片描述

3.3.1 使用persist/persist_only关键字持久化变更

上面的set命令都是动态修改变量,当会话退出,或者数据库重启,设置效果就消失了。MySQL8.0针对set命令做了持久化功能,通过persist/persist_only关键字可以将变更保存到数据目录下的mysqld-auto.cnf文件中,如此即使数据库重启设置也不会消失。

使用persist/persist_only持久化修改变量有如下优点:

  • 不需要修改my.cnf文件,意味着不需要登陆数据库服务器,通过远程会话即可持久化修改变量。
  • 自动语法校验,出现语法或变量值错误时,设置不会生效,而通过my.cnf文件,启动报错时才能知道错误。

示例:使用persist关键字修改全局变量同时持久化到mysqld-auto.cnf文件中(当前实例和重启都生效),下面2种方式是等价的:

set persist max_connections=500;
set @@persist.max_connections=500;

在这里插入图片描述

示例:使用persist_only关键字持久化到mysqld-auto.cnf文件中,但不修改当前系统全局变量(重启生效),下面2种方式是等价的:

set persist_only  server_id=32;
set @@persist_only.server_id=32;

在这里插入图片描述

持久化设置的变量可以通过reset persist [[if exists] variable_name];命令取消,if exists可以在未设置变量时不报错:

reset persist max_connections;  -- 取消指定的变量设置
reset persist;    -- 取消所有persist/persist_only设置的变量

在这里插入图片描述

3.3.2 查询persist持久化变更信息

mysqld-auto.cnf中的持久化变量会在参数文件my.cnf之后加载,相当于启动后对立刻数据库进行一次set global,因此可能覆盖my.cnf中的设置。而是否加载mysqld-auto.cnf由变量persisted_globals_load控制,设置为off则启动时会忽略mysqld-auto.cnf文件:

show variables like 'persisted_globals_load';

在这里插入图片描述

如果想知道有哪些变量通过set persist/persist_only命令做了持久化变更,可以通过下面两种方式查询:

  • 查看数据目录下的mysqld-auto.cnf文件内容
  • 通过select语句查询performance_schema.persisted_variables视图

示例:直接查看mysqld-auto.cnf内容,信息是以JSON格式存储的(不建议手动修改文件内容):

cat mysqld-auto.cnf

在这里插入图片描述

示例:通过performance_schema.persisted_variables查询:

select * from performance_schema.persisted_variables;

在这里插入图片描述

以上即是MySQL中系统变量的查询和修改方式,在修改变量前要熟悉变量的作用。在调整变量值之前最好通过mysqladmin variables命令将当前的服务器参数备份到文件中,如果调整后出现性能下降及时还原。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/745023.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

整数序列删除指定数字,其他数顺序不变

#include <stdio.h>//整数序列删除一个数&#xff0c;其他数顺序不变 int main() {int arr[50] {0};//int arr[50] {1,2,3,4,5};int n 0;int del 0;int i 0;int j 0;scanf("%d",&n);for(i 0;i < n;i)scanf("%d",&arr[i]);scanf(&q…

未来城市:数字孪生技术助力智慧城市构建

目录 一、数字孪生技术的兴起与定义 二、数字孪生技术在智慧城市构建中的应用 1、城市规划与管理 2、智慧交通 3、智慧能源 4、智慧环保 三、数字孪生技术助力智慧城市构建的挑战与对策 四、结语 随着科技的飞速发展&#xff0c;未来城市正在经历一场前所未有的变革。数…

Maven简单入门

Maven 一&#xff1a;什么是Maven&#xff1a; Maven是一个项目管理工具&#xff0c;用于构建和管理Java项目。它可以帮助开发人员自动化构建过程&#xff0c;管理项目依赖关系&#xff0c;并协助项目的发布和部署。通过Maven&#xff0c;开发人员可以定义项目的结构、依赖关…

C语言例3-11:使用算术运算符的例子。

代码如下&#xff1a; int main(void) {int a12, b10;float c2.0, d0.5;double e6.5, f13.0;printf("-a %d\n",-a);printf("ab %d\n",ab);printf("a-b %d\n",a-b);printf("a*b %d\n",a*b);printf("a/b %d\n"…

SE园区综合实验(未补齐版)

实验要求&#xff1a; 1.局域网存在vlan10和vlan20两个业务vlan&#xff0c;ip网段分别对应192.168.1.0/24和192.168.2.0/24 2.业务vlan可以在所有链路上传输数据 3.sw1和sw2之间的直连链路上配置静态链路聚合实现链路冗余&#xff0c;并提高链路带宽 4.sw3为某接入点二次交…

SpringBoot 项目整合xxl-job

一、简介 XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。要想在SpringBoot 项目中接入到XXL-JOB中进行分布式定时任务处理&#xff0c;可以参考官方文档: https://www.xuxueli.com/xxl-job/ 二、下载并部署调度中心 2.1…

【LeetCode】84. 柱状图中最大的矩形(困难)——代码随想录算法训练营Day60

题目链接&#xff1a;84. 柱状图中最大的矩形 题目描述 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为 1 。 求在该柱状图中&#xff0c;能够勾勒出来的矩形的最大面积。 示例 1: 输入&#xff1a;heights [2,1,5,…

msfconsole数据库连接不了的问题【已解决】

msfconsole数据库连接 1.msf数据库端口 msf使用的是postgresql&#xff0c;这个数据库默认端口是5432 单个模块的使用可以不需要数据库&#xff0c;但是模块与模块之间需要沟通的时候就会用到数据库。 2.查看msf数据库连接状态 db_status #msf内部查看systemctl status p…

HTML视频笔记

学习arm开发板&#xff0c;涉及到网页HTML PHP什么的&#xff0c;简单看个视频学习下 HTML&#xff5c;超简单HTML入门教程 https://developer.mozilla.org/zh-CN/docs/Web/HTML/Element ​​​​​​vscode需要的libc6等需要的版本高​​​​​​ 为了安装vscode&#xff0c;将…

Spring Cloud Alibaba微服务从入门到进阶(四)(服务发现-Nacos )

Nacos是服务发现组件和配置服务器 作为服务发现注册组件Nacos Server 搭建Nacos Server 下载、启动 访问nacos,默认 用户/密码 nacos/nacos 将应用注册到nacos 加依赖 在SpringCloud子项目中&#xff0c;Feign是属于OpenFeign&#xff0c;Sentinel、Nacos是属于alibaba的&…

FX110网:1月美国零售货币资金环比上升2.61%,嘉盛环比上升1.86%

美国商品期货交易委员会&#xff08;CFTC&#xff09;发布的最新月度报告显示&#xff0c;2024年1月零售货币存款与上月相比上升2.61%。 这份报告涵盖在美国运营的注册零售货币对交易商&#xff08;RFED&#xff09;和经纪自营商。包括嘉信理财&#xff08;CHARLES SCHWAB Futu…

【安装mysql】centos7 安装mysql

文章目录 1.卸载不用的环境2.获取mysql官方yum源3.开始安装4.常规登录4.1方法一&#xff1a;【博主可以】4.2方法二&#xff1a;直接用client登录4.3方法三&#xff1a;修改配置文件 5.设置配置文件5.1配置my .cnf5.2开机自启动 1.卸载不用的环境 查看有无mysql/mariadb ps ax…

天地图全国幼儿园数据下载与处理分析

概述 在看天地图服务资源的时候看到有个“幼儿园”的数据&#xff0c;好奇点开看了下&#xff0c;下载下来数据差看了下&#xff0c;数据质量还不错。本篇文章给大家分享一下这个数据的处理以及一些简单的统计分析结果。 数据下载 通过地址https://service.tianditu.gov.cn/…

嵌入式方向还有希望吗?

我刚开始学习&#xff0c;也不知道我定位的是单片机工程师&#xff0c;嵌入式工程师职位的。 我只知道电子工程师&#xff0c;这个职位其实偏硬件&#xff0c;很多岗位需求是硬件设计&#xff0c;PCB设计&#xff0c;还要懂焊接、各种仪器仪表使用&#xff0c;还有些需要懂单片…

Git提交代码进入coding

安装Git后建一个文件在文件里右键点击Git Bash使用命令配置用户名和邮箱git config --global user.name "你的用户名"和git config --global user.email "你的邮箱"命令git init来初始化&#xff0c;自动将当前仓库设置为master创建一个项目&#xff08;一…

C#操作像素替换图片中的指定颜色

待处理的图片&#xff0c;其特征是包含有限数量颜色&#xff0c;不同的颜色相互交叉使用&#xff0c;相同颜色并未完全连贯&#xff0c;需要将图片中的指定颜色替换为另一颜色。虽然很多图片处理工具都支持类似操作&#xff0c;最后还是自己动手编写简单的处理程序。   程序的…

4种小众的能力,帮你更好地适应未来

新年伊始&#xff0c;又是一个全新的开始。 未来的社会究竟需要什么样的能力&#xff1f;这已经是一个很老的话题&#xff0c;已经有许许多多讨论了。但这其中&#xff0c;可能有一些是容易被人忽略的&#xff0c;或者不容易被注意到的。 我想跟你一起分享&#xff0c;我对这个…

Live800:企业如何与客户建立长期、稳定关系,实现双赢

在当今的商业环境中&#xff0c;企业不仅需要吸引新客户&#xff0c;更需要与现有客户建立长期、稳定的关系。这样的关系可以带来持续的收入&#xff0c;提高企业的利润性。然而&#xff0c;如何建立和维护这样的关系呢&#xff1f;文章将从三个方面进行深入探讨&#xff1a;提…

Milvus向量数据库检索

官方文档&#xff1a;https://milvus.io/docs/search.md   本节介绍如何使用 Milvus 搜索实体。   Milvus 中的向量相似度搜索会计算查询向量与具有指定相似度度量的集合中的向量之间的距离&#xff0c;并返回最相似的结果。您可以通过指定过滤标量字段或主键字段的布尔表达…

Javaweb-MyBatis

一、概念 MyBatis是一款优秀的持久层框架&#xff0c;用于简化JDBC开发 MyBatis本是Apache的一个开源项目iBatis&#xff0c;2010年这个项目由apache software found迁移到了google code&#xff0c;并且改名为MyBatis。2013年11月迁移到Github 持久层 负责将数据到保存到数…