【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组件的安全存储在服务器实例上不可用,也会发生这种情况。

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

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

相关文章

[AI Google] 10个即将到来的Android生态系统更新

新的体验带来了更强的防盗保护、手表电池寿命优化,以及对电视、汽车等的娱乐功能改进。 昨天,我们分享了Android如何以人工智能为核心重新构想智能手机。今天,我们推出了Android 15的第二个测试版,并分享了更多我们改进操作系统的…

java原型模式 (Prototype Pattern) 介绍

原型模式(Prototype Pattern)是一种创建型设计模式,它通过复制现有的实例来创建新对象,而不是通过实例化类来创建对象。这个模式允许你创建对象时避免复杂的初始化步骤,并且能够动态地创建对象的副本。 原型模式的关键…

Python导入Shapefile到PostGIS的常见问题和解决方案

导入Shapefile到PostGIS的常见问题和解决方案 先决条件: 已经拥有含有GDAL的python环境(如果大家需要,我可以后面出一片文章 问题一:QGIS连接到PostGIS数据库失败 错误描述: Connection to server at &quo…

Vue3实战笔记(40)—组件逻辑复用:自定义Hooks的完全指南

文章目录 前言一、状态管理二、副作用处理三、 生命周期钩子总结 前言 自定义Hooks是Vue3中的一个重要特性,它允许您创建可重用的函数,以便在组件之间共享状态和逻辑。以下是一些关于自定义Hooks的常见用法。 一、状态管理 使用reactive或ref来创建响应…

题解:CF1969B(Shifts and Sorting)

题解:CF1969B(Shifts and Sorting) 一、题目翻译 给定一个二进制字符串,你可以将其中一个子段(注意不是子串,是连续的)进行循环移位——将最后一个字符放在第一个字符之前,其代价为…

2024 CCF国际AIOps挑战赛·赛题与赛制解读

本文根据本届挑战赛程序委员会主席、中国科学院计算机网络信息中心副研究员裴昶华在2024 CCF国际AIOps挑战赛线下宣讲会上为《2024 CCF国际AIOps挑战赛赛题与赛制》的分享整理而成,全文分为挑战赛背景介绍、题目简介、流程说明和评分规则等部分,最后简要…

别对我动心短视频:成都鼎茂宏升文化传媒公司

别对我动心短视频:时代的爱情哲学与心理探索 在短视频的海洋里,"别对我动心"这样的标题,如同一颗石子投入平静的湖面,激起了层层涟漪。它不仅仅是对一段情感的拒绝,更是一种现代人情感态度的表达&#xff0…

14 vue学习:透传Attributes

Attributes 继承 “透传 attribute”指的是传递给一个组件,却没有被该组件声明为 [props]或 [emits]的 attribute 或者 v-on 事件监听器。最常见的例子就是 class、style 和 id。 当一个组件以单个元素为根作渲染时,透传的 attribute 会自动被添加到根元…

【FAQ】HarmonyOS SDK 闭源开放能力 —Account Kit(2)

1.问题描述: 怎么判断登录的华为帐号有变动? 解决方案: 华为帐号登录成功后会返回唯一标识OpenID和UnionID,如果切换不同的华为帐号登录,这个唯一标识会变。 OpenID是华为帐号用户在不同类型的产品的身份ID&#x…

JWT Authorization header using the Bearer scheme

文章目录 引言I Json web token (JWT)1.1 JWT1.2 authentication_schemes(token authentication)1.3 SecurityScheme的实现II Swagger添加bearer token参数2.1 Swagger效果2.2 .net core Swagger实现Bearer Authentication2.3 java OpenAPI 3.0实现Bearer Authentication2.4 …

【全部更新完毕】2024长三角数学建模A题思路代码文章教学-“抢救”落水手机

文章摘要部分: “抢救”落水手机 摘要 文章主要探讨了如何科学地处理和搜索在水体中意外掉落的物品:华为 Mate 60 Pro手机和居民身份证。本文基于物理模型和动力学分析,为不同水体环境中的掉落物品提供了详尽的搜索策略和打捞建议。 本文…

[安洵杯 2019]crackMe

直接就退出程序了 找到关键函数了,好像用到了 hook 还有一个 嘿嘿,看着就是像 base64 只是 补‘’改成了‘ ! ’ 交叉引用啊,翻到一个应该是最后比较函数 1UTAOIkpyOSWGv/mOYFY4R!! 那一坨对 a1数组的操作没看懂 先总结一下就是…

SpringBoot搭建Eureka注册中心

系列文章目录 文章目录 系列文章目录前言前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。 1、Spring-Cloud Euraka介绍 Spring-Cloud Euraka是Spring Cloud集合中一…

vue3 + vite 实用依赖与配置

mark一下日常 vue3 vite 项目配置 实用依赖与配置 1. amfe-flexible(2)安装(3)使用 2. postcss-pxtorem(1)介绍(2)安装(3)使用 3. autoprefixer(…

Convolutional Occupancy Networks【ECCV2020】

论文:https://arxiv.org/pdf/2003.04618 代码:GitHub - autonomousvision/convolutional_occupancy_networks: [ECCV20] Convolutional Occupancy Networks 图 1:卷积占据网络。传统的隐式模型 (a) 由于其全连接网络结构,表现能力…

继承初级入门复习

注意:保护和私有在类中没有区别,但是在继承中有区别,private在继承的子类不可见,protect在继承的子类可见 记忆方法:先看基类的修饰符是private,那都是不可见的。如果不是,那就用继承的修饰和基…

对this对象的理解

This 是指函数被调用是的上下文,它指向最后一次调用这个方法的对象。this的值并不是在函数定义时确定的,而是在函数被调用时确定的。在实际开发中,this 的指向一般可以通过四种调用模式来判断。 1、函数调用 当一个函数不是一个对象的属性时…

使用keepalived实现mysql主从复制的自动切换

使用Keepalived实现MySQL主从复制的自动切换通常涉及配置一个虚拟IP(VIP)作为MySQL服务器对客户端的访问点。Keepalived会监控MySQL主服务器的健康状况,如果主服务器宕机,Keepalived会自动将虚拟IP移至备用服务器,从而…

鸿蒙实战开发:网络层的艺术——优雅封装与搭建指南(上)

在鸿蒙的广袤开发世界中,网络层作为信息交换的桥梁,其重要性不言而喻。今天,我将带领大家一同探索如何以艺术般的手法,优雅地封装鸿蒙官方的网络库,为我们的应用搭建一个高效、灵活的网络层。我们在下一篇章中,将深入阐述如何利用这一封装完善的网络库,轻松驾驭网络层的…

gstreamer Windows常见问题汇总

需要先安装gstreamer , 再编译opencv。https://gstreamer.freedesktop.org/download/,都需要安装。 OpenCV Error: Unspecified error (The function is not implemented. Rebuild the library with Windows, GTK 2.x or Carbon support. If you are on Ubuntu or D…