当前位置: 首页 > news >正文

【MySQL精通之路】系统变量-持久化系统变量

MySQL服务器维护用于配置其操作的系统变量

系统变量可以具有影响整个服务器操作的全局值,也可以具有影响当前会话的会话值,或者两者兼而有之。

许多系统变量是动态的,可以在运行时使用SET语句进行更改,以影响当前服务器实例的操作。

SET还可以用于将某些全局系统变量持久化到数据目录中的mysqld-auto.cnf文件中,以影响后续启动的服务器操作。

RESET PERSIST从mysqld-auto.cnf中删除持久化设置。

以下讨论描述了持久化系统变量的各个方面:

1 持久化系统变量概述

在运行时持久化全局系统变量的功能使服务器配置能够在服务器启动时持久化。

尽管许多系统变量可以在启动时从my.cnf选项文件设置,也可以在运行时使用set语句设置,但这些配置服务器的方法要么需要登录访问服务器主机,要么不提供在运行时远程持久配置服务器的能力:

修改配置文件需要直接访问该文件,这需要登录MySQL服务器主机。这并不总是方便的。

使用SET GLOBAL修改系统变量是一种运行时功能,可以在本地运行的客户端或远程主机上完成,但更改仅影响当前运行的服务器实例。这些设置不是持久的不会延续到后续的服务器启动中。

为了增强服务器配置的管理功能,使其超出编辑配置文件使用SET GLOBAL所能实现的范围,MySQL提供了SET语法的变体,将系统变量设置持久化到数据目录中名为mysqld-auto.cnf文件的文件中。

示例:

SET PERSIST max_connections = 1000;
SET @@PERSIST.max_connections = 1000;SET PERSIST_ONLY back_log = 100;
SET @@PERSIST_ONLY.back_log = 100;

MySQL还提供了一个RESET PERSIST语句,用于从mysqld-auto.cnf中删除持久化的系统变量

通过持久化系统变量执行的服务器配置具有以下特征:

持久化设置是在运行时进行的。

持久化设置是永久性的。它们适用于服务器重新启动时。

可以从本地客户端或从远程主机连接的客户端进行持久化设置。

提供了从中央客户端主机远程配置多个MySQL服务器的便利性

要持久化系统变量,您不需要对MySQL服务器主机具有登录访问权限,也不需要对选项文件具有文件系统访问权限。

持久化设置的能力是使用MySQL特权系统控制的。

参见“系统变量权限”。

【MySQL精通之路】系统变量-系统变量权限-CSDN博客

具有足够权限的管理员可以通过保留系统变量来重新配置服务器,然后通过执行RESTART语句使服务器立即使用更改后的设置

持久化设置提供有关错误的即时反馈。

手动输入的设置中的错误可能要过很久才能发现。持久化系统变量SET语句避免了设置格式错误的可能性,因为存在语法错误的设置不会成功,也不会更改服务器配置。

2.持久化系统变量的语法

这些SET语法选项可用于持久化系统变量:

要将全局系统变量持久化到数据目录中的mysqld-auto.cnf选项文件中,请在变量名之前加上persist关键字或@@persist。

SET PERSIST max_connections = 1000;
SET @@PERSIST.max_connections = 1000;

SET GLOBAL一样,SET PERSIST设置全局变量运行时值,但也将变量设置写入mysqld-auto.cnf文件(如果有,则替换任何现有的变量设置)。

要在不设置全局变量运行时值的情况下将全局系统变量持久化到mysqld-auto.cnf文件,请在变量名之前加上persist_ONLY关键字或@@persist_UNLY。合格者

SET PERSIST_ONLY back_log = 1000;
SET @@PERSIST_ONLY.back_log = 1000;

与PERSIST一样,PERSIST_ONLY将变量设置写入mysqld-auto.cnf

但是,与PERSIST不同,PERSIST_ONLY不修改全局变量运行时值。

这使得PERSIST_ONLY适合配置只读系统变量,这些变量只能在服务器启动时设置

有关SET的更多信息,请参阅

“变量赋值的SET语法”。

这些RESET PERSIST语法选项可用于删除持久化的系统变量:

要从mysqld-auto.cnf中删除所有持久化变量,请使用RESET PERSIST,而不指定任何系统变量:

RESET PERSIST;

要从mysqld-auto.cnf中删除特定的持久化变量,请在语句中命名:

RESET PERSIST system_var_name;

这包括插件系统变量,即使当前未安装插件。如果该变量不在文件中,则会发生错误。

要从mysqld-auto.cnf中删除特定的持久化变量,但如果该变量不在文件中,则会产生警告而不是错误,请在前面的语法中添加if EXISTS子句:

RESET PERSIST IF EXISTS system_var_name;

有关RESET PERSIST的更多信息,请参阅

“RESET PERIST声明”。

使用SET将全局系统变量持久化为DEFAULT值或其字面默认值,会为该变量指定其默认值,并将该变量的设置添加到mysqld-auto.cnf。要从文件中删除变量,请使用RESET PERSIST

某些系统变量无法持久化。参见“不持久和持久受限系统变量”。

【MySQL精通之路】系统变量-不持久和持久受限系统变量-CSDN博客

如果在执行SET语句时安装了插件,则插件实现的系统变量可以持久化。如果插件仍在安装,则持久化插件变量的分配将在随后的服务器重新启动时生效。如果不再安装插件,则当服务器读取mysqld-auto.cnf文件时,插件变量不存在。在这种情况下,服务器会在错误日志中写入警告并继续:

currently unknown variable 'var_name' was read from the persisted config file

3.获取有关持久化系统变量的信息

Performance Schema库persisted_variables表mysqld-auto.cnf文件提供了一个SQL接口,使其内容能够在运行时使用SELECT语句进行检查。

参见“Performance Schema库persisted_variables表”。

Performance Schema库variables_info表包含显示最近设置每个系统变量时间用户的信息。

参见“Performance Schema库variables_info表”。

RESET PERSIST会影响persisted_variables表的内容,因为该表的内容与mysqld-auto.cnf文件的内容相对应。

另一方面,由于RESET PERSIST不会更改变量值,因此在服务器重新启动之前,它不会影响variables_info表的内容。

4.mysqld-auto.cnf文件的格式与服务器处理流程

mysqld-auto.cnf文件使用如下JSON格式(为了可读性,稍微重新格式化):

{"Version": 1,"mysql_server": {"max_connections": {"Value": "152","Metadata": {"Timestamp": 1519921341372531,"User": "root","Host": "localhost"}},"transaction_isolation": {"Value": "READ-COMMITTED","Metadata": {"Timestamp": 1519921553880520,"User": "root","Host": "localhost"}},"mysql_server_static_options": {"innodb_api_enable_mdl": {"Value": "0","Metadata": {"Timestamp": 1519922873467872,"User": "root","Host": "localhost"}},"log_slave_updates": {"Value": "1","Metadata": {"Timestamp": 1519925628441588,"User": "root","Host": "localhost"}}}}
}

在启动时,服务器在处理所有其他配置文件之后处理mysqld-auto.cnf文件

(请参阅“使用配置文件”)。

【MySQL精通之路】MySQL的使用(2)-配置-CSDN博客

服务器按如下方式处理文件内容:

如果禁用了persisted_globals_load系统变量,则服务器将忽略mysqld-auto.cnf文件。

mysql_server_static_options”部分包含使用SET PERSIST_ONLY持久化的只读变量。该部分也可能(尽管其名称如此)包含某些非只读的动态变量

本节中的所有变量都附加到命令行中,并使用其他命令行选项进行处理。

稍后,在服务器开始侦听客户端连接之前,通过执行等效的 SET GLOBAL语句来设置所有剩余的持久化变量。因此,这些设置直到启动过程的后期才会生效,这可能不适合某些系统变量。

最好在my.cnf中设置这样的变量,而不是在mysqld-auto.cnf中。

mysqld-auto.cnf文件的管理应该留给服务器。

文件的操作只能使用SETRESET PERSIST语句执行,而不能手动执行:

删除该文件会导致在下一次服务器启动时丢失所有保留的设置

如果您打算在没有这些设置的情况下重新配置服务器,则允许这样做。

要在不删除文件本身的情况下删除文件中的所有设置,请使用以下语句:

RESET PERSIST;

手动更改文件可能会导致服务器启动时出现解析错误

在这种情况下,服务器会报告一个错误并退出。

如果出现此问题,请在禁用persisted_globals_load系统变量或使用--no defaults选项的情况下启动服务器。

或者,删除mysqld-auto.cnf文件。但是,如前所述,删除此文件会导致丢失所有保留的设置

5.持久化敏感系统变量

从MySQL 8.0.29开始,MySQL Server能够安全地存储包含私钥密码等敏感数据的持久化系统变量值,并限制对这些值的查看。

目前没有MySQL Server系统变量被标记为敏感,但新功能允许包含敏感数据的系统变量在未来安全地持久化

升级到MySQL 8.0.29后,mysqld-auto.cnf配置文件的格式保持不变,直到第一次发出SET PERSIST或SET PERSIST-ONLY语句,并且在这一点上它被更改为新的格式,即使所涉及的系统变量不敏感。

在新格式中,旧版本的MySQL Server无法读取选项文件

注意:
必须在MySQL Server实例上启用keyring组件,以支持持久化系统变量值的安全存储,而不是不支持该功能的keyring插件。

请参阅“MySQL密钥环”。

mysqld-auto.cnf配置文件中,敏感系统变量的名称和值以加密的格式存储,以及生成的用于解密它们的文件密钥。

生成的文件密钥依次使用存储在keyring中的主密钥(persisted_variables_key)进行加密。

当服务器启动时,将解密并使用持久化敏感的系统变量。

默认情况下,如果选项文件中存在加密值,但在启动时无法成功解密,则使用其默认设置

如果无法解密加密的值,则可配置的最安全的设置(persist_sensitive_variables_in_plaintext)会使服务器停止启动。

系统变量persist_sensitive_variables_in_plaintext控制是否允许服务器以未加密的格式存储敏感系统变量的值,如果在使用 SET PERSIST设置值时不支持keyring组件。

如果加密的值无法解密,它还控制服务器是否可以启动。

默认设置ON在keyring组件支持可用的情况下对值进行加密,如果不支持,则保持未加密的值(并发出警告)。

下次设置任何持久化系统变量时,如果当时支持keyring,则服务器会对任何未加密的敏感系统变量的值进行加密。

ON设置还允许服务器在加密的系统变量值无法解密的情况下启动,在这种情况下会发出警告并使用系统变量的默认值。

在这种情况下,它们的值在被解密之前无法更改。

最安全的设置是OFF表示如果keyring组件支持不可用,敏感的系统变量值将无法持久化。

OFF设置还意味着,如果无法解密加密的系统变量值,则服务器不会启动。

SENSITIVE_VARIABLES_OBSERVER权限

允许持有者查看Performance Schema库的

global_variables

session_variables

variables_by_thread

persisted_variables

敏感系统变量的值,发出SELECT语句返回其值,并在连接的会话跟踪器中跟踪对其的更改。

没有此权限的用户无法查看或跟踪这些系统变量值。

如果为敏感的系统变量发出SET语句,则在将查询记录到常规日志和审核日志之前,会重写查询以将值替换为“<redated>”。即使通过keyring组件的安全存储在服务器实例上不可用,也会发生这种情况。

相关文章:

【MySQL精通之路】系统变量-持久化系统变量

MySQL服务器维护用于配置其操作的系统变量。 系统变量可以具有影响整个服务器操作的全局值,也可以具有影响当前会话的会话值,或者两者兼而有之。 许多系统变量是动态的,可以在运行时使用SET语句进行更改,以影响当前服务器实例的…...

fdk-aac将aac格式转为pcm数据

int sampleRate 44100; // 采样率int sampleSizeInBits 16; // 采样位数,通常是16int channels 2; // 通道数,单声道为1,立体声为2FILE *m_fd NULL;FILE *m_fd2 NULL;HANDLE_AACDECODER decoder aacDecoder_Open(TT_MP4_ADTS, 1);if (!…...

【C语言深度解剖】(15):动态内存管理和柔性数组

🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…...

力扣每日一题 5/25

题目: 给你一个下标从 0 开始、长度为 n 的整数数组 nums ,以及整数 indexDifference 和整数 valueDifference 。 你的任务是从范围 [0, n - 1] 内找出 2 个满足下述所有条件的下标 i 和 j : abs(i - j) > indexDifference 且abs(nums…...

(1)无线电失控保护(一)

文章目录 前言 1 何时触发失控保护 2 将会发生什么 3 接收机配置...

基于51单片机的多功能万年历温度计—可显示农历

基于51单片机的万年历温度计 (仿真+程序+原理图+设计报告) 功能介绍 具体功能: 本设计基于STC89C52(与AT89S52、AT89C52通用,可任选)单片机以及DS1302时钟芯片、DS18B…...

【软件设计师】下午题总结-数据流图、数据库、统一建模语言

下午题总结 1 试题一1.1 结构化语言 2 试题二弱实体增加权限增加实体间联系和联系的类型 3 试题三3.1 UML关系例子 3.2 例子(2016上半年)3.3 设计类分类3.3.1 接口类3.3.2 控制类3.3.3 实体类 3.4 简答题3.4.1 简要说明选择候选类的原则3.4.2 某个类必须…...

CSDN 自动评论互动脚本

声明 该脚本的目的只是为了提升博客创作效率和博主互动效率,希望大家还是要尊重各位博主的劳动成果。 数据库设计 尽量我们要新建一个数据库csdn_article,再在其中建一个数据表article -- csdn_article-- article-- 需要进行自动评论的表格信息...CREATE TABLE `article`…...

Tomcat端口配置

Tomcat是开源免费的服务器,其默认的端口为8080,本文讲述一下如何配置端口。 最后在浏览器中输入localhost:8888即可打开Tomcat界面...

SpringBoot中使用AOP实现日志记录功能

目录 一、SpringBoot框架介绍 二、什么是 AOP 三、日志记录的必要性 四、SpringBoot中如何使用AOP实现日志记录功能 一、SpringBoot框架介绍 SpringBoot是一个开源的Java开发框架,旨在简化基于Spring框架的应用程序的开发。它提供了一套开箱即用的工具&#xf…...

kubernetes(k8s) v1.30.1 helm 集群安装 Dashboard v7.4.0 可视化管理工具 图形化管理工具

本文 紧接上一篇:详细教程 Centos8.5 基于 k8s v1.30.1 部署高可用集群 kubeadm 安装 kubernetes v1.30.1 docker集群搭建 延长证书有效期-CSDN博客 1 Dashboard 从版本 7.0.0 开始,不再支持基于清单的安装。仅支持基于 Helm 的安装. #Helm 下载安装 …...

CS144(所有lab解析)

CS144 lab0-CSDN博客 (CS144 2024)Lab Checkpoint 1: stitching substrings into a byte stream (详细解析)-CSDN博客 CS144 Lab2 (2024)超详细解析-CSDN博客 Lab Checkpoint 3: the TCP sender-CSDN博客 CS144 Checkpoint 4: in…...

LeetCode 热题 100 介绍

"LeetCode热题100"通常是指LeetCode上被用户频繁练习和讨论的100道热门题目。这些题目往往对于面试准备和算法学习非常有帮助。 哈希 两数之和 难度:简单链接🔗: 这 字母异位词分组 难度:中等链接🔗&#x…...

Flutter 中的 AnimatedPhysicalModel 小部件:全面指南

Flutter 中的 AnimatedPhysicalModel 小部件:全面指南 Flutter 的 AnimatedPhysicalModel 是一个功能强大的小部件,它允许开发者创建具有物理效果的动画形状变换。这个小部件非常适合需要展示平滑过渡和动态交互的场景,如按钮按下效果、卡片…...

第二十届文博会沙井艺立方分会场启幕!大咖齐打卡!

2024年5月24日-27日,第二十届中国(深圳)国际文化产业博览交易会沙井艺立方分会场活动将在艺立方非遗(文旅)产业园盛大举办。 本届文博会艺立方分会场活动办展特色鲜明,亮彩纷呈,将以“种下梧桐树…...

【Vue】computed 和 methods 的区别

概述 在使用时,computed 当做属性使用,而 methods 则当做方法调用computed 可以具有 getter 和 setter,因此可以赋值,而 methods 不行computed 无法接收多个参数,而 methods 可以computed 具有缓存,而 met…...

HarmonyOS 鸿蒙应用开发 - 创建自定义组件

开发者定义的称为自定义组件。在进行 UI 界面开发时,通常不是简单的将系统组件进行组合使用,而是需要考虑代码可复用性、业务逻辑与UI分离,后续版本演进等因素。因此,将UI和部分业务逻辑封装成自定义组件是不可或缺的能力。 1、创…...

【Vue3】封装axios请求(cli和vite)

原文作者:我辈李想 版权声明:文章原创,转载时请务必加上原文超链接、作者信息和本声明。 Vue 【Vue3】env环境变量的配置和使用(区分cli和vite) 文章目录 Vue前言一、常见用法二、vue3cli封装接口1..env配置2..dev(开…...

Java8 Optional常用方法使用场景

前言: Optional 是 Java 8 的新特性,专治空指针异常(NullPointerException, 简称 NPE)问题,它是一个容器类,里面只存储一个元素(这点不同于 Conllection)。 为方便用户通过 Lambda 表…...

isscc2024 short course4 In-memory Computing Architectures

新兴的ML加速器方法:内存计算架构 1. 概述 内存计算(In-memory Computing)架构是一种新兴的机器学习加速器方法,通过将计算能力集成到存储器中,以减少数据移动的延迟和能耗,从而提高计算效率和性能。这种方…...

ubuntu 安装 kvm 启动虚拟机

1. 基础环境设置 #更新环境 apt update apt upgrade#配置网卡 cat >/etc/netplan/br.yml<<EOF network:ethernets:eth2: {}bridges:br0:interfaces:- eth2addresses:- 192.192.1.213/24gateway4: 192.192.1.1nameservers:addresses:- 8.8.8.8- 8.8.4.4 EOF #安装组件…...

[OpenGL] opengl切线空间

目录 一 引入 二 TBN矩阵 三 代码实现 3.1手工计算切线和副切线 3.2 像素着色器 3.3 切线空间的两种使用方法 3.4 渲染效果 四 复杂的物体 本章节源码点击此处 继上篇法线贴图 来熟悉切线空间是再好不过的。对于法线贴图来说,我们知道它就是一个2D的颜色纹理,根据rgb…...

SpringCloud微服务03-微服务保护-分布式事务-MQ基础-MQ高级

一、微服务保护 1.雪崩问题 如何做好后备方案就是后续&#xff1a; 2.雪崩解决方案 某一个服务的线程是固定的&#xff0c;出现故障线程占满后&#xff0c;就不会让取调用这个服务&#xff0c;对其他服务就没有影响。 3.Sentinel ①初识Sentinel 配置过程&#xff1a;day05-服…...

住宅IP?

住宅IP是由主要运营商&#xff08;如电信、移动、联通等&#xff09;为用户开通的宽带业务所分配的IP地址。这些IP地址是真实的、具有实际位置的IP&#xff0c;与普通用户的设备IP和宽带网络IP一致。它们不是连续的&#xff0c;而是散点分布&#xff0c;这使得它们在使用时更加…...

SpringBoot实现邮箱验证码

自行创建一个SpringBoot项目 导入SpringBoot所需要的邮箱验证码的包 <!--邮件发送--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>2.6.1</version>…...

GPT提示词技巧,使用教程,国内版官网直达,非套壳

GPT提示词技巧&#xff0c;使用教程&#xff0c;国内版官网直达&#xff0c;非套壳 主站点&#xff1a;https://chatgpt-plus.top&#xff08;江苏福建地区打不开&#xff0c;需要魔法&#xff09; 店铺地址&#xff1a;https://buy.chatgpt-plus.top/ 选择plus账号进入&…...

MySQL多表关联查询习题

一、素材 -- Active: 1714203732007127.0.0.13306db_stu -- 1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); -- 创建…...

Android正向开发实现客户端证书认证

前言 如果第三方模块被混淆,那hook方式均不能生效。这时就需要根据系统包去定位校验的函数,因此需要对安卓开发者是如何实现客户端证书校验的有一定了解,接下来就介绍这部分内容。 开发者实现客户端证书校验的本质是:证书/密钥 + 代码。 在形式上有:证书校验、公钥校验和…...

【Kubernetes】Pod无法访问Service域名问题排查

背景 部署过多套k8s集群&#xff0c;发现在其中一套k8s环境中&#xff0c;在Pod内无法访问Service Name&#xff0c;访问了很多次&#xff0c;偶尔又能通&#xff0c;使用Service的IP能正常访问&#xff0c;域名解析的问题基本确定与CoreDNS有关系&#xff0c;于是开始了一系列…...

【JAVA基础之网络编程】UDP和TCP协议以及三次握手和四次挥手的过程

&#x1f525;作者主页&#xff1a;小林同学的学习笔录 &#x1f525;mysql专栏&#xff1a;小林同学的专栏 目录 1. 网络编程 1.1 概述 1.2 网络编程的三要素 1.2.1 IP地址 1.2.2 InetAddress 1.2.3 端口和协议 1.3 UDP协议 1.3.1 UDP发送数据 1.3.2 UDP接收数据 1.4…...