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配置实用程序”。一个“登录路径”是一个选项组只允许特定的选项:hostuserpasswordportsocket。客户端程序指定.mylogin.cnf使用该--login-path选项读取哪个登录路径。

要指定备用登录路径文件名,请设置MYSQL_TEST_LOGIN_FILE环境变量。此变量由mysql-test-run.pl测试实用程序使用,但也由mysql_config_editor和MySQL客户端(如mysqlmysqladmin等)识别

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:\ProgramDataMicrosoft 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 ServerPROGRAMDIRProgram 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如下:

  • BASEDIRDATADIR分别代表了MySQL基本目录和数据目录的路径名。

  • 如果有一个my.cnf文件DATADIR但不在BASEDIRmysqld_safe设置MYSQL_HOMEDATADIR

  • 否则,如果MYSQL_HOME没有设置,并且没有my.cnf文件DATADIR,则mysqld_safe设置MYSQL_HOMEBASEDIR

在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在命令行上应被指定为quickhost=localhost上在选项文件单独的行。要在选项文件中指定表单的选项,请将其写为。--loose-opt_nameloose-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不保证将读取目录中的选项文件的顺序。

注意

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

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

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

!include /home/mydir/myopt.cnf

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

[mysqladmin]
force

[mysqld]
key_buffer_size=16M

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

!includedir指令除了在指定目录中的所有选项文件的读取同样的处理。

如果选项文件包含!include!includedir指令,则无论何时处理该选项文件,都会处理这些指令命名的文件。

results matching ""

    No results matching ""