首页 > 数据库 >MySQL 系统变量和 SET 命令

MySQL 系统变量和 SET 命令

时间:2024-12-08 18:45:09浏览次数:7  
标签:SET 变量 max connections 修改 MySQL

MySQL 的系统变量配置了 MySQL Server 如何运行,SET 语句用于修改系统变量。MySQL SET 命令有多种选项,用于指定如何以及何时修改系统变量。重要的是要了解这些修改如何反映在当前会话(连接)、以后的会话以及数据库服务器重启后。

 

用户可以使用 SET 修改的变量由其权限级别决定。系统变量有不同的作用域:global、session

 

SET 命令的语法:

SET variable = expr [, variable = expr] ...

variable: {
    user_var_name
  | param_name
  | local_var_name
  | {GLOBAL | @@GLOBAL.} system_var_name
  | {PERSIST | @@PERSIST.} system_var_name
  | {PERSIST_ONLY | @@PERSIST_ONLY.} system_var_name
  | [SESSION | @@SESSION. | @@] system_var_name
}

 

对于系统变量,要知道以下一些内容:

· 有些系统变量是动态的,会立即改变 MySQL Server 的行为

· 有些系统变量不修改 MySQL Server 运行时的行为,需要重启

· 有些系统变量可以修改 MySQL Server 运行时的行为,但是 dba 可以选择在重启后再应用

· 有些系统变量修改 MySQL Server 运行时的行为,但是重启后不会被持久化

· 有些系统变量修改只能应用于新建的连接,对于已有的连接不生效

 

考虑到上述可能性,为了更好地理解各种情况,接下来将通过示例回顾实际工作中的情况。

 

每个系统变量都包含各种属性。与此相关的 2 个属性是:适用范围(global、session、或同时支持global和session)、是否支持动态修改。

 

如果修改了全局系统变量,且该值对会话(连接)有影响,则该值将在会话初始化时使用。 因此,在设置全局值之前的任何现有连接都不会 "继承" 该值,只有新会话才会修改该设置。此外,根据 SET 命令,当重新启动时,对全局值的修改可能会被持久化,也可能不会被持久化。

 

以max_connections 为例:

 

用例1: set global

假设你想将 max_connections从默认值151修改成1000。如果执行以下命令:

MySQL> SET GLOBAL max_connections = 1000;

此前所有已存在的会话的 max_connections 设置是151;所有新建的连接的max_connections是1000;如果 mysql server 发生重启,重启后 max_connections还是151。

 

用例2: set persist

如果要修改新会话的 max_connections,并在重启后将所有会话设置为 1000,则需要将修改持久化。

MySQL> SET PERSIST max_connections = 1000;

 

用例3:set persist_only

还有另一个选择。你可能不想更改当前正在运行的服务器的值,在这种情况下,可以将值保留为 151,但在重新启动时,希望将值改为 1000。在这种情况下,您可以执行

MySQL> SET PERSIST_ONLY max_connections = 1000;

PERSIST 和 PERSIST ONLY 语句的结果都是写入新值,在本例中就是将 max_connections=1000 写入 mysqld-auto.cnf 文件。

 

用例4:reset/set成默认值

如果想设置成默认值,有两个选择:

1.重新设置并持久化,以下将mysqld-auto.cnf中值设置成默认值

MySQL> SET PERSIST max_connections = DEFAULT;

2.移除mysqld-auto.cnf中的设置同时设置成默认值

MySQL> RESET PERSIST max_connections;

 

如果想在会话级别修改 max_connections呢?

对于全局的变量,使用 set session 命令修改会报错。

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

SESSION 变量只在设置它们的当前会话中有效。

 

动态变量和非动态变量的区别

如果变量是动态的,通过set 设置后会立即应用和将变化反应到mysql server;如果和会话相关的,只会应用到新的会话。可以被持久化,也可以不持久化。

如果是非动态的,只可以使用set persist_only进行修改,生效需要重启mysql server。

 

了解自己的变量设置

show variables 命令可以提供全局变量和会话变量的活跃值:

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

 

此外,还可以通过performance_schema中的表进行查看:

#全局变量
select * from performance_schema.global_variables;

#会话变量
select * from performance_schema.session_variables;

#与线程相关的变量,根据线程id进行区分
select * from performance_schema.variables_by_thread;

#持久的变量,设置在mysqld-auto.cnf中的值
select * from performance_schema.persisted_variables;

#变量信息:变量设置的来源,值的范围,设置时间等
select * from performance_schema.variables_info;

标签:SET,变量,max,connections,修改,MySQL
From: https://www.cnblogs.com/abclife/p/18585802

相关文章

  • 基于springboot +MySQL共享自习室座位管理系统-计算机毕设 附源码00672
    springboot共享自习室座位管理系统的设计与实现摘 要随着互联网趋势的到来,各行各业都在考虑利用互联网将自己推广出去,最好方式就是建立自己的互联网系统,并对其进行维护和管理。在现实运用中,应用软件的工作规则和开发步骤,采用Java技术建设共享自习室座位管理系统。本设......
  • 基于Python的旅游景区商城购物网站的设计与实现mt74k(Pycharm Flask Django mysql)
    文章目录项目介绍具体实现截图开发技术设计思路开发与测试:核心代码部分展示文章目录/协作提纲源码/演示视频获取方式项目介绍旅游网站主要功能如下:1.用户管理:注册、登录、退出、修改密码;2.分类显示:显示旅游路线的分类;3.旅游路线显示:按分类查询旅游路线、通过关键......
  • 基于python的高校学科竞赛平台46869(Pycharm Flask Django mysql)
    文章目录项目介绍具体实现截图开发技术设计思路开发与测试:核心代码部分展示文章目录/协作提纲源码/演示视频获取方式项目介绍学生前台:1.首页:展示竞赛平台的基本信息和推荐竞赛活动。2.竞赛信息:提供竞赛的详细信息,包括竞赛名称、时间、地点、报名要求等。3.竞......
  • 「mysql优化专题」主从复制面试宝典!面试官都没你懂得多!
    作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码......
  • 「mysql优化专题」什么是慢查询?如何通过慢查询日志优化?
    作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码......
  • 有使用过css的images-set吗?它能解决什么问题?
    是的,我了解CSS的image-set()。它主要用于解决响应式图片和高分辨率屏幕适配的问题。image-set()允许你在CSS中指定多个图像,浏览器会根据设备的特性(例如像素密度和分辨率)选择最合适的图像显示。这比手动使用<picture>元素或mediaqueries更简洁高效。它能解决以下问题:......
  • pymysql几种方法举例【一看就会】【OneGIS开发】
    1. 连接对象方法示例- connect() importpymysql#建立与MySQL数据库的连接conn=pymysql.connect(  host='localhost',  user='root',  password='123456',  database='test_database')print("成功连接数据库") - commit()......
  • JAVA开源毕业设计 课程作业管理系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T023,文末自助获取源码\color{red}{T023,文末自助获取源码}......
  • JAVA开源毕业设计 社区团购系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T024,文末自助获取源码\color{red}{T024,文末自助获取源码}......
  • c++初识------for的循环变量的使用
    上次,我们讲了for循环,今天我们讲循环变量。废话不多说,直接进入正题。for循环语句的循环变量不仅仅可以用来控制循环运行的次数,还可以参与各种运算。举几个例子:观察数列:2 4 6 8 10...,输出数列的前n项。思路:第1步:因为要输出前n项,所以考虑用for循环。第2步:显......