【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文件的管理应该留给服务器。
文件的操作只能使用SET和RESET 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框架的应用程序的开发。它提供了一套开箱即用的工具…...

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)架构是一种新兴的机器学习加速器方法,通过将计算能力集成到存储器中,以减少数据移动的延迟和能耗,从而提高计算效率和性能。这种方…...

XML Group端口详解
在XML数据映射过程中,经常需要对数据进行分组聚合操作。例如,当处理包含多个物料明细的XML文件时,可能需要将相同物料号的明细归为一组,或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码,增加了开…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈
在日常iOS开发过程中,性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期,开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发,但背后往往隐藏着系统资源调度不当…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...

Vue ③-生命周期 || 脚手架
生命周期 思考:什么时候可以发送初始化渲染请求?(越早越好) 什么时候可以开始操作dom?(至少dom得渲染出来) Vue生命周期: 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

Xela矩阵三轴触觉传感器的工作原理解析与应用场景
Xela矩阵三轴触觉传感器通过先进技术模拟人类触觉感知,帮助设备实现精确的力测量与位移监测。其核心功能基于磁性三维力测量与空间位移测量,能够捕捉多维触觉信息。该传感器的设计不仅提升了触觉感知的精度,还为机器人、医疗设备和制造业的智…...
人工智能 - 在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型
在Dify、Coze、n8n、FastGPT和RAGFlow之间做出技术选型。这些平台各有侧重,适用场景差异显著。下面我将从核心功能定位、典型应用场景、真实体验痛点、选型决策关键点进行拆解,并提供具体场景下的推荐方案。 一、核心功能定位速览 平台核心定位技术栈亮…...