【MySQL精通之路】MySQL的使用(2)-配置

【MySQL精通之路】MySQL的使用(2)-配置

码农世界 2024-05-19 前端 57 次浏览 0个评论

目录

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.配置默认值、配置期望值和=符号

转载请注明来自码农世界,本文标题:《【MySQL精通之路】MySQL的使用(2)-配置》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,57人围观)参与讨论

还没有评论,来说两句吧...

Top