10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册 本手册节选

5.1.9.3持久化系统变量

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表,直到服务器重新启动。

mysql -auto.cnf文件的格式和服务器处理

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文件。但是,如前所述,删除该文件将导致所有持久设置的丢失。