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

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

笔记

以--no-defaults选项开头的MySQL程序 除以外不读取选项文件.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 Cluster程序一起使用的选项文件的信息,请参见第21.3节“ NDB Cluster的配置”。

  • 选项文件处理顺序
  • 选项文件语法
  • 选项文件包含

选项文件处理顺序

在Windows上,MySQL程序以指定的顺序从下表中显示的文件中读取启动选项(首先读取的文件优先,随后读取的文件优先)。

表4.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

登录路径选项(仅客户端)

 

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

C:\> echo %WINDIR%

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

C:\> echo %APPDATA%

BASEDIR表示MySQL基本安装目录。当使用MySQL Installer安装MySQL 5.7时,通常 在该位置 代表程序目录(通常在Windows的英语版本上),请参见 第2.3.3节“用于Windows的MySQL Installer”。 C:\PROGRAMDIR\MySQL\MySQL 5.7 ServerPROGRAMDIRProgram Files

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

笔记

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

表4.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

用户特定的登录路径选项(仅客户端)

 

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

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

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

DATADIR通常 /usr/local/mysql/data,尽管这可能因平台或安装方法而异。该值是在编译MySQL时内置的数据目录位置,而不是--datadir在mysqld启动时用该选项 指定的位置 。--datadir运行时的使用对 服务器在处理任何选项之前在何处查找其读取的选项文件没有影响。

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

选项文件语法

选项文件语法的以下说明适用于您手动编辑的文件。不包括 .mylogin.cnf使用mysql_config_editor创建 并加密的。

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

在选项文件中指定选项的语法类似于命令行语法(请参见 第4.2.2.1节“在命令行上使用选项”)。但是,在选项文件中,您省略了选项名称中的前两个破折号,并且每行仅指定了一个选项。例如, --quick与--host=localhost 在命令行上应被指定为 quick与host=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路径名中的分隔符必须像\\ 在其后跟转义序列字符一样编写。可以写为\\\不写。或者,/可以在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服务器和 mysql客户端程序。

该[client]选项组是由MySQL分发提供(但所有的客户端程序读取 未通过的mysqld)。要了解使用C API的第三方客户端程序如何使用选项文件,请参见mysql_options()上的C API文档 。

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

首先列出更多常规选项组,然后列出更多特定组。例如,一个[client]组更为通用,因为它被所有客户端程序读取,而一个[mysqldump]组仅由mysqldump读取 。稍后指定的选项将覆盖先前指定的选项,因此将选项组置于order中[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 is sent to all standard MySQL clients
password="my password"

[mysql]
no-auto-rehash
connect_timeout=2

要创建选项组以仅由特定MySQL版本系列的mysqld服务器读取 ,请使用名称为 [mysqld-5.6], [mysqld-5.7]等的组。以下组指示该 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不保证目录中选项文件的读取顺序。

笔记



!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]in中的 组 /home/mydir/myopt.cnf。如果该文件由mysqladmin处理,则仅使用该 [mysqladmin]组。如果文件是由任何其他程序处理的,则不/home/mydir/myopt.cnf使用in中的任何选项 。

!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