MySQL服务器维护配置其操作的系统变量。系统变量可以具有影响整个服务器操作的全局值,也可以具有影响当前会话的会话值,或者两者都有。许多系统变量是动态的,可以在运行时使用集
语句以影响当前服务器实例的操作。集
也可用于将某些全局系统变量持久化到mysqld-auto.cnf
数据目录下的文件,以影响后续启动服务器的操作。重置持续
从mysqld-auto.cnf
.
下面的讨论描述了持久化系统变量的各个方面:
在运行时持久化全局系统变量的功能允许跨服务器启动持久化服务器配置。虽然许多系统变量可以在启动时设置my.cnf
选项文件,或在运行时使用集
语句,这些配置服务器的方法要么需要登录访问服务器主机,要么不提供在运行时或远程持久配置服务器的能力:
修改选项文件需要直接访问该文件,这需要登录访问MySQL服务器主机。这并不总是很方便。
修改系统变量
集全球
是一种运行时功能,可以从本地运行的客户机或远程主机执行,但更改仅影响当前运行的服务器实例。这些设置不是持久的,不会延续到后续的服务器启动。
增强服务器配置的管理功能,而不是通过编辑选项文件或使用集全球
, MySQL提供了集
将系统变量设置保存到名为mysqld-auto.cnf
数据目录下的文件。例子:
设置max_connections = 1000;设置@@PERSIST。Max_connections = 1000;SET PERSIST_ONLY back_log = 100;设置@@PERSIST_ONLY。Back_log = 100;
MySQL还提供了重置持续
语句,用于删除持久化系统变量mysqld-auto.cnf
.
通过持久化系统变量执行的服务器配置具有以下特征:
持久设置是在运行时进行的。
持久化设置是永久的。它们应用于服务器重启。
可以从本地客户端或从远程主机连接的客户端进行持久设置。这为从中央客户端主机远程配置多个MySQL服务器提供了便利。
要持久化系统变量,您不需要对MySQL服务器主机具有登录访问权限,也不需要对选项文件具有文件系统访问权限。使用MySQL特权系统控制持久化设置的能力。看到第5.1.9.1节,“系统变量特权”.
具有足够权限的管理员可以通过持久化系统变量重新配置服务器,然后通过执行命令使服务器立即使用更改后的设置
重新启动
声明。持久化设置提供关于错误的即时反馈。手动输入的设置中的错误可能要到很久以后才会被发现。
集
保存系统变量的语句避免了格式错误的设置的可能性,因为有语法错误的设置不会成功,也不会更改服务器配置。
这些集
语法选项可用于持久化系统变量:
将全局系统变量持久化到
mysqld-auto.cnf
选项文件,在变量名之前加上坚持
关键字或@@PERSIST。
限定符:设置max_connections = 1000;设置@@PERSIST。Max_connections = 1000;
就像
集全球
,设置保存
设置全局变量运行时值,还将变量设置写入mysqld-auto.cnf
文件(替换任何现有的变量设置,如果有的话)。将全局系统变量持久化到
mysqld-auto.cnf
文件,在不设置全局变量运行时值的情况下,在变量名前面加上PERSIST_ONLY
关键字或@@PERSIST_ONLY。
限定符:SET PERSIST_ONLY back_log = 1000;设置@@PERSIST_ONLY。Back_log = 1000;
就像
坚持
,PERSIST_ONLY
将变量设置写入mysqld-auto.cnf
.但是,与坚持
,PERSIST_ONLY
不修改全局变量运行时值。这使得PERSIST_ONLY
适用于配置只读系统变量,只能在服务器启动时设置。
欲了解更多有关集
,请参阅第13.7.6.1节,变量赋值的SET语法.
这些重置持续
语法选项可用于删除持久化系统变量:
中删除所有持久化变量
mysqld-auto.cnf
,使用重置持续
没有指定任何系统变量:重置坚持;
中删除特定的持久化变量
mysqld-auto.cnf
,在语句中命名它:重置持续system_var_name;
这包括插件系统变量,即使插件当前没有安装。如果该变量未出现在文件中,则会发生错误。
中删除特定的持久化变量
mysqld-auto.cnf
,但如果该变量未出现在文件中,则会产生警告而不是错误如果存在
子句到前面的语法:如果存在则重置持久化system_var_name;
欲了解更多有关重置持续
,请参阅第13.7.8.7节,“RESET PERSIST语句”.
使用集
将全局系统变量持久化为值默认的
或将其字面默认值赋给变量其默认值,并将变量的设置添加到mysqld-auto.cnf
.若要从文件中删除变量,请使用重置持续
.
有些系统变量不能持久。看到第5.1.9.4节“非持久化和持久化限制的系统变量”.
由插件实现的系统变量可以被持久化,如果该插件是在集
语句执行。如果插件仍然安装,持久化插件变量的赋值将在后续服务器重新启动时生效。如果该插件不再安装,则当服务器读取该插件时,该插件变量不存在mysqld-auto.cnf
文件。在这种情况下,服务器会向错误日志中写入警告,并继续执行:
当前未知变量'var_name'是从持久配置文件中读取的
性能模式persisted_variables
表提供SQL接口mysqld-auto.cnf
文件,使其内容可以在运行时使用选择
语句。看到第27.12.14.1节“性能模式persisted_variables表”.
性能模式variables_info
表包含的信息显示了何时以及由哪个用户最近设置了每个系统变量。看到第27.12.14.2节,“性能模式变量_info表”.
重置持续
控件的内容persisted_variables
表,因为表的内容对应的内容mysqld-auto.cnf
文件。另一方面,因为重置持续
不改变变量值,是否对内容没有影响variables_info
表,直到服务器重新启动。
的mysqld-auto.cnf
文件使用JSON
格式如下(为了可读性,稍微进行了格式化):
{"版本":1,"mysql_server": {"max_connections":{"值":"152","元数据":{"时间戳":1519921341372531,"用户":"root", "主机":"localhost"}}, "transaction_isolation":{"值":"READ-COMMITTED", "元数据":{"时间戳":1519921553880520,"用户":"root", "主机":"localhost"}}, "mysql_server_static_options": {"innodb_api_enable_mdl":{"值":"0","元数据":{"时间戳":1519922873467872,"用户":"root", "主机":"localhost"}}, "log_slave_updates":{"值":"1", "元数据":{"时间戳":1519925628441588,"用户":"root", "主机":"localhost"}}}}}
在启动时,服务器处理mysqld-auto.cnf
在所有其他选项文件之后归档(参见第4.2.2.2节“使用选项文件”).服务器对文件内容的处理如下:
如果
persisted_globals_load
系统变量被禁用时,服务器将忽略mysqld-auto.cnf
文件。的
“mysql_server_static_options”
节包含使用持久化的只读变量设置PERSIST_ONLY
.section也可能(尽管它的名字)包含某些非只读的动态变量。本节中的所有变量都被追加到命令行,并与其他命令行选项一起处理。所有剩余的持久化变量都是通过执行等价的
集全球
语句之后,就在服务器开始监听客户端连接之前。因此,这些设置直到启动过程的后期才生效,这可能不适合某些系统变量。最好将这些变量设置为my.cnf
而不是mysqld-auto.cnf
.
管理mysqld-auto.cnf
文件应该留给服务器。文件的操作应该只使用集
而且重置持续
语句,而不是手动:
删除该文件将导致在下次服务器启动时丢失所有持久设置。(如果您打算在没有这些设置的情况下重新配置服务器,这是允许的。)要在不删除文件本身的情况下删除文件中的所有设置,使用以下语句:
重置坚持;
手动更改文件可能导致在服务器启动时出现解析错误。在这种情况下,服务器报告错误并退出。如果出现此问题,请使用
persisted_globals_load
禁用系统变量或使用——已
选择。或者,删除mysqld-auto.cnf
文件。但是,如前所述,删除该文件将导致所有持久设置的丢失。