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”。 “登录路径”是仅允许某些选项的选项组:host
,user
,password
,port
和socket
。Client 端程序使用--login-path选项指定要从.mylogin.cnf
读取的登录路径。
要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE
环境变量。 mysql-test-run.pl **测试 Util 使用此变量,但是mysql_config_editor和 MySQLClient 端(例如mysql,mysqladmin等)也可以识别该变量。
MySQL 按照以下讨论中描述的 Sequences 查找选项文件,并读取所有存在的文件。如果您要使用的选项文件不存在,请使用刚刚讨论的适当方法来创建它。
Note
有关与 NDB Cluster 程序一起使用的选项文件的信息,请参见第 21.3 节“ NDB 群集的配置”。
选项文件处理 Sequences
在 Windows 上,MySQL 程序以指定的 Sequences 从下 table 中显示的文件中读取启动选项(首先读取的文件优先,随后读取的文件优先)。
table4.1 在 Windows 系统上读取的选项文件
File Name | Purpose |
---|---|
%WINDIR%\my.ini , %WINDIR%\my.cnf | Global options |
C:\my.ini , C:\my.cnf | Global options |
BASEDIR\my.ini , BASEDIR\my.cnf | Global 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 Name | Purpose |
---|---|
/etc/my.cnf | Global options |
/etc/mysql/my.cnf | Global options |
SYSCONFDIR/my.cnf | Global options |
$MYSQL_HOME/my.cnf | 服务器特定的选项(仅服务器) |
defaults-extra-file | 用--defaults-extra-file指定的文件(如果有) |
~/.my.cnf | User-specific options |
~/.mylogin.cnf | 用户特定的登录路径选项(仅限 Client 端) |
在上 table 中,~
代 table 当前用户的主目录(值$HOME
)。
SYSCONFDIR
*table 示在构建 MySQL 时使用 CMake 的SYSCONFDIR选项指定的目录。默认情况下,这是位于内置安装目录下的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
应该在选项文件的不同行上分别指定为quick
和host=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
是文件的最后一行,请确保在末尾添加换行符,否则该行将被忽略。