目录
1.配置方式
2.配置优先级
3.配置教程
3.1.使用命令行上的配置
3.2.使用配置文件
3.2.1 配置文件处理顺序
3.2.1.1 Windows配置
3.2.1.2 Unix和类Unix系统配置
3.2.2 配置文件语法
3.2.3 指定配置文件
3.3.影响配置文件处理的命令行选项
3.4.配置选项修改器
3.5.使用选项设置程序变量
3.6.配置默认值、配置期望值和=符号
1.配置方式
有几种方法可以指定MySQL程序的选项:
命令行:
在程序名称后面的命令行中列出选项。这对于应用于程序的特定调用的选项来说是常见的。
配置文件:
列出程序启动时读取的配置文件中的选项。这对于您希望程序每次运行时使用的选项来说是常见的。
环境变量
列出环境变量中的选项(参见第6.2.9节“设置环境变量”)
此方法对于每次运行程序时要应用的选项非常有用。在实践中,选项文件更常用于此目的,但第7.8.3节“在Unix上运行多个MySQL实例”讨论了环境变量非常有用的一种情况。它描述了一种方便的技术,使用这些变量为服务器和客户端程序指定TCP/IP端口号和Unix套接字文件。
2.配置优先级
选项是按顺序处理的,因此,如果一个选项被指定多次,则最后一次出现的选项优先。以下命令使mysql连接到在localhost上运行的服务器:
mysql -h example.com -h localhost
有一个例外:对于mysqld,--user选项的第一个实例被用作安全预防措施,以防止在选项文件中指定的用户在命令行上被重写。
如果设置了冲突的相关的选项,则后面的选项优先于前面的选项。以下命令以“无列名”模式运行mysql:
mysql --column-names --skip-column-names
MySQL程序首先通过检查环境变量,然后查找配置文件,然后通过查找命令行来确定给出哪些选项。
配置优先级从低到高:
环境变量<配置文件<命令行
因为后面的选项优先于前面的选项,所以处理顺序意味着环境变量的优先级最低,命令行选项的优先级最高。
有一个例外:数据目录中的mysqld-auto.cnf配置文件是最后处理的,因此它甚至优先于命令行选项。
这里博主理解是,mysqld-auto.cnf配置文件中的配置优先级是大于命令行的优先级,也就是说命令行和配置文件都配置了某配置后,以配置文件为准。
您可以通过在配置文件中为程序指定默认选项值来利用MySQL程序处理选项的方式。
这使您能够避免每次运行程序时键入它们,同时使您能够在必要时使用命令行选项覆盖默认值。
3.配置教程
3.1.使用命令行上的配置
在命令行上指定的程序选项遵循以下规则:
配置在命令名称之后给出。
配置参数以一个短划线或两个短划线开头,这取决于它是配置名称的短格式还是长格式。
许多选择既有短形式也有长形式。例如和--help是指示MySQL程序显示其帮助消息的选项的短格式和长格式。
选项名称区分大小写-v和-V都是合法的,有不同的含义。
(它们是--verbose和--version选项的相应缩写。)
有些选项的值跟在选项名称后面。
例如,-h localhost 或 --host=localhost表示客户端程序的MySQL服务器主机。
选项值告诉程序运行MySQL服务器的主机的名称。
对于带值的长选项,请用=号将选项名称和值分隔开。
对于带值短选项,选项值可以紧跟在选项字母后面,也可以在以下两个字母之间留一个空格:-hlocalhost和-h localhost等效。
此规则的一个例外是用于指定MySQL密码的选项。
此选项可以以--password=pass_val或--password的形式给出。
在后一种情况下(没有给定密码值),程序会以交互方式提示您输入密码。
密码选项也可以缩写为-ppass_val或-p。
但是,对于缩写形式,如果给定了password的值,则它必须在选项字母后面,没有空格:
如果选项字母后面有空格,则程序无法判断下面的参数是密码值还是其他类型的参数。因此,以下两个命令具有两种完全不同的含义:
第一个命令指示mysql使用test的密码值,但不指定默认数据库。
第二个指令mysql提示输入密码值,并使用test作为默认数据库。
mysql -ptest mysql -p test
在选项名称中,短划线(-)和下划线(_)在大多数情况下可以互换使用,尽管前导短划线不能作为下划线。
例如,--skip-grant-tables和--skip_grant_tables是等效的。
在本手册中,我们在选项名称中使用破折号,下划线有意义的地方除外。例如,--log-bin和--log_bin就是这种情况,它们是不同的选项。我们也鼓励你这样做。
SET GLOBAL general_log = ON; SELECT @@GLOBAL.general_log;在服务器启动时,系统变量的语法与命令选项的语法相同,因此在变量名中,短划线和下划线可以互换使用。例如,--general_log=ON和--general-log=ON是等效的。(对于选项文件中设置的系统变量也是如此。)
对于采用数值的选项,该值可以用后缀K、M或G来表示1024, 1024² or 1024³的倍数。
从MySQL 8.0.14开始,后缀也可以是T、P和E,表示1024⁴、1024⁵或1024^6的倍数。
后缀字母可以是大写或小写。
例如,下面的命令告诉mysqladmin ping服务器1024次,每次ping之间睡眠10秒:
mysqladmin --count=1K --sleep=10 ping将文件名指定为选项值时,请避免使用 ~ shell元字符。它可能不会像你所期望的那样被解释。就是避免用这个~~~~~~~~
在命令行中给出包含空格的选项值时,必须将其引用。
例如,--execute(或-e)选项可以与mysql一起使用,将一个或多个分号分隔的SQL语句传递给服务器。
当使用此选项时,mysql会执行选项值中的语句并退出。语句必须用引号括起来。例如
$> mysql -u root -p -e "SELECT VERSION();SELECT NOW()" Enter password: ****** +------------+ | VERSION() | +------------+ | 8.0.19 | +------------+ +---------------------+ | NOW() | +---------------------+ | 2019-09-03 10:36:48 | +---------------------+ $>
注意:
长格式(--execute)后面跟一个等号(=)。
若要在语句中使用带引号的值,必须转义内部引号,或者在语句中与用于引用语句本身的引号使用不同类型的引号。
命令处理器的功能决定了您可以选择使用单引号还是双引号,以及转义引号字符的语法。
例如,如果命令处理器支持单引号或双引号引用,则可以在语句周围使用双引号,并对语句中的任何引用值使用单引号。
博主PS:
写过JS的朋友应该知道这里的意思了。当多个引号嵌套的时候,可以最外层用双引号,内层用单引号。
3.2.使用配置文件
大多数MySQL程序可以从选项文件(有时称为配置文件)中读取启动选项。
博主PS:
官方文档英文原文为:option files (sometimes called configuration files).
中文更适合翻译为配置文件。
配置文件提供了一种方便的方式来指定常用选项,这样每次运行程序时都不需要在命令行中输入这些选项。
要确定程序是否读取配置文件,请使用--help选项调用它。(对于mysqld,请使用--verbose和--help。)如果程序读取选项文件,则帮助消息会指示它要查找哪些文件以及可以识别哪些选项组。
注意:
一个以--no-defaults选项启动的MySQL程序不读取除.mylogin.cnf之外的任何选项文件。
在禁用persisted_globals_load系统变量的情况下启动的服务器
无法读取mysqld-auto.cnf。
许多配置文件都是使用任何文本编辑器创建的纯文本文件。例外情况是:
包含登录路径选项的.mylogin.cnf文件。
这是一个由mysql_config_editor实用程序创建的加密文件。
请参阅第“mysql_config_editor--mysql配置实用程序”。
【MySQL精通之路】管理和实用程序-MySQL配置实用程序-mysql_config_editor-CSDN博客
“登录路径”是一个选项组,只允许某些选项:主机、用户、密码、端口和套接字。
客户端程序使用--login-path选项指定要从.mylogin.cnf读取的登录路径。
data目录中的mysqld-auto.cnf文件。
此JSON格式文件包含持久化的系统变量设置。
它是由服务器在执行SET PERSIST或SET PERSIST_ONLY语句时创建的。
参见“持久化系统变量”。
【MySQL精通之路】系统变量-持久化系统变量-CSDN博客
mysqld-auto.cnf的管理应该留给服务器,而不是手动执行。
3.2.1 配置文件处理顺序
MySQL按照以下讨论中描述的顺序查找选项文件,并读取任何存在的选项文件。如果您要使用的选项文件不存在,请使用刚才讨论的适当方法创建它。
注意:
有关与NDB群集程序一起使用的选项文件的信息
请参阅“NDB群集的配置”
3.2.1.1 Windows配置
在Windows上,MySQL程序按照指定的顺序从下表中显示的文件中读取启动选项(首先列出的文件优先读取,稍后读取的文件优先)。
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 PERSIST或SET PERSIST_ONLY持久化的系统变量(仅限服务器) |
在上表中,%WINDIR%表示Windows目录的位置。
这通常是C:\WINDOWS。使用以下命令根据WINDIR环境变量的值确定其确切位置:
C:\> echo %WINDIR%
%APPDATA%表示Windows应用程序数据目录的值。使用以下命令根据APPDATA环境变量的值确定其确切位置:
C:\> echo %APPDATA%
BASEDIR表示MySQL的基本安装目录。
当使用MySQL安装程序安装MySQL 8.0时,通常是C:\PROGRAMDIR\MySQL\MyServer 8.0,其中PROGRAMDIR表示程序目录(通常是Windows的英语版本的程序文件)。
请参阅“适用于Windows的MySQL安装程序”。
参阅待完成,请催更!
重要:
虽然MySQL安装程序将大多数文件放在PROGRAMDIR下,但默认情况下,它会将my.ini安装在C:\ProgramData\MySQL\MySQLServer8.0\目录下。
DATADIR表示MySQL数据目录。
用于查找mysqld-auto.cnf,其默认值是MySQL编译时内置的数据目录位置,但可以通过--datadir进行更改,该datadir指定为在处理mysqld-auto.com.cnf之前处理的配置文件或命令行选项。
3.2.1.2 Unix和类Unix系统配置
在Unix和类Unix系统上,MySQL程序按照指定的顺序从下表中显示的文件中读取启动配置(首先列出的文件优先读取,稍后读取的文件优先)。
注意:
在Unix平台上,MySQL会忽略全局可写的配置文件。这是有意作为一种安全措施。
File Name | 用途 |
---|---|
/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 PERSIST或SET PERSIST_ONLY持久化的系统变量(仅限服务器) |
在上表中,~表示当前用户的主目录($home的值)。
SYSCONFDIR
表示在MySQL构建时使用SYSCONFDIR选项为CMake指定的目录。默认情况下,这是位于编译安装目录下的etc目录。
MYSQL_HOME
是一个环境变量,包含特定于服务器的my.cnf文件所在目录的路径。如果没有设置MYSQL_HOME,并且使用mysqld_safe程序启动服务器,则mysqld_safe会将其设置为MYSQL基本安装目录BASEDIR。
DATADIR
表示MySQL数据目录。用于查找mysqld-auto.cnf,其默认值是MySQL编译时内置的数据目录位置,但可以通过--datadir进行更改,该datadir指定为在处理mysqld-auto.com.cnf之前处理的选项文件或命令行选项。
如果找到给定选项的多个实例,则最后一个实例优先,但有一个例外:对于mysqld,--user选项的第一个实例用作安全预防措施,以防止选项文件中指定的用户在命令行上被重写。
3.2.2 配置文件语法
以下配置文件语法适用于手动编辑的文件。
这不包括:
使用mysql_config_editor创建
加密的.mylogin.cnf
服务器以JSON格式创建的mysqld-auto.cnf。
当运行MySQL程序时,命令行上可能给出的任何长选项也可以在选项文件中给出。
要获取程序的可用选项列表,请使用--help选项运行该程序。
(对于mysqld,请使用--verbose和--help。)
在选项文件中指定选项的语法类似于命令行语法
(见“在命令行上使用选项”)。
但是,在选项文件中,可以省略选项名称中前导的两个短划线,并且每行只指定一个选项。
例如:
命令行上的--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。在选项文件中,可以在=字符周围使用空格,这在命令行中是不正确的。va
前导空格和尾随空格将自动从选项名称和值中删除。
您可以在选项值中使用转义序列\b、\t、\n、\r、\\和\s来表示退格符、制表符、换行符、回车符、反斜杠和空格字符。在选项文件中,应用以下转义规则:
后面跟有有效转义序列字符的反斜杠将转换为该序列所表示的字符。例如,\s被转换为一个空格。
后面没有有效转义序列字符的反斜杠保持不变。例如,\S保持原样。
前面的规则意味着文字反斜杠可以给定为\\,或者如果后面没有有效的转义序列字符,则可以给定为\。
选项文件中的转义序列规则与SQL语句中字符串文字中的转义顺序规则略有不同。
在后一种情况下,如果“x”不是有效的转义序列字符,\x将变为“x”而不是\x。
参见“字符串文字”。
选项文件值的转义规则与使用\作为路径名分隔符的Windows路径名特别相关。
如果Windows路径名中的分隔符后面跟着转义序列字符,则必须写成\\。
它可以写成\\或\,如果不是。或者,/可以在Windows路径名中使用,并被视为\。
假设您想在配置文件中指定C:\Program Files\MySQL\MySQL Server 8.0的基本目录。
这可以通过多种方式实现。一些例子:
basedir="C:\Program Files\MySQL\MySQL Server 8.0" basedir="C:\\Program Files\\MySQL\\MySQL Server 8.0" basedir="C:/Program Files/MySQL/MySQL Server 8.0" basedir=C:\\Program\sFiles\\MySQL\\MySQL\sServer\s8.0
如果选项组名称与程序名称相同,则该组中的选项将专门应用于该程序。
例如,[mysqld]和[mysql]组分别应用于mysqld服务器和mysql客户端程序。
[client]选项组由MySQL发行版中提供的所有客户端程序读取(但不是由mysqld读取)。
要了解使用C API的第三方客户端程序如何使用选项文件,
请参阅mysql_options()上的C API文档。
[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-5.7]、[mysqld-8.0]等的组。
以下组表示sql_mode设置应仅由版本号为8.0.x的MySQL服务器使用:
[mysqld-8.0] sql_mode=TRADITIONAL
3.2.3 指定配置文件
可以使用"!"在配置文件中包含指令以包含其他配置文件和!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处理,则仅使用/home/mydir/myopt.cnf中的[mysqld]组。
如果文件由mysqladmin处理,则只使用[mysqladmin]组。
如果文件由任何其他程序处理,则不会使用/home/mydir/myopt.cnf中的任何选项。
这个includedir指令的处理方式类似,只是读取命名目录中的所有选项文件。
如果选项文件包含!包括或!包括在指令中,无论选项文件出现在文件中的什么位置,只要处理选项文件,都会处理由这些指令命名的文件。
为了使包含指令起作用,文件路径不应在引号内指定,并且不应具有转义序列。例如,my.ini中提供的以下语句读取选项文件myots.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是文件中的最后一行,请确保在末尾附加一行换行符;否则,该行将被忽略。
未完待续,欢迎催更,欢迎关注,点赞,收藏,一键三连
3.3.影响配置文件处理的命令行选项
3.4.配置选项修改器
3.5.使用选项设置程序变量
3.6.配置默认值、配置期望值和=符号
还没有评论,来说两句吧...