4.2.2.2 使用选项文件

大多数 MySQL 程序可以从选项文件(有时称为配置文件)中读取启动选项。选项文件提供了一种方便的方法来指定常用选项,这样就不必在每次运行程序时都在命令行上 Importing 它们。

要确定程序是否读取选项文件,请使用--help选项调用它。 (对于mysqld,请使用--verbose--help。)如果程序读取选项文件,则帮助消息将指示其查找的文件以及可以识别的选项组。

Note

--no-defaults选项启动的 MySQL 程序不会读取.mylogin.cnf以外的任何选项文件。

许多选项文件是使用任何文本编辑器创建的纯文本文件。 .mylogin.cnf文件包含登录路径选项是一个 exception。这是由mysql_config_editorUtil 创建的加密文件。参见第 4.6.6 节“ mysql_config_editor-MySQL 配置 Util”。 “登录路径”是仅允许某些选项的选项组:hostuserpasswordportsocket。Client 端程序使用--login-path选项指定要从.mylogin.cnf读取的登录路径。

要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。 mysql-test-run.pl **测试 Util 使用此变量,但是mysql_config_editor和 MySQLClient 端(例如mysqlmysqladmin等)也可以识别该变量。

MySQL 按照以下讨论中描述的 Sequences 查找选项文件,并读取所有存在的文件。如果您要使用的选项文件不存在,请使用刚刚讨论的适当方法来创建它。

Note

有关与 NDB Cluster 程序一起使用的选项文件的信息,请参见第 21.3 节“ NDB 群集的配置”

选项文件处理 Sequences

在 Windows 上,MySQL 程序以指定的 Sequences 从下 table 中显示的文件中读取启动选项(首先读取的文件优先,随后读取的文件优先)。

table4.1 在 Windows 系统上读取的选项文件

File NamePurpose
%WINDIR%\my.ini , %WINDIR%\my.cnfGlobal options
C:\my.ini , C:\my.cnfGlobal options
BASEDIR\my.ini , BASEDIR\my.cnfGlobal options
defaults-extra-file--defaults-extra-file指定的文件(如果有)
%APPDATA%\MySQL\.mylogin.cnf登录路径选项(仅 Client 端)

在上 table 中,%WINDIR%代 tableWindows 目录的位置。通常是C:\WINDOWS。使用以下命令从WINDIR环境变量的值确定其确切位置:

C:\> echo %WINDIR%

%APPDATA%代 tableWindows 应用程序数据目录的值。使用以下命令从APPDATA环境变量的值确定其确切位置:

C:\> echo %APPDATA%
  • BASEDIR table 示 MySQL 基本安装目录。使用 MySQL Installer 安装 MySQL 5.7 后,通常为C:\PROGRAMDIR\MySQL\MySQL 5.7 Server,其中 PROGRAMDIR *table 示程序目录(在 Windows 的英语版本中通常为Program Files),请参见第 2.3.3 节“用于 Windows 的 MySQL Installer”

在 Unix 和类似 Unix 的系统上,MySQL 程序以指定的 Sequences 从下 table 中显示的文件中读取启动选项(首先列出的文件被优先读取,随后的文件被优先读取)。

Note

在 Unix 平台上,MySQL 忽略可写的配置文件。这是有意作为安全措施。

table4.2 在 Unix 和类似 Unix 的系统上读取的选项文件

File NamePurpose
/etc/my.cnfGlobal options
/etc/mysql/my.cnfGlobal options
SYSCONFDIR/my.cnfGlobal options
$MYSQL_HOME/my.cnf服务器特定的选项(仅服务器)
defaults-extra-file--defaults-extra-file指定的文件(如果有)
~/.my.cnfUser-specific options
~/.mylogin.cnf用户特定的登录路径选项(仅限 Client 端)

在上 table 中,~代 table 当前用户的主目录(值$HOME)。

  • SYSCONFDIR *table 示在构建 MySQL 时使用 CMakeSYSCONFDIR选项指定的目录。默认情况下,这是位于内置安装目录下的etc目录。

MYSQL_HOME是一个环境变量,其中包含服务器特定的my.cnf文件所在目录的路径。如果未设置MYSQL_HOME,而您使用mysqld_safe程序启动服务器,则mysqld_safe将其设置为 MySQL 基本安装目录* BASEDIR *。

  • DATADIR *通常是/usr/local/mysql/data,尽管这可能因平台或安装方法而异。该值是编译 MySQL 时内置的数据目录位置,而不是mysqld启动时使用--datadir选项指定的位置。在运行时使用--datadir不会影响服务器在处理任何选项之前在何处查找其读取的选项文件。

如果找到给定选项的多个实例,则最后一个实例优先,但有一个 exception:对于mysqld--user选项的* first *实例用作安全预防措施,以防止在选项文件中指定用户在命令行上覆盖。

选项文件语法

选项文件语法的以下说明适用于您手动编辑的文件。这不包括.mylogin.cnf,后者是使用mysql_config_editor创建的,并且已加密。

运行 MySQL 程序时在命令行上给出的任何长选项也可以在选项文件中给出。要获取程序的可用选项列 table,请使用--help选项运行它。 (对于mysqld,请使用--verbose--help。)

在选项文件中指定选项的语法类似于命令行语法(请参见第 4.2.2.1 节“在命令行上使用选项”)。但是,在选项文件中,您省略了选项名称中的前两个破折号,并且每行仅指定了一个选项。例如,命令行上的--quick--host=localhost应该在选项文件的不同行上分别指定为quickhost=localhost。要在选项文件中指定格式为--loose-opt_name的选项,请将其写为loose-opt_name

选项文件中的空行将被忽略。非空行可以采用以下任何形式:

  • #comment , ;comment

Comment 行以#;开头。 #Comments 也可以在一行的中间开始。

  • [group]
  • group *是要为其设置选项的程序或组的名称。在组行之后,所有选项设置行都将应用于命名组,直到给出选项文件或另一组行的末尾。选项组名称不区分大小写。
  • opt_name

这等效于命令行上的--opt_name

  • opt_name=value

这等效于命令行上的--opt_name=value。在选项文件中,您可以在=字符周围留空格,这在命令行中是不正确的。该值可以选择用单引号或双引号引起来,如果该值包含#Comments 字符,则很有用。

前导和尾随空格会自动从选项名称和值中删除。

您可以在选项值中使用转义序列\b\t\n\r\\\s来 table 示退格符,制 table 符,换行符,回车符,反斜杠和空格字符。在选项文件中,适用以下转义规则:

  • 反斜杠后跟有效的转义序列字符将转换为该序列 table 示的字符。例如,\s转换为空格。

  • 后面没有有效转义序列字符的反斜杠保持不变。例如,\S保留原样。

前面的规则意味着字面反斜杠可以以\\\的形式给出(如果后面没有有效的转义序列字符)。

选项文件中转义序列的规则与 SQL 语句中字符串 Literals 中转义序列的规则略有不同。在后一种情况下,如果“ * x *”不是有效的转义序列字符,则\x变为“ * x *”而不是\x。参见第 9.1.1 节“字符串 Literals”

选项文件值的转义规则与 Windows 路径名特别相关,Windows 路径名使用\作为路径名分隔符。如果 Windows 路径名中的分隔符后跟转义符,则必须将其写为\\。如果不是,则可以写为\\\。或者,可以在 Windows 路径名中使用/并将其视为\。假设您要在选项文件中指定C:\Program Files\MySQL\MySQL Server 5.7的基本目录。这可以通过几种方法完成。一些例子:

basedir="C:\Program Files\MySQL\MySQL Server 5.7"
basedir="C:\\Program Files\\MySQL\\MySQL Server 5.7"
basedir="C:/Program Files/MySQL/MySQL Server 5.7"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.7

如果选项组名称与程序名称相同,则该组中的选项专门适用于该程序。例如,[mysqld][mysql]组分别应用于mysqld服务器和mysqlClient 端程序。

[client]选项组由 MySQL 发行版中提供的所有 Client 端程序读取(但mysqld不是*)。要了解使用 C API 的第三方 Client 端程序如何使用选项文件,请参阅第 27.7.6.50 节“ mysql_options()”处的 C API 文档。

[client]组使您可以指定适用于所有 Client 端的选项。例如,[client]是用于指定连接到服务器的密码的适当组。 (但是请确保该选项文件只能由您自己访问,以便其他人无法找到您的密码.)请确保不要将选项放在[client]组中,除非您使用的所有Client 端程序都可以识别该选项。如果尝试运行不了解该选项的程序,则在显示错误消息后退出。

首先列出更多常规选项组,然后列出更多特定组。例如,一个[client]组更通用,因为它被所有 Client 端程序读取,而一个[mysqldump]组仅被mysqldump读取。稍后指定的选项将覆盖先前指定的选项,因此将选项组的 Sequences 设置为[client][mysqldump]可使mysqldump特定的选项覆盖[client]选项。

这是一个典型的全局选项文件:

[client]
port=3306
socket=/tmp/mysql.sock

[mysqld]
port=3306
socket=/tmp/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

[mysqldump]
quick

这是一个典型的用户选项文件:

[client]
# The following password will be sent to all standard MySQL clients
password="my password"

[mysql]
no-auto-rehash
connect_timeout=2

要创建选项组以仅由特定 MySQL 版本系列的mysqld服务器读取,请使用名称为[mysqld-5.6][mysqld-5.7]等的组。以下群组 table 示sql_mode设置仅应用于具有 5.7.x 版本号的 MySQL 服务器:

[mysqld-5.7]
sql_mode=TRADITIONAL
选项文件包含

可以在选项文件中使用!include指令来包含其他选项文件,并可以使用!includedir来搜索特定目录中的选项文件。例如,要包含/home/mydir/myopt.cnf文件,请使用以下指令:

!include /home/mydir/myopt.cnf

要搜索/home/mydir目录并读取在此找到的选项文件,请使用以下指令:

!includedir /home/mydir

MySQL 不保证目录中选项文件的读取 Sequences。

Note

必须在 Unixos 上使用!includedir指令查找和包含的所有文件的文件名都必须以.cnf结尾。在 Windows 上,此伪指令检查 extensions 为.ini.cnf的文件。

像其他选项文件一样,编写包含的选项文件的内容。也就是说,它应包含选项组,每组选项前都有一个[group]行,该行指示选项所适用的程序。

在处理包含文件时,仅使用当前程序正在寻找的组中的那些选项。其他组将被忽略。假设my.cnf文件包含以下行:

!include /home/mydir/myopt.cnf

并假设/home/mydir/myopt.cnf看起来像这样:

[mysqladmin]
force

[mysqld]
key_buffer_size=16M

如果_3 由mysqld处理,则仅使用/home/mydir/myopt.cnf中的[mysqld]组。如果文件由mysqladmin处理,则仅使用[mysqladmin]组。如果文件由任何其他程序处理,则/home/mydir/myopt.cnf中不使用任何选项。

除读取命名目录中的所有选项文件外,对!includedir指令的处理方式相似。

如果选项文件包含!include!includedir指令,则在处理选项文件时,无论这些指令在文件中的位置如何,都将处理由这些指令命名的文件。

为了使包含指令起作用,不应在引号内指定文件路径,并且不应包含转义序列。例如,my.ini中提供的以下语句将读取选项文件myopts.ini

!include C:/ProgramData/MySQL/MySQL Server/myopts.ini
!include C:\ProgramData\MySQL\MySQL Server\myopts.ini
!include C:\\ProgramData\\MySQL\\MySQL Server\\myopts.ini

在 Windows 上,如果!include /path/to/extra.ini是文件的最后一行,请确保在末尾添加换行符,否则该行将被忽略。