#### 4.2.2.2 使用选项文件

[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)[](<>)

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

要确定程序是否读取选项文件，请使用`- 帮助`选项。（为了[**mysqld**](mysqld.html)， 采用[`--详细`](server-options.html#option_mysqld_verbose)和[`- 帮助`](server-options.html#option_mysqld_help).) 如果程序读取选项文件，帮助消息会指示它查找哪些文件以及它识别哪些选项组。

笔记

一个 MySQL 程序以`--no-defaults`option 不读取任何选项文件`.mylogin.cnf`.

一台服务器以[`persisted_globals_load`](server-system-variables.html#sysvar_persisted_globals_load)系统变量禁用不读取`mysqld-auto.cnf`.

许多选项文件是纯文本文件，使用任何文本编辑器创建。例外情况是：

-   这`.mylogin.cnf`包含登录路径选项的文件。这是由[**mysql\_配置\_编辑**](mysql-config-editor.html)效用。看[第 4.6.7 节，“mysql\_配置\_编辑器 — MySQL 配置实用程序”](mysql-config-editor.html).“登录路径”是一个仅允许某些选项的选项组：`主持人`,`用户`,`密码`,`港口`和`插座`.客户端程序指定从哪个登录路径读取`.mylogin.cnf`使用[`--登录路径`](option-file-options.html#option_general_login-path)选项。

    要指定备用登录路径文件名，请设置`MYSQL_TEST_LOGIN_FILE`环境变量。该变量由**mysql-test-run.pl**测试实用程序，但也被认可[**mysql\_配置\_编辑**](mysql-config-editor.html)以及 MySQL 客户端，例如[**mysql**](mysql.html),[**mysql管理员**](mysqladmin.html)，等等。

-   这`mysqld-auto.cnf`数据目录中的文件。此 JSON 格式文件包含持久的系统变量设置。它是由服务器在执行时创建的[`设置坚持`](set-variable.html)要么[`SET PERSIST_ONLY`](set-variable.html)陈述。看[第 5.1.9.3 节，“持久系统变量”](persisted-system-variables.html).管理`mysqld-auto.cnf`应该留给服务器而不是手动执行。

-   [选项文件处理顺序](option-files.html#option-file-order)

-   [选项文件语法](option-files.html#option-file-syntax)

-   [选项文件包含](option-files.html#option-file-inclusions)

##### 选项文件处理顺序

MySQL 按照以下讨论中描述的顺序查找选项文件并读取任何存在的文件。如果您要使用的选项文件不存在，请使用适当的方法创建它，如前所述。

笔记

有关与 NDB Cluster 程序一起使用的选项文件的信息，请参阅[第 23.4 节，“NDB 集群的配置”](mysql-cluster-configuration.html).

在Windows上，MySQL程序按照指定的顺序从下表中显示的文件中读取启动选项（首先列出的文件优先读取，以后读取的文件优先）。

[](<>)

**表4.1 Windows系统上读取的选项文件**

| 文件名 | 意图 |
| --- | --- |
| ``%WINDIR%`\my。伊尼`，``%温迪尔%`\我的。cnf` | 全球选项 |
| `C:\我的。伊尼`,`C:\我的。cnf` | 全球选项 |
| `*`BASEDIR`*\我的。伊尼`,`*`BASEDIR`*\我的。cnf` | 全球选项 |
| `默认额外文件` | 使用指定的文件[`--默认额外文件`](option-file-options.html#option_general_defaults-extra-file)，如果有的话 |
| ``%APPDATA%`\MySQL\。迈洛金。cnf`\|登录路径选项（仅限客户端） |  |
| `*`数据目录`*\mysqld-auto.cnf` | 系统变量持续存在[`设置坚持`](set-variable.html)要么[`SET PERSIST_ONLY`](set-variable.html)（仅限服务器） |

在上表中，`%WINDIR%`表示您的 Windows 目录的位置。这是常见的`C:\WINDOWS`.使用以下命令从`风向`环境变量：

```
C:\> echo %WINDIR%
```

`％应用程序数据％`表示 Windows 应用程序数据目录的值。使用以下命令从`应用程序数据`环境变量：

```
C:\> echo %APPDATA%
```

*`基础目录`*表示 MySQL 基本安装目录。当使用 MySQL Installer 安装 MySQL 8.0 时，通常是`C：\*`程序`*\MySQL\MySQL 8.0 服务器`在哪里*`程序`*代表程序目录（通常`程序文件`Windows 的英语版本），请参阅[第 2.3.3 节，“Windows 的 MySQL 安装程序”](mysql-installer.html).

*`数据目录`*表示 MySQL 数据目录。用来找`mysqld-auto.cnf`，其默认值为 MySQL 编译时内置的数据目录位置，但可以通过[`--数据目录`](server-system-variables.html#sysvar_datadir)指定为之前处理的选项文件或命令行选项`mysqld-auto.cnf`被处理。

在 Unix 和类 Unix 系统上，MySQL 程序按照指定的顺序从下表所示的文件中读取启动选项（首先读取列出的文件，后读取的文件优先）。

笔记

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

[](<>)[](<>)

[](<>)

**表 4.2 在 Unix 和类 Unix 系统上读取的选项文件**

| 文件名 | 目的 |
| --- | --- |
| `/etc/my.cnf` | 全局选项 |
| `/etc/mysql/my.cnf` | 全局选项 |
| `*`SYSCONFDIR`*/my.cnf` | 全局选项 |
| `$MYSQL_HOME/my.cnf` | 服务器特定选项（仅限服务器） |
| `默认值-额外文件` | 指定的文件[`--defaults-额外文件`](option-file-options.html#option_general_defaults-extra-file), 如果有 |
| `~/.my.cnf` | 用户特定选项 |
| `~/.mylogin.cnf` | 用户特定的登录路径选项（仅限客户端） |
| `*`数据目录`*/mysqld-auto.cnf` | 系统变量持续存在[`设置坚持`](set-variable.html)要么[`SET PERSIST_ONLY`](set-variable.html)（仅限服务器） |

在上表中，`~`表示当前用户的主目录（的值`$家`）。

*`SYSCONFDIR`*表示用[`SYSCONFDIR`](source-configuration-options.html#option_cmake_sysconfdir)选项**制作**MySQL 是什么时候建立的。默认情况下，这是`等等`位于编译安装目录下的目录。

`MYSQL_HOME`是一个环境变量，其中包含特定于服务器的目录的路径`我的.cnf`文件驻留。如果`MYSQL_HOME`未设置，您使用[**mysqld\_安全的**](mysqld-safe.html)程序，[**mysqld\_安全的**](mysqld-safe.html)将其设置为*`基础目录`*, MySQL 基本安装目录。

*`数据目录`*表示 MySQL 数据目录。用来找`mysqld-auto.cnf`，其默认值为 MySQL 编译时内置的数据目录位置，但可以通过[`--数据目录`](server-system-variables.html#sysvar_datadir)指定为之前处理的选项文件或命令行选项`mysqld-auto.cnf`被处理。

如果找到给定选项的多个实例，则最后一个实例优先，但有一个例外：对于[**mysqld**](mysqld.html)， 这*第一的*的实例[`- 用户`](server-options.html#option_mysqld_user)选项用作安全预防措施，以防止在命令行上覆盖选项文件中指定的用户。

##### 选项文件语法

以下选项文件语法描述适用于您手动编辑的文件。这不包括`.mylogin.cnf`，它是使用创建的[**mysql\_配置\_编辑**](mysql-config-editor.html)并且被加密，并且`mysqld-auto.cnf`，服务器以 JSON 格式创建。

运行 MySQL 程序时在命令行上可能给出的任何长选项也可以在选项文件中给出。要获取程序的可用选项列表，请使用`- 帮助`选项。（为了[**mysqld**](mysqld.html)， 采用[`--详细`](server-options.html#option_mysqld_verbose)和[`- 帮助`](server-options.html#option_mysqld_help).)

在选项文件中指定选项的语法类似于命令行语法（请参阅[第 4.2.2.1 节，“在命令行上使用选项”](command-line-options.html)）。但是，在选项文件中，您省略了选项名称前导的两个破折号，并且每行仅指定一个选项。例如，`- 快的`和`--主机=本地主机`在命令行上应指定为`快的`和`主机=本地主机`在选项文件的单独行上。指定表单的选项`- 松动的-*`opt_name`*`在选项文件中，将其写为`松动的-*`opt_name`*`.

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

-   `#*`评论`*`,`;*`评论`*`

    注释行以`#`要么`;`.一种`#`注释也可以从一行的中间开始。

-   `[*`团体`*]`

    *`团体`*是您要为其设置选项的程序或组的名称。在组行之后，任何选项设置行都适用于命名组，直到选项文件结束或给出另一个组行。选项组名称不区分大小写。

-   `*`opt_name`*`

    这相当于`--*`opt_name`*`在命令行上。

-   `*`opt_name`*=*`价值`*`

    这相当于`--*`opt_name`*=*`价值`*`在命令行上。在选项文件中，您可以在`=`字符，在命令行上不正确的东西。该值可以选择用单引号或双引号括起来，如果该值包含`#`评论字符。

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

[](<>)[](<>)

您可以使用转义序列`\b`,`\t`,`\n`,`\r`,`\\`， 和`\s`在选项值中表示退格、制表符、换行符、回车符、反斜杠和空格字符。在选项文件中，这些转义规则适用：

-   后跟有效转义序列字符的反斜杠将转换为序列表示的字符。例如，`\s`转换为空格。

-   没有后跟有效转义序列字符的反斜杠保持不变。例如，`\S`保持原样。

    前面的规则意味着文字反斜杠可以给出为`\\`，或作为`\`如果它后面没有有效的转义序列字符。

    选项文件中的转义序列规则与 SQL 语句中字符串文字中的转义序列规则略有不同。在后一种情况下，如果“*`x`*” 不是有效的转义序列字符，`\*`x`*`变成“*`x`*“ 而不是`\*`x`*`.看[第 9.1.1 节，“字符串文字”](string-literals.html).

[](<>)[](<>)

选项文件值的转义规则特别适用于 Windows 路径名，它使用`\`作为路径名分隔符。Windows 路径名中的分隔符必须写为`\\`如果它后跟一个转义序列字符。它可以写成`\\`要么`\`如果不是。或者，`/`可用于 Windows 路径名并被视为`\`.假设您要指定一个基本目录`C:\Program Files\MySQL\MySQL 服务器 8.0`在选项文件中。这可以通过多种方式完成。一些例子：

```
basedir="C:\Program Files\MySQL\MySQL Server 8.0"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0"
basedir="C:/Program Files/MySQL/MySQL Server 8.0"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0
```

如果选项组名称与程序名称相同，则组中的选项专门适用于该程序。例如，`[mysqld]`和`[mysql]`团体适用于[**mysqld**](mysqld.html)服务器和[**mysql**](mysql.html)客户端程序，分别。

这`[客户]`MySQL 发行版中提供的所有客户端程序都读取选项组（但*不是*经过[**mysqld**](mysqld.html)）。要了解使用 C API 的第三方客户端程序如何使用选项文件，请参阅 C API 文档，网址为[mysql\_选项（）](https://dev.mysql.com/doc/c-api/8.0/en/mysql-options.html).

这`[客户]`group 使您能够指定适用于所有客户端的选项。例如，`[客户]`是用于指定连接到服务器的密码的适当组。（但要确保选项文件只能由您自己访问，以免其他人发现您的密码。）确保不要将选项放在`[客户]`组，除非它被认可*全部*您使用的客户端程序。如果您尝试运行不理解该选项的程序，则会在显示错误消息后退出。

首先列出更一般的选项组，然后列出更具体的组。例如，一个`[客户]`group 更通用，因为它被所有客户端程序读取，而`[mysql转储]`组是只读的[**mysql转储**](mysqldump.html).后面指定的选项会覆盖前面指定的选项，因此将选项组按顺序排列`[客户]`,`[mysql转储]`启用[**mysql转储**](mysqldump.html)-要覆盖的特定选项`[客户]`选项。

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

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

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

[mysqldump]
quick
```

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

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

[mysql]
no-auto-rehash
connect_timeout=2
```

创建仅由以下人员读取的选项组[**mysqld**](mysqld.html)来自特定 MySQL 版本系列的服务器，使用名称为`[mysqld-5.7]`,`[mysqld-8.0]`，等等。下组表明[`sql_mode`](server-system-variables.html#sysvar_sql_mode)设置只能由具有 8.0.x 版本号的 MySQL 服务器使用：

```
[mysqld-8.0]
sql_mode=TRADITIONAL
```

##### 选项文件包含

可以使用`！包括`选项文件中的指令以包含其他选项文件和`!includedir`在特定目录中搜​​索选项文件。例如，要包括`/home/mydir/myopt.cnf`文件，使用以下指令：

```
!include /home/mydir/myopt.cnf
```

要搜索`/home/mydir`目录并读取在那里找到的选项文件，使用此指令：

```
!includedir /home/mydir
```

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

笔记

使用`!includedir`Unix 操作系统指令*必须*文件名以`.cnf`.在 Windows 上，该指令检查带有`.ini`要么`.cnf`延期。

像任何其他选项文件一样编写包含的选项文件的内容。也就是说，它应该包含一组选项，每个选项前面都有一个`[*`团体`*]`指示选项适用的程序的行。

在处理包含的文件时，仅使用当前程序正在查找的组中的那些选项。其他组被忽略。假设一个`我的.cnf`文件包含这一行：

```
!include /home/mydir/myopt.cnf
```

假设`/home/mydir/myopt.cnf`看起来像这样：

```
[mysqladmin]
force

[mysqld]
key_buffer_size=16M
```

如果`我的.cnf`被处理[**mysqld**](mysqld.html)， 只有`[mysqld]`分组`/home/mydir/myopt.cnf`用来。如果文件由[**mysql管理员**](mysqladmin.html)， 只有`[mysql管理员]`组被使用。如果文件由任何其他程序处理，则没有选项`/home/mydir/myopt.cnf`被使用。

这`!includedir`除了读取命名目录中的所有选项文件外，指令的处理方式类似。

如果选项文件包含`！包括`要么`!includedir`指令，只要处理选项文件，就会处理由这些指令命名的文件，无论它们出现在文件中的什么位置。

为了使包含指令起作用，文件路径不应在引号内指定，并且不应有转义序列。例如，以下提供的语句`我的.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 上，如果`！包括 *`/path/to/extra.ini`*`是文件中的最后一行，请确保在末尾附加换行符；否则，该行将被忽略。
