MySQL服务器维护配置其操作的系统变量。系统变量可以具有影响整个服务器操作的全局值,影响当前会话的会话值或两者。许多系统变量是动态的,可以在运行时使用该SET 语句更改 以影响当前服务器实例的操作。 SET也可以用于将某些全局系统变量持久保存到mysqld-auto.cnf数据目录中的 文件中,以影响后续启动时服务器的操作。 RESET PERSIST从中删除保留的设置mysqld-auto.cnf。
以下讨论描述了持久化系统变量的各个方面:
持久性系统变量概述
持久系统变量的语法
获取有关持久性系统变量的信息
mysqld-auto.cnf文件的格式和服务器处理
持久性系统变量概述
在运行时持久保存全局系统变量的功能使服务器配置可以在服务器启动之间持久保存。尽管可以在启动时从my.cnf选项文件中设置许多系统变量,或者使用以下SET 语句在运行时进行设置 ,但是那些配置服务器的方法要么要求登录到服务器主机,要么不提供在运行时持久配置服务器的能力。远程:
修改选项文件需要直接访问该文件,而该文件需要具有对MySQL服务器主机的登录访问权限。这并不总是很方便。
修改系统变量具有 SET GLOBAL一项运行时功能,可以从本地运行的客户端或远程主机运行,但是更改仅影响当前正在运行的服务器实例。这些设置不是永久性的,不会延续到后续的服务器启动中。
为了增强服务器配置的管理功能,超出通过编辑选项文件或使用所能实现的功能 SET GLOBAL,MySQL提供了一些SET 语法变体,可 将系统变量设置保留到mysqld-auto.cnf数据目录中名为 file的文件中。例子:
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特权系统控制的。请参见 第5.1.9.1节“系统变量特权”。
具有足够特权的管理员可以通过保留系统变量来重新配置服务器,然后通过执行一条RESTART 语句使服务器立即使用更改的设置。
永久设置可立即提供有关错误的反馈。直到很久以后,才能发现手动输入的设置中的错误。 SET 保留系统变量的语句避免了设置格式错误的可能性,因为带有语法错误的设置不会成功并且不会更改服务器配置。
持久系统变量的语法
这些 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_ONLY.限定符:
SET PERSIST_ONLY back_log = 1000;
SET @@PERSIST_ONLY.back_log = 1000;
喜欢PERSIST, PERSIST_ONLY将变量设置写入mysqld-auto.cnf。但是,与不同PERSIST, PERSIST_ONLY它不会修改全局变量运行时值。这 PERSIST_ONLY适用于配置只能在服务器启动时设置的只读系统变量。
有关的更多信息 SET,请参见第13.7.6.1节“变量分配的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,请参见第13.7.8.7节“ RESET PERSIST语句”。
使用 SET一个全局系统变量坚持到的值 DEFAULT或者它的字面默认值赋给变量的默认值,并增加了一个设定的变量mysqld-auto.cnf。要从文件中删除变量,请使用 RESET PERSIST。
某些系统变量无法持久保存。请参见 第5.1.9.4节“非持久性和持久性限制的系统变量”。
如果在SET 执行语句时安装了插件,则可以持久化由插件实现的系统变量 。如果仍然安装了插件,则持久化插件变量的分配将在后续服务器重新启动时生效。如果不再安装插件,则服务器读取mysqld-auto.cnf文件时插件变量将不存在。在这种情况下,服务器将警告写入错误日志并继续:
currently unknown variable ‘var_name’
was read from the persisted config file
获取有关持久性系统变量的信息
Performance Schema persisted_variables表提供了该mysqld-auto.cnf文件的SQL接口 ,从而可以在运行时使用SELECT语句检查其内容 。请参见 第26.12.14.1节“性能模式persisted_variables表”。
“性能模式” variables_info表包含的信息显示了最近一次设置每个系统变量的时间和对象。请参见 第26.12.14.2节“性能模式variables_info表”。
RESET PERSIST影响persisted_variables表的内容, 因为表的内容与mysqld-auto.cnf文件的内容相对应 。另一方面,由于RESET PERSIST不更改变量值,因此它对variables_info表的内容没有影响,直到重新启动服务器为止。
mysqld-auto.cnf文件的格式和服务器处理
该mysqld-auto.cnf文件使用以下 JSON格式(为了便于阅读,对其进行了略微调整):
{
“Version”: 1,
“mysql_server”: {
“max_connections”: {
“Value”: “152”,
“Metadata”: {
“Timestamp”: 1.519921356e+15,
“User”: “root”,
“Host”: “localhost”
}
},
“transaction_isolation”: {
“Value”: “READ-COMMITTED”,
“Metadata”: {
“Timestamp”: 1.519921553e+15,
“User”: “root”,
“Host”: “localhost”
}
},
“mysql_server_static_options”: {
“innodb_api_enable_mdl”: {
“Value”: “0”,
“Metadata”: {
“Timestamp”: 1.519921573e+15,
“User”: “root”,
“Host”: “localhost”
}
},
“log_slave_updates”: {
“Value”: “1”,
“Metadata”: {
“Timestamp”: 1.519921582e+15,
“User”: “root”,
“Host”: “localhost”
}
}
}
}
}
在启动时,服务器将mysqld-auto.cnf在所有其他选项文件之后处理该 文件(请参见第4.2.2.2节“使用选项文件”)。服务器按以下方式处理文件内容:
如果persisted_globals_load 禁用了 系统变量,则服务器将忽略该 mysqld-auto.cnf文件。
SET PERSIST_ONLY本"mysql_server_static_options"节中 仅显示 使用持久化的只读变量 。本节中存在的所有变量都将附加到命令行,并使用其他命令行选项进行处理。
SET GLOBAL在服务器开始侦听客户端连接之前,可以通过稍后 执行等效的语句来设置所有剩余的持久变量 。因此,这些设置直到启动过程的后期才生效,这可能不适用于某些系统变量。最好在中my.cnf而不是中 设置此类变量 mysqld-auto.cnf。
mysqld-auto.cnf文件的 管理应留给服务器。只能使用SET 和RESET PERSIST语句来操作文件 ,而不要手动执行:
删除文件会导致在下次服务器启动时丢失所有持久设置。(如果您的意图是在没有这些设置的情况下重新配置服务器,这是允许的。)要删除文件中的所有设置而不删除文件本身,请使用以下语句:
RESET PERSIST;
手动更改文件可能会在服务器启动时导致解析错误。在这种情况下,服务器将报告错误并退出。如果发生此问题,请在persisted_globals_load 禁用系统变量或使用该 --no-defaults选项的情况下启动服务器 。或者,删除 mysqld-auto.cnf文件。但是,如前所述,删除此文件会导致所有持久设置丢失。




