MySQL服务器维护配置其操作的系统变量。系统变量可以具有影响整个服务器操作的全局值,也可以具有影响当前会话的会话值,或者两者都有。方法可以在运行时更改许多系统变量集
语句以影响当前服务器实例的操作。集
也可用于将某些全局系统变量持久化到mysqld-auto.cnf
数据目录下的文件,以影响后续启动服务器的操作。重置持续
删除持久性设置mysqld-auto.cnf
.
下面的讨论描述了持久化系统变量的各个方面:
在运行时持久化全局系统变量的能力使服务器配置能够在服务器启动时持久化。虽然许多系统变量可以在启动时设置my.cnf
选项文件,或在运行时使用集
语句,这些配置服务器的方法要么需要登录访问服务器主机,要么不提供在运行时或远程持久配置服务器的能力:
修改选项文件需要直接访问该文件,这需要登录访问MySQL服务器主机。这并不总是方便的。
修改系统变量
集全球
是可以从本地运行的客户机或远程主机执行的运行时功能,但更改只影响当前运行的服务器实例。这些设置不是持久的,不会延续到后续的服务器启动中。
增强服务器配置的管理功能,而不是通过编辑选项文件或使用集全球
的变体集
将系统变量设置持久化到名为mysqld-auto.cnf
数据目录中的文件。例子:
SET PERSIST max_connections = 1000;设置@@PERSIST。Max_connections = 1000;设置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。
限定符:SET PERSIST max_connections = 1000;设置@@PERSIST。Max_connections = 1000;
就像
集全球
,设置保存
设置全局变量运行时值,但也将变量设置写入mysqld-auto.cnf
文件(如果有,则替换任何现有的变量设置)。将全局系统变量持久化到
mysqld-auto.cnf
文件中未设置全局变量运行时值时,在变量名前面加上PERSIST_ONLY
关键字或@@PERSIST_ONLY。
限定符:设置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节,“性能模式persiststed_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,"用户":"根","主机":"localhost"}}, "transaction_isolation":{"值":"READ-COMMITTED", "元数据":{"时间戳":1519921553880520,"用户":"根","主机":"localhost"}}, "mysql_server_static_options":{"值":"0","元数据":{"时间戳":1519922873467872,"用户":"根","主机":"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
文件。但是,如前所述,删除此文件将导致丢失所有持久设置。