4.2.6使用选项文件
大多数MySQL程序可以从选项文件中读取启动选项(有时称为配置文件)。选项文件提供了一种方便的方法来指定常用的选项,以便每次运行程序时都不需要在命令行中输入。
要确定程序是否读取选项文件,请使用该--help
选项调用它。(对于mysqld,使用--verbose
和--help
。)如果程序读取选项文件,帮助消息指示它查找哪些文件以及它识别的选项组。
注意
一个MySQL程序从该--no-defaults
选项开始,没有选择文件.mylogin.cnf
。
许多选项文件是使用任何文本编辑器创建的纯文本文件。.mylogin.cnf
包含登录路径选项的文件是例外。这是由mysql_config_editor实用程序创建的加密文件。请参见第4.6.6节“mysql_config_editor- MySQL配置实用程序”。一个“登录路径”是一个选项组只允许特定的选项:host
,user
,password
,port
和socket
。客户端程序指定.mylogin.cnf
使用该--login-path
选项读取哪个登录路径。
要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE
环境变量。此变量由mysql-test-run.pl测试实用程序使用,但也由mysql_config_editor和MySQL客户端(如mysql,mysqladmin等)识别。
MySQL按照以下讨论中描述的顺序查找选项文件,并读取存在的任何内容。如果要使用的选项文件不存在,请使用正确讨论的适当方法创建它。
注意
NDB群集程序使用的选项文件在第18.3节“NDB群集的配置”中有介绍。
在Windows上,MySQL程序以指定的顺序从下表中显示的文件读取启动选项(首先读取顶级文件,稍后优先读取文件)。
表4.1 Windows系统上的选项文件
File Name | Purpose |
---|---|
%PROGRAMDATA% \MySQL\MySQL Server 5.6\my.ini,%PROGRAMDATA% \MySQL\MySQL Server 5.6\my.cnf |
Global options |
%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 |
The file specified with--defaults-extra-file , if any |
%APPDATA% \MySQL.mylogin.cnf |
Login path options (clients only) |
在上表中,%PROGRAMDATA%
表示包含主机上所有用户的应用程序数据的文件系统目录。此路径默认为C:\ProgramData
Microsoft Windows Vista和更高C:\Documents and Settings\All Users\Application Data
版本以及旧版本的Microsoft Windows。
%WINDIR%
表示Windows目录的位置。这是通常的C:\WINDOWS
。使用以下命令从WINDIR
环境变量的值确定其确切位置:
C:\> echo %WINDIR%
%APPDATA%
表示Windows应用程序数据目录的值。使用以下命令从APPDATA
环境变量的值确定其确切位置:
C:\> echo %APPDATA%
BASEDIR
代表MySQL基础安装目录。当MySQL 5.6已经使用MySQL Installer安装的,这通常是其中代表项目目录(通常在Windows的英语语言版本),参见2.3.3节,“MySQL的安装程序的Windows”。C:\
PROGRAMDIR
\MySQL\MySQL 5.6 ServerPROGRAMDIR
Program Files
在Unix和Unix系统上,MySQL程序以指定的顺序从下表中显示的文件读取启动选项(首先读取顶级文件,稍后优先读取文件)。
注意
在Unix平台上,MySQL忽略了世界可写的配置文件。这是有意的安全措施。
表4.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 |
Server-specific options (server only) |
defaults-extra-file |
The file specified with--defaults-extra-file , if any |
~/.my.cnf |
User-specific options |
~/.mylogin.cnf |
User-specific login path options (clients only) |
在上表中,~
表示当前用户的主目录(的值$HOME
)。
SYSCONFDIR
表示当MySQL构建时使用CMakeSYSCONFDIR
选项指定的目录。默认情况下,这是位于编译安装目录下的目录。etc
MYSQL_HOME
是一个包含服务器特定my.cnf
文件所在目录的路径的环境变量。如果MYSQL_HOME
未设置,并且使用mysqld_safe程序启动服务器,则mysqld_safe将尝试设置MYSQL_HOME
如下:
让
BASEDIR
和DATADIR
分别代表了MySQL基本目录和数据目录的路径名。如果有一个
my.cnf
文件DATADIR
但不在BASEDIR
,mysqld_safe设置MYSQL_HOME
为DATADIR
。否则,如果
MYSQL_HOME
没有设置,并且没有my.cnf
文件DATADIR
,则mysqld_safe设置MYSQL_HOME
为BASEDIR
。
在MySQL 5.6中,使用DATADIR
作为位置my.cnf
被弃用。
DATADIR
通常情况下/usr/local/mysql/data
,虽然这可能会因平台或安装方式而异。该值是编译MySQL时内置的数据目录位置,而不是mysqld启动--datadir
时用该选项指定的位置。在运行时的使用对于在处理任何选项之前,服务器会在其中查找选项文件的位置没有影响。--datadir
如果找到给定选项的多个实例,则最后一个实例优先,但有一个例外:对于mysqld,该选项的第一个实例--user
用作安全预防措施,以防止在选项文件中指定的用户被覆盖命令行。
选项文件语法的以下说明适用于您手动编辑的文件。这不包括.mylogin.cnf
,它使用mysql_config_editor创建并加密。
在运行MySQL程序时可能在命令行中给出的任何长选项也可以在选项文件中给出。要获取程序的可用选项列表,请运行该--help
选项。(对于mysqld,使用--verbose
和--help
。)
用于指定选项文件中的选项的语法与命令行语法相似(请参见第4.2.4节“在命令行上使用选项”)。但是,在选项文件中,您可以从选项名称中省略前导的两个破折号,并且每行仅指定一个选项。例如,--quick
与--host=localhost
在命令行上应被指定为quick
与host=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
”不是有效的转义序列字符,则变为“”而不是。请参见第9.1.1节“字符串文字”。\
xx
\
x
选项文件值的转义规则对于用作路径名分隔符的Windows\
路径名特别有用。必须将Windows路径名中的分隔符写入\\
后跟转义序列字符。它可以写成\\
或\
如果不是。或者,/
可以在Windows路径名中使用,并将被视为\
。假设要C:\Program Files\MySQL\MySQL Server 5.6
在选项文件中指定基本目录。这可以通过几种方式完成。一些例子:
basedir="C:\Program Files\MySQL\MySQL Server 5.6"
basedir="C:\\Program Files\\MySQL\\MySQL Server 5.6"
basedir="C:/Program Files/MySQL/MySQL Server 5.6"
basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s5.6
如果选项组名称与程序名称相同,组中的选项将专门应用于该程序。例如,组[mysqld]
和[mysql]
组分别适用于mysqld服务器和mysql客户端程序。
该[client]
选项组由MySQL发行版中提供的所有客户端程序(但不是由mysqld)读取。要了解如何使用C API的第三方客户端程序可以使用选项文件,请参阅第23.8.7.49节“mysql_options()”中的C API文档。
该[client]
组允许您指定适用于所有客户端的选项。例如,[client]
是用于指定连接到服务器的密码的适当组。(但确保选项文件只能由您自己访问,以便其他人无法发现您的密码。)[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
[mysqlhotcopy]
interactive-timeout
要创建选项组只能由读mysqld的从特定的MySQL版本系列服务器,使用组用的名字[mysqld-5.5]
,[mysqld-5.6]
等。以下组表示该sql_mode
设置只能由具有5.6.x版本号的MySQL服务器使用:
[mysqld-5.6]
sql_mode=TRADITIONAL
可以!include
在选项文件中使用指令来包含其他选项文件,!includedir
并搜索特定目录中的选项文件。例如,要包括该/home/mydir/myopt.cnf
文件,请使用以下指令:
!include /home/mydir/myopt.cnf
要搜索/home/mydir
目录并读取那里找到的选项文件,请使用此指令:
!includedir /home/mydir
MySQL不保证将读取目录中的选项文件的顺序。
注意
使用!includedir
Unix操作系统上的指令查找和包含的任何文件必须以文件名结尾.cnf
。在Windows上,该指令检查带有.ini
或.cnf
扩展名的文件。
编写包含的选项文件的内容,如任何其他选项文件。也就是说,它应该包含一组选项,每个选项前面都有一行,表示选项适用的程序。[
group
]
当处理包含的文件时,仅使用当前程序正在寻找的组中的那些选项。其他组被忽略。假设一个my.cnf
文件包含这一行:
!include /home/mydir/myopt.cnf
假设/home/mydir/myopt.cnf
看起来像这样:
[mysqladmin]
force
[mysqld]
key_buffer_size=16M
如果my.cnf
由mysqld处理,则只使用[mysqld]
组/home/mydir/myopt.cnf
。如果文件由mysqladmin处理,则只使用该[mysqladmin]
组。如果文件由任何其他程序处理,则不/home/mydir/myopt.cnf
使用任何选项。
该!includedir
指令除了在指定目录中的所有选项文件的读取同样的处理。
如果选项文件包含!include
或!includedir
指令,则无论何时处理该选项文件,都会处理这些指令命名的文件。