文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  使用选项文件

6.2.2.2 使用选项文件

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

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

注意

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

使用禁用 persisted_globals_load 系统变量启动的服务器不会读取 mysqld-auto.cnf

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

选项文件处理顺序

MySQL 按以下讨论中描述的顺序查找选项文件,并读取存在的任何文件。如果要使用的选项文件不存在,请使用前面讨论的相应方法创建它。

注意

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

在 Windows 上,MySQL 程序按以下顺序从下表所示的文件中读取启动选项(首先列出的文件先读取,稍后读取的文件优先)。

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

文件名 用途
%WINDIR%\my.ini, %WINDIR%\my.cnf 全局选项
C:\my.ini, C:\my.cnf 全局选项
BASEDIR\my.ini, BASEDIR\my.cnf 全局选项
defaults-extra-file 使用 --defaults-extra-file 指定的文件(如果有)
%APPDATA%\MySQL\.mylogin.cnf 登录路径选项(仅限客户端)
DATADIR\mysqld-auto.cnf 使用 SET PERSISTSET PERSIST_ONLY 持久化的系统变量(仅限服务器)

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

C:\> echo %WINDIR%

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

C:\> echo %APPDATA%

BASEDIR 表示 MySQL 基本安装目录。当使用 MSI 安装 MySQL 8.4 时,这通常是 C:\PROGRAMDIR\MySQL\MySQL Server 8.4,其中 PROGRAMDIR 表示程序目录(对于英文版本的 Windows,通常是 Program Files)。

重要

虽然 MySQL 配置器将大多数文件放在 PROGRAMDIR 下,但默认情况下,它会将 my.ini 安装在 C:\ProgramData\MySQL\MySQL Server 8.4\ 目录下。

DATADIR 表示 MySQL 数据目录。用于查找 mysqld-auto.cnf 时,其默认值是在编译 MySQL 时内置的数据目录位置,但可以通过在处理 mysqld-auto.cnf 之前处理的选项文件或命令行选项中指定的 --datadir 更改。

在 Unix 和类 Unix 系统上,MySQL 程序按以下顺序从下表所示的文件中读取启动选项(首先列出的文件先读取,稍后读取的文件优先)。

注意

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

表 6.2 Unix 和类 Unix 系统上读取的选项文件

文件名 用途
/etc/my.cnf 全局选项
/etc/mysql/my.cnf 全局选项
SYSCONFDIR/my.cnf 全局选项
$MYSQL_HOME/my.cnf 服务器特定选项(仅限服务器)
defaults-extra-file 使用 --defaults-extra-file 指定的文件(如果有)
~/.my.cnf 用户特定选项
~/.mylogin.cnf 用户特定的登录路径选项(仅限客户端)
DATADIR/mysqld-auto.cnf 使用 SET PERSISTSET PERSIST_ONLY 持久化的系统变量(仅限服务器)

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

SYSCONFDIR 表示在构建 MySQL 时使用 SYSCONFDIR 选项指定的 CMake 目录。默认情况下,这是编译安装目录下的 etc 目录。

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

DATADIR 表示 MySQL 数据目录。用于查找 mysqld-auto.cnf 时,其默认值是在编译 MySQL 时内置的数据目录位置,但可以通过在处理 mysqld-auto.cnf 之前处理的选项文件或命令行选项中指定的 --datadir 更改。

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

选项文件语法

以下选项文件语法说明适用于您手动编辑的文件。这不包括使用 mysql_config_editor 创建并加密的 .mylogin.cnf,以及服务器以 JSON 格式创建的 mysqld-auto.cnf

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

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

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

  • #comment, ;comment

    注释行以 #; 开头。# 注释也可以在一行的中间开始。

  • [group]

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

  • opt_name

    这相当于命令行上的 --opt_name

  • opt_name=value

    这相当于命令行上的 --opt_name=value。在选项文件中,您可以在 = 字符周围使用空格,这在命令行上是不正确的。该值可以选择用单引号或双引号括起来,如果该值包含 # 注释字符,这将非常有用。

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

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

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

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

前面的规则意味着可以将文字反斜杠指定为 \\,或者如果它后面没有有效的转义序列字符,则指定为 \

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

选项文件值的转义规则尤其适用于使用 \ 作为路径名分隔符的 Windows 路径名。如果 Windows 路径名中的分隔符后跟转义序列字符,则必须将其写为 \\。如果它后面没有转义序列字符,则可以将其写为 \\\。或者,/ 可以在 Windows 路径名中使用,并且被视为 \。假设您想在选项文件中指定基本目录 C:\Program Files\MySQL\MySQL Server 8.4。这可以通过几种方法来完成。一些例子

basedir="C:\Program Files\MySQL\MySQL Server 8.4"
basedir="C:\\Program Files\\MySQL\\MySQL Server 8.4"
basedir="C:/Program Files/MySQL/MySQL Server 8.4"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.4

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

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

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

首先列出更一般的选项组,然后列出更具体的选项组。例如,[client] 组更通用,因为它被所有客户端程序读取,而 [mysqldump] 组仅被 mysqldump 读取。稍后指定的选项将覆盖先前指定的选项,因此按 [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=128M

[mysqldump]
quick

以下是一个典型的用户选项文件

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

[mysql]
no-auto-rehash
connect_timeout=2

要创建仅由特定 MySQL 发行系列的 mysqld 服务器读取的选项组,请使用名称为 [mysqld-8.3][mysqld-8.4] 等的组。以下组表示 sql_mode 设置应仅由版本号为 8.4.x 的 MySQL 服务器使用

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

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

!include /home/mydir/myopt.cnf

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

!includedir /home/mydir

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

注意

在 Unix 操作系统上,使用 !includedir 指令查找和包含的任何文件 必须 具有以 .cnf 结尾的文件名。在 Windows 上,此指令检查扩展名为 .ini.cnf 的文件。

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

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

!include /home/mydir/myopt.cnf

并假设 /home/mydir/myopt.cnf 如下所示

[mysqladmin]
force

[mysqld]
key_buffer_size=16M

如果 mysqld 处理 my.cnf,则仅使用 /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 是文件中的最后一行,请确保在末尾附加了一个换行符;否则,该行将被忽略。