MySQL8 中文参考(九),mysql8.2

MySQL8 中文参考(九) 原文:docs.oracle.com/javase/tutorial/reallybigindex.html 6.2.4 使用命令选项连接到 MySQL 服务器 原文:dev.mys

原文:docs.oracle.com/javase/tutorial/reallybigindex.html

6.2.4 使用命令选项连接到 MySQL 服务器

原文:dev.mysql.com/doc/refman/8.0/en/connecting.html

本节介绍如何使用命令行选项告诉mysql 和mysqldump 等客户端如何建立与MySQL 服务器的连接。有关在客户端(例如MySQL shell)中使用类似URI 的连接字符串或键值对建立连接的信息,请参阅使用类似URI 的字符串或键值对建立与服务器的连接。如果您无法连接并需要更多信息,请参阅MySQL 连接故障排除。

客户端程序要连接MySQL服务器,必须使用正确的连接参数,包括服务器运行的主机名以及MySQL帐户的用户名和密码。每个连接参数都有一个默认值,但如有必要,您可以使用程序选项来覆盖默认值。程序选项可以在命令行或选项文件中指定。

尽管我们的示例使用mysql 客户端程序,但这些原理也适用于其他客户端,例如mysqldump、mysqladmin 和mysqlshow。

该命令调用mysql 而不指定任何显式连接参数。

mysql

没有参数选项,因此应用默认值。

默认主机名是localhost。在Unix 上,这具有特殊含义,如下所述。

Windows 上的默认用户名是ODBC,Unix 上的默认用户名是您的登录名。

–password 和-p 均未指定,因此不会发送密码。

对于mysql,第一个非可选参数被视为默认数据库的名称。由于没有这个参数,mysql选择不使用默认数据库。

要显式指定主机名、用户名和密码,请在命令行上指定适当的选项。添加数据库名称参数以选择默认数据库。例子:

mysql –host=localhost –user=我的名字–password=*密码* mydb

mysql -h localhost -u myname -p*密码* mydb

对于密码选项,密码值是可选的。

使用–password 或-p 选项指定密码值时,–password=或-p 与后面的密码之间不能有空格。

如果您使用–password 或-p 而不指定密码值,客户端程序将提示您输入密码。当我输入密码时,它不会出现。这比在命令行上指定密码更安全。如果您在命令行上指定密码,系统上的其他用户可能可以通过运行ps 等命令来查看它。请参阅最终用户密码安全准则。

使用–skip-password 选项显式指定不存在密码并且客户端程序不提示输入密码。

如前所述,在命令行中包含密码值存在安全风险。要避免此风险,请指定–password 或-p 选项,而不指定后续密码值。

mysql –host=localhost –user=myname –password mydb

mysql -h localhost -u myname -p mydb

如果使用–password 或-p 选项并且未指定密码值,则客户端程序将打印提示并等待密码。 (在这些示例中,mydb 和其前面的密码选项之间有一个空格,因此mydb 不会被解释为密码。)

在某些系统上,用于提示密码的MySQL 库例程会自动将密码限制为8 个字符。此限制是系统库的属性,而不是MySQL 的属性。在MySQL 内部,密码长度没有限制。要解决受影响系统的限制,您可以在选项文件中指定密码(请参见第6.2.2.2 节“使用选项文件”)。另一种解决方法是将MySQL 密码更改为8 个字符或更少的值,但这样做的缺点是较短的密码往往不太安全。

客户端程序确定要建立的连接类型,如下所示:

如果未指定主机或主机是localhost,则连接到localhost。

在Windows 上,如果服务器使用启用共享内存连接的shared_memory 系统变量启动,则客户端将使用共享内存连接。

在Unix 上,MySQL 程序特别对待主机名localhost。这与您对其他基于网络的程序的期望不同。客户端使用Unix 套接字文件进行连接。可以使用–socket 选项或MYSQL_UNIX_PORT 环境变量指定套接字名称。

在Windows上,如果主机是.(句点)或未启用TCP/IP且未指定–socket或主机名为空,则服务器上启用支持的named_pipe如果系统变量存在,则客户端将使用命名管道进行连接。命名管道已连接。如果不支持命名管道连接或者进行连接的用户不是由named_pipe_full_access_group 系统变量指定的Windows 组的成员,则会发生错误。

否则,连接将使用TCP/IP。

–protocol 选项允许您使用特定的传输协议,即使其他选项通常使用不同的协议。换句话说,–protocol 显式指定传输协议并覆盖以前的规则,即使对于localhost 也是如此。

仅使用或检查与所选传输协议相关的连接选项。其他连接选项将被忽略。例如,在Unix 上,–host=localhost 会导致客户端使用Unix 套接字文件连接到本地服务器,即使指定了–port 或-P 选项来指定尝试连接的TCP/IP 端口号。

要确保客户端与本地服务器建立TCP/IP 连接,请使用–host 或-h 指定主机名值127.0.0.1(而不是localhost),或者指定本地服务器的IP 地址或名称。您还可以使用–protocol=TCP 选项显式指定传输协议,甚至对于本地主机也是如此。例子:

mysql–主机=127.0.0.1

mysql –协议=TCP

如果服务器配置为接受IPv6 连接,则客户端可以使用–host=:1 通过IPv6 连接到本地服务器。请参阅IPv6 支持。

在Windows 上,要强制MySQL 客户端使用命名管道连接,请指定–pipe 或–protocol=PIPE 选项,或.如果服务器上未启用named_pipe 系统变量来支持命名管道连接,或者进行连接的用户不是named_pipe_full_access_group 系统变量指定的Windows 组的成员,则会发生此错误。如果您不想使用默认管道名称,请使用–socket 选项指定管道名称。

使用TCP/IP 连接到远程服务器。此命令使用默认端口号(3306) 连接到在remote.example.com 上运行的服务器。

mysql –host=remote.example.com

要显式指定端口号,请使用–port 或-P 选项。

mysql –host=remote.example.com –port=13306

您还可以指定连接到本地服务器的端口号。但是,如上所述,默认情况下,与Unix 上的本地主机的连接使用套接字文件,因此指定端口号的选项将被忽略,除非您如上所述强制建立TCP/IP 连接。

对于此命令,在Unix 上,程序使用套接字文件并忽略–port 选项。

mysql –port=13306 –host=localhost

要使用端口号,请强制建立TCP/IP 连接。例如,通过以下方式之一调用该程序:

mysql –端口=13306 –主机=127.0.0.1

mysql –port=13306 –protocol=TCP

有关控制客户端程序如何与服务器建立连接的选项的详细信息,请参阅用于连接到服务器的命令选项。

每次调用客户端程序时都可以指定连接参数,而不必每次都在命令行中键入。

在选项文件的[client] 部分指定连接参数。文件的相关部分如下所示:

[客户]

主机=*主机名*

用户=*用户名*

密码=*密码*

有关详细信息,请参阅使用选项文件。

可以使用环境变量指定一些连接参数。例如:

使用MYSQL_HOST 指定mysql 的主机。

在Windows 上,使用USER 指定MySQL 用户名。

有关支持的环境变量的列表,请参阅环境变量。

6.2.5 使用类似 URI 字符串或键值对连接到服务器

原文:dev.mysql.com/doc/refman/8.0/en/connecting-using-uri-or-key-value-pairs.html

本节介绍如何使用类似URI的连接字符串或键值对来指定如何与MySQL Shell等客户端建立与MySQL服务器的连接。有关使用命令行选项与mysql 和mysqldump 等客户端建立连接的信息,请参阅使用命令选项连接到MySQL 服务器。如果无法连接,请参阅解决MySQL 连接问题。

消息

术语“类似URI”意味着连接字符串语法与RFC 3986 中定义的统一资源标识符(URI) 语法相似但不相同。

以下MySQL 客户端支持使用类似URI 的连接字符串或键值对连接到MySQL 服务器。

MySQL shell

为X DevAPI 实施MySQL 连接器

本节描述所有有效的类似URI 的字符串和键值对连接参数。其中许多与命令行选项指定的类似。

使用类似URI 的字符串指定的参数使用诸如myuser@example.com:3306/main-schema 之类的语法。有关完整语法,请参阅使用类似URI 的连接字符串进行连接。

使用键值对指定的参数使用诸如{user:\’myuser\’, host:\’example.com\’, port:3306, schema:\’main-schema\’} 之类的语法。有关完整语法,请参阅使用键值对连接。

连接参数不区分大小写。每个参数只能指定一次。如果多次指定某个参数,将会发生错误。

本节涵盖以下主题:

基本连接参数

附加连接参数

使用类似于以下内容的URI 连接字符串进行连接:

使用键值对连接

基本连接参数

以下描述描述了指定MySQL 连接时可以使用的参数。这些参数可以使用符合基本类URI 语法的字符串(请参阅使用类URI 连接字符串进行连接)或作为键值对(请参阅键值对(请参阅“使用一对连接器进行连接”)来指定。

方案: 要使用的传输协议。使用mysqlx 进行X 协议连接,使用mysql 进行经典MySQL 协议连接。如果没有指定协议,服务器将尝试猜测协议。支持DNS SRV 的连接器可以使用mysqlx+srv 方案(请参阅使用DNS SRV 记录进行连接)。

user: 提供身份验证时使用的MySQL 用户帐户。

password: 用于身份验证过程的密码。

警告

在连接规范中显式指定密码并不安全,因此不建议这样做。以下说明显示如何显示交互式密码提示。

host: 运行服务器实例的主机。该值可以是主机名、IPv4 地址或IPv6 地址。如果未指定主机,则默认使用localhost。

port: 目标MySQL 服务器侦听连接的TCP/IP 网络端口。如果未指定端口,则X 协议连接的默认端口为33060,经典MySQL 协议连接的默认端口为3306。

socket: Unix 套接字文件路径或Windows 命名管道名称。该值为本地文件路径。像URI 这样的字符串必须使用百分比编码或将路径括在括号中进行编码。使用括号无需对/目录分隔符等字符进行百分比编码。例如,要使用Unix 套接字/tmp/mysql.sock 作为root@localhost 进行连接,请使用百分比编码将路径指定为root@localhost?socket=%2Ftmp%2Fmysql.sock,或使用括号将路径指定为root @。本地主机?套接字=(/tmp/mysql.sock)。

schema: 要连接的默认数据库。如果未指定数据库,则连接没有默认数据库。

Unix 上localhost 的处理取决于传输协议的类型。使用传统MySQL 协议进行连接时,会将localhost 视为任何其他MySQL 客户端。也就是说,假定localhost 用于基于套接字的连接。对于使用X 协议的连接,localhost 的行为有所不同,并假定表示环回地址(例如IPv4 地址127.0.0.1)。

附加连接参数

连接选项可以通过附加?*attribute=value* 指定为类似URI 的字符串的属性,也可以指定为键值对。可以使用以下选项:

ssl-mode: 连接所需的安全状态。允许使用以下模式:

无效的

优选

必需的

验证_CA

VERIFY_IDENTITY

重要的

VERIFY_CA 和VERIFY_IDENTITY 比默认的PREFERRED 更好,因为它们有助于防止中间人攻击。

有关这些模式的更多信息,请参阅加密连接的命令选项中–ssl-mode 选项的说明。

ssl-ca: PEM 格式的X.509 证书颁发机构文件路径。

ssl-capath: 包含PEM 格式的X.509 证书颁发机构文件的目录路径。

ssl-cert: PEM 格式的X.509 证书文件的路径。

ssl-cipher: 使用高达TLSv1.2 的TLS 协议对连接进行加密。

ssl-crl: 包含PEM 格式的证书吊销列表的文件的路径。

ssl-crlpath: 包含PEM 格式的证书吊销列表文件的目录路径。

ssl-key: PEM 格式的X.509 密钥文件的路径。

tls-version: 经典MySQL 协议允许加密连接的TLS 协议。此选项仅在MySQL shell 中受支持。 tls-version(单数)值是逗号分隔的列表,例如TLSv1.2、TLSv1.3。有关详细信息,请参阅加密连接TLS 协议和密码。此选项依赖于未将ssl-mode 选项设置为DISABLED。

tls-versions: 允许使用TLS 协议进行加密的X 协议连接。 tls-versions(复数)值是一个数组,例如[TLSv1.2,TLSv1.3]。有关详细信息,请参阅加密连接TLS 协议和密码。此选项依赖于未将ssl-mode 选项设置为DISABLED。

tls-ciphersuites: 允许的TLS 密码套件。 tls-ciphersuites 的值是TLS 密码套件中列出的IANA 密码套件名称列表。有关详细信息,请参阅加密连接TLS 协议和密码。此选项依赖于未将ssl-mode 选项设置为DISABLED。

auth-method: 用于连接的身份验证方法。默认值为AUTO,这意味着服务器将尝试猜测。允许使用以下方法:

汽车

MYSQL41

SHA256_MEMORY

FROM_CAPABILITIES

倒退

素色

对于X 协议连接,配置的身份验证方法将被以下身份验证方法覆盖:MYSQL41、SHA256_MEMORY 和PLAIN。

get-server-public-key:向服务器请求公钥,用于RSA 密钥对的密码交换。使用DISABLED SSL 模式连接到MySQL 8.0 服务器时,请使用经典MySQL 协议。在这种情况下,您需要指定协议。例如:

mysql://user@localhost:3306?get-server-public-key=true

此选项适用于使用caching_sha2_password 身份验证插件进行身份验证的客户端。对于此插件,除非请求,否则服务器不会发送公钥。对于不使用插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA 的密码交换,例如当客户端使用安全连接连接到服务器时,也会忽略此选项。

如果指定了server-public-key-path=*file_name* 并指定了有效的公钥文件,则这优先于get-server-public-key。

有关caching_sha2_password 插件的更多信息,请参阅缓存SHA-2 可插入身份验证。

server-public-key-path:以PEM 格式存储的文件的路径名,其中包含服务器进行RSA 密钥对密码交换所需的客户端公钥的副本。使用DISABLED SSL 模式连接到MySQL 8.0 服务器时,请使用经典MySQL 协议。

此选项适用于使用sha256_password 或caching_sha2_password 身份验证插件进行身份验证的客户端。对于不使用这些插件进行身份验证的帐户,此选项将被忽略。如果不使用基于RSA 的密码交换,例如当客户端使用安全连接连接到服务器时,也会忽略此选项。

如果指定了server-public-key-path=*file_name* 并指定了有效的公钥文件,则这优先于get-server-public-key。

有关sha256_password 和caching_sha2_password 插件的更多信息,请参阅SHA-256 可插入身份验证和缓存SHA-2 可插入身份验证。

ssh:连接到SSH 服务器以使用SSH 隧道访问MySQL 服务器实例的URI。 URI 格式为[用户@]主机[:端口]。使用uri 选项指定目标MySQL 服务器实例的URI。有关MySQL shell 中SSH 隧道的更多信息,请参阅使用SSH 隧道。

uri:将从ssh 选项中指定的服务器通过SSH 隧道访问的MySQL 服务器实例的URI。 URI 格式为[scheme://][user@]host[:port]。不要使用基本连接参数(方案、用户、主机、端口)来指定SSH 隧道连接的MySQL 服务器连接,仅使用uri 选项。

ssh-password:连接SSH 服务器的密码。

警告

在连接规范中指定显式密码并不安全,因此不建议这样做。如果需要密码,MySQL Shell 会以交互方式提示您输入密码。

ssh-config-file:用于连接SSH 服务器的SSH 配置文件。如果未指定此选项,您可以使用MySQL shell 配置选项ssh.configFile 将自定义文件设置为默认文件。如果未设置ssh.configFile,则默认使用标准SSH 配置文件~/.ssh/config。

ssh-identity-file:用于连接到SSH 服务器的身份文件。如果未指定该选项,则默认为SSH 代理中配置的身份文件(如果使用)、SSH 配置文件中配置的身份文件或SSH 配置文件夹(~/)中的标准密钥文件。用来。ssh/id_rsa)。

ssh-identity-pass:使用ssh-identity-file 选项指定的身份文件的密码。

警告

在连接规范中指定显式密码是不安全的,不建议这样做。如果需要密码,MySQL Shell 会以交互方式提示您输入密码。

connect-timeout:用于配置客户端(例如MySQL shell)等待连接到无响应的MySQL 服务器的秒数。

压缩:此选项请求或禁用连接压缩。在MySQL 8.0.19 之前,它仅适用于传统的MySQL 协议连接,但从MySQL 8.0.20 开始,它也适用于X 协议连接。

在MySQL 8.0.19 之前,此选项的值为true(或1)以启用压缩,默认值为false(或0)以禁用压缩。

从MySQL 8.0.20 开始,需要此选项的值。这意味着如果服务器不支持,它将请求压缩并失败。首选方法是请求压缩,如果不可能,则退回到未压缩的连接。这是一个未压缩的连接,如果服务器不支持它将会失败。即使允许,也会失败。 Preferred 是X 协议连接的默认值,disabled 是经典MySQL 协议连接的默认值。有关X 插件连接的压缩控制的信息,请参阅第22.5.5 节“压缩X 插件连接”。

请注意,不同的MySQL 客户端以不同的方式实现对连接压缩的支持。请参阅您客户的文档以获取更多信息。

压缩算法和压缩级别:这些选项从MySQL Shell 8.0.20 开始可用,让您可以更好地控制连接压缩。您可以指定这些来选择连接上使用的压缩算法以及该算法使用的数字压缩级别。您还可以请求使用压缩算法而不是压缩来压缩连接。有关控制MySQL Shell 连接压缩的信息,请参阅使用压缩连接。

连接属性:控制应用程序在连接时传递给服务器的键值对。有关连接属性的一般信息,请参见第29.12.9 节“性能模式连接属性表”。客户端通常定义一组可以禁用或启用的默认属性。例如:

mysqlx://用户@主机连接属性?

mysqlx://user@host?connection-attributes=true

mysqlx: //用户@主机?连接属性=false

默认行为是发送一组默认属性。应用程序可以指定除默认属性之外传递的属性。您可以将其他连接属性指定为连接字符串中的connection-attributes 参数。连接属性参数值可以为空(与指定true 相同)、布尔值(true 或false 以启用或禁用默认属性集)或以逗号分隔的零个或多个key=value 说明符列表。是。列表(用于发送除默认属性集之外的属性)。在列表中,缺失的键值被视为空字符串。其他例子:

mysqlx://user@host?connection-attributes=[attr1=val1,attr2,attr3=]

mysqlx://用户@主机?连接属性=[]

应用程序定义的属性名称不能以_ 开头,因为它们是为内部属性保留的。

使用类似 URI 的连接字符串进行连接

您可以使用类似URI 的字符串指定与MySQL 服务器的连接。该字符串可以与MySQL Shell –uri 命令选项、MySQL Shell \\connect 命令以及实现X DevAPI 的MySQL 连接器一起使用。

消息

术语“类似URI”意味着连接字符串的语法与RFC 3986 中定义的统一资源标识符(URI) 相似但不相同。

)语法。

类似 URI 的连接字符串具有以下语法:

[*scheme*://][*user*[:[*password*]]@]*host*[:*port*][/*schema*]?*attribute1=value1&attribute2=value2…*

重要

URI-like 字符串的元素中必须使用百分号编码来处理保留字符。例如,如果您指定包含 @ 字符的字符串,则该字符必须替换为 %40。如果在 IPv6 地址中包含区域 ID,则用作分隔符的 % 字符必须替换为 %25。

您可以在 [基本连接参数 中描述的 URI-like 连接字符串中使用的参数。

MySQL Shell 的shell.parseUri()和shell.unparseUri()方法可用于拆解和组装类似 URI 的连接字符串。给定类似 URI 的连接字符串,shell.parseUri()返回一个包含字符串中每个元素的字典。shell.unparseUri()将 URI 组件和连接选项的字典转换为用于连接到 MySQL 的有效类似 URI 连接字符串,可在 MySQL Shell 中使用,也可由实现 X DevAPI 的 MySQL 连接器使用。

如果在类似 URI 的字符串中未指定密码(建议不指定),交互式客户端会提示输入密码。以下示例展示了如何指定类似 URI 的字符串,其中包含用户名*user_name*。在每种情况下,都会提示输入密码。

连接到监听端口 33065 的本地服务器实例的 X 协议连接。
mysqlx://*user_name*@localhost:33065
到监听端口 3333 的本地服务器实例的经典 MySQL 协议连接。
mysql://*user_name*@localhost:3333
通过主机名、IPv4 地址和 IPv6 地址连接到远程服务器实例的 X 协议连接。
mysqlx://*user_name*@server.example.com/
mysqlx://*user_name*@198.51.100.14:123
mysqlx://*user_name*@[2001:db8:85a3:8d3:1319:8a2e:370:7348]
使用套接字进行 X 协议连接,路径可以使用百分号编码或括号提供。
mysqlx://*user_name*@/*path*%2F*to*%2F*socket.sock*
mysqlx://*user_name*@(*/path/to/socket.sock*)
可以指定可选路径,表示数据库。
# use \’world\’ as the default database
mysqlx://*user_name*@198.51.100.1/world
# use \’world_x\’ as the default database, encoding _ as %5F
mysqlx://*user_name*@198.51.100.2:33060/world%5Fx
可以指定可选查询,由每个以*key*=*value*对或单个*key给出的值组成。要指定多个值,请用,字符分隔它们。可以混合使用*key*=*value*和key*值。值可以是列表类型,列表值按出现顺序排序。字符串必须是百分号编码或用括号括起来。以下是等效的。
ssluser@127.0.0.1?ssl-ca=%2Froot%2Fclientcert%2Fca-cert.pem\\
&ssl-cert=%2Froot%2Fclientcert%2Fclient-cert.pem\\
&ssl-key=%2Froot%2Fclientcert%2Fclient-key
ssluser@127.0.0.1?ssl-ca=(/root/clientcert/ca-cert.pem)\\
&ssl-cert=(/root/clientcert/client-cert.pem)\\
&ssl-key=(/root/clientcert/client-key)
指定用于加密连接的 TLS 版本和密码套件:
mysql://*user_name*@198.51.100.2:3306/world%5Fx?\\
tls-versions=[TLSv1.2,TLSv1.3]&tls-ciphersuites=[TLS_DHE_PSK_WITH_AES_128_\\
GCM_SHA256, TLS_CHACHA20_POLY1305_SHA256]

前面的示例假定连接需要密码。对于交互式客户端,在登录提示符处会要求输入指定用户的密码。如果用户帐户没有密码(这是不安全且不建议的),或者正在使用套接字对等凭据认证(例如,使用 Unix 套接字连接),则必须在连接字符串中明确指定不提供密码且不需要密码提示。为此,在字符串中在*user_name*后面放置一个:,但不要在其后指定密码。例如:

mysqlx://*user_name*:@localhost

使用键值对进行连接

在 MySQL Shell 和一些实现 X DevAPI 的 MySQL 连接器中,您可以使用键值对指定与 MySQL 服务器的连接,这些键值对以自然语言构造的形式提供给实现。例如,您可以在 JavaScript 中以 JSON 对象的形式或在 Python 中以字典的形式提供键值对作为连接参数。无论以何种方式提供键值对,概念都是相同的:本节中描述的键可以分配用于指定连接的值。您可以在 MySQL Shell 的shell.connect()方法或 InnoDB Cluster 的dba.createCluster()方法中使用键值对指定连接,并且在一些实现 X DevAPI 的 MySQL 连接器中也可以这样做。

通常,键值对用{和}字符括起来,,字符用作键值对之间的分隔符。:字符用于键和值之间的分隔,字符串必须被定界(例如,使用\’字符)。与类似 URI 的连接字符串不同,不需要对字符串进行百分比编码。

以键值对形式指定的连接具有以下格式:

{ *key*: *value*, *key*: *value*, …}

您可以用作连接键的参数在基本连接参数中进行了描述。

如果在键值对中未指定密码(建议不要指定),交互式客户端会提示输入密码。以下示例展示了如何使用用户名\’*user_name*\’指定连接。在每种情况下,都会提示输入密码。

在本地服务器实例上监听端口 33065 的 X 协议连接。
{user:\’*user_name*\’, host:\’localhost\’, port:33065}
在本地服务器实例上监听端口 3333 的经典 MySQL 协议连接。
{user:\’*user_name*\’, host:\’localhost\’, port:3333}
使用主机名、IPv4 地址和 IPv6 地址的远程服务器实例的 X 协议连接。
{user:\’*user_name*\’, host:\’server.example.com\’}
{user:\’*user_name*\’, host:198.51.100.14:123}
{user:\’*user_name*\’, host:[2001:db8:85a3:8d3:1319:8a2e:370:7348]}
使用套接字的 X 协议连接。
{user:\’*user_name*\’, socket:\’*/path/to/socket/file*\’}
可以指定一个可选的模式,代表一个数据库。
{user:\’*user_name*\’, host:\’localhost\’, schema:\’world\’}

前面的示例假定连接需要密码。对于交互式客户端,在登录提示符处会请求指定用户的密码。如果用户帐户没有密码(这是不安全且不推荐的),或者正在使用套接字对等凭据验证(例如,使用 Unix 套接字连接),则必须明确指定不提供密码且不需要密码提示。为此,在password键后面使用\’\’提供一个空字符串。例如:

{user:\’*user_name*\’, password:\’\’, host:\’localhost\’}

6.2.6 使用 DNS SRV 记录连接服务器

原文:dev.mysql.com/doc/refman/8.0/en/connecting-using-dns-srv.html

在域名系统(DNS)中,SRV 记录(服务位置记录)是一种资源记录类型,使客户端能够指定指示服务、协议和域的名称。对名称进行 DNS 查找会返回一个包含提供所需服务的域中多个可用服务器名称的回复。有关 DNS SRV 的信息,包括记录如何定义列出服务器的优先顺序,请参阅 RFC 2782。

MySQL 支持使用 DNS SRV 记录连接服务器。接收到 DNS SRV 查找结果的客户端会尝试按照 DNS 管理员为每个主机分配的优先级和权重的顺序连接到 MySQL 服务器。仅当客户端无法连接到任何服务器时才会发生连接失败。

当多个 MySQL 实例(例如服务器集群)为您的应用程序提供相同的服务时,DNS SRV 记录可用于帮助故障转移、负载平衡和复制服务。对于应用程序直接管理连接尝试的候选服务器集合来说是繁琐的,DNS SRV 记录提供了一种替代方案:

DNS SRV 记录使 DNS 管理员能够将单个 DNS 域映射到多个服务器。当服务器被添加或从配置中移除,或者它们的主机名发生更改时,DNS SRV 记录也可以由管理员在中心位置进行更新。
集中管理 DNS SRV 记录消除了个别客户端在连接请求中识别每个可能主机的需求,或者连接由额外的软件组件处理的需求。应用程序可以使用 DNS SRV 记录获取关于候选 MySQL 服务器的信息,而不是自行管理服务器信息。
DNS SRV 记录可以与连接池结合使用,这种情况下,当不再在当前 DNS SRV 记录列表中的主机变得空闲时,连接将从池中移除。

MySQL 支持在以下情境中使用 DNS SRV 记录连接服务器:

几个 MySQL 连接器实现了 DNS SRV 支持;连接器特定选项使得可以请求 DNS SRV 记录查找,无论是用于 X 协议连接还是经典的 MySQL 协议连接。有关一般信息,请参阅 使用 DNS SRV 记录连接。有关详细信息,请参阅各个 MySQL 连接器的文档。
C API 提供了一个mysql_real_connect_dns_srv()函数,类似于mysql_real_connect(),不同之处在于参数列表不指定要连接到的 MySQL 服务器的特定主机。而是指定一个指定一组服务器的 DNS SRV 记录。参见 mysql_real_connect_dns_srv()。
mysql客户端具有一个–dns-srv-name选项,用于指示指定一组服务器的 DNS SRV 记录。参见 Section 6.5.1, “mysql — The MySQL Command-Line Client”。

DNS SRV 名称由服务、协议和域组成,其中服务和协议分别以下划线为前缀:

_*service*._*protocol*.*domain*

以下 DNS SRV 记录标识了多个候选服务器,例如客户端用于建立 X 协议连接:

Name TTL Class Priority Weight Port Target
_mysqlx._tcp.example.com. 86400 IN SRV 0 5 33060 server1.example.com.
_mysqlx._tcp.example.com. 86400 IN SRV 0 10 33060 server2.example.com.
_mysqlx._tcp.example.com. 86400 IN SRV 10 5 33060 server3.example.com.
_mysqlx._tcp.example.com. 86400 IN SRV 20 5 33060 server4.example.com.

在这里,mysqlx表示 X 协议服务,tcp表示 TCP 协议。客户端可以使用名称_mysqlx._tcp.example.com请求此 DNS SRV 记录。指定连接请求中的名称的特定语法取决于客户端类型。例如,客户端可能支持在类似 URI 的连接字符串中指定名称或作为键值对。

经典协议连接的 DNS SRV 记录可能如下所示:

Name TTL Class Priority Weight Port Target
_mysql._tcp.example.com. 86400 IN SRV 0 5 3306 server1.example.com.
_mysql._tcp.example.com. 86400 IN SRV 0 10 3306 server2.example.com.
_mysql._tcp.example.com. 86400 IN SRV 10 5 3306 server3.example.com.
_mysql._tcp.example.com. 86400 IN SRV 20 5 3306 server4.example.com.

在这里,名称mysql指定了经典 MySQL 协议服务,端口为 3306(默认经典 MySQL 协议端口),而不是 33060(默认 X 协议端口)。

使用 DNS SRV 记录查找时,客户端通常必须遵循这些连接请求规则(可能存在客户端或连接器特定的例外情况):

请求必须指定完整的 DNS SRV 记录名称,服务和协议名称前缀为下划线。
请求不能指定多个主机名。
请求不能指定端口号。
仅支持 TCP 连接。不能使用 Unix 套接字文件、Windows 命名管道和共享内存。

有关在 X DevAPI 中使用基于 DNS SRV 的连接的更多信息,请参见使用 DNS SRV 记录进行连接。

6.2.7 连接传输协议

原文:dev.mysql.com/doc/refman/8.0/en/transport-protocols.html

对于使用 MySQL 客户端库的程序(例如,mysql 和 mysqldump),MySQL 支持基于几种传输协议与服务器建立连接:TCP/IP、Unix 套接字文件、命名管道和共享内存。本节描述了如何选择这些协议,以及它们之间的相似性和差异。

传输协议选择
本地和远程连接的传输支持
localhost 的解释
加密和安全特性
连接压缩

传输协议选择

对于给定的连接,如果未明确指定传输协议,则将隐式确定。例如,在 Unix 和类 Unix 系统上,对localhost的连接将导致套接字文件连接,否则将导致与127.0.0.1的 TCP/IP 连接。有关更多信息,请参阅第 6.2.4 节,“使用命令选项连接到 MySQL 服务器”。

要明确指定协议,请使用–protocol 命令选项。以下表格显示了–protocol 的可接受值,并指示每个值适用的平台。这些值不区分大小写。

–protocol 值使用的传输协议适用平台TCPTCP/IP所有SOCKETUnix 套接字文件Unix 和类 Unix 系统PIPE命名管道WindowsMEMORY共享内存Windows

本地和远程连接的传输支持

TCP/IP 传输支持连接到本地或远程 MySQL 服务器。

套接字文件、命名管道和共享内存传输仅支持连接到本地 MySQL 服务器。 (命名管道传输允许远程连接,但 MySQL 中尚未实现此功能。)

localhost 的解释

如果未明确指定传输协议,则localhost将被解释如下:

在 Unix 和类 Unix 系统上,对localhost的连接将导致套接字文件连接。
否则,对localhost的连接将导致与127.0.0.1建立 TCP/IP 连接。

如果传输协议被明确指定,localhost 将根据该协议进行解释。例如,使用 –protocol=TCP,对 localhost 的连接在所有平台上都会导致与 127.0.0.1 的 TCP/IP 连接。

加密和安全特性

TCP/IP 和套接字文件传输受到 TLS/SSL 加密的影响,使用 加密连接的命令选项 中描述的选项。命名管道和共享内存传输不受 TLS/SSL 加密的影响。

如果通过默认安全的传输协议进行连接,则连接默认是安全的。否则,对于受 TLS/SSL 加密影响的协议,可以使用加密使连接变得安全:

TCP/IP 连接默认不安全,但可以进行加密以使其安全。
套接字文件连接默认是安全的。它们也可以进行加密,但加密套接字文件连接并不会使其更安全,反而会增加 CPU 负载。
命名管道连接默认不安全,并且不受加密的影响以使其安全。然而,named_pipe_full_access_group 系统变量可用于控制哪些 MySQL 用户被允许使用命名管道连接。
共享内存连接默认是安全的。

如果启用了 require_secure_transport 系统变量,则服务器只允许使用某种形式的安全传输的连接。根据前述说明,使用 TLS/SSL 加密的 TCP/IP 连接、套接字文件或共享内存的连接是安全的连接。未使用 TLS/SSL 加密的 TCP/IP 连接和命名管道连接不安全。

另请参见 将加密连接配置为强制性。

连接压缩

所有传输协议都受到在客户端和服务器之间的流量上使用压缩的影响。如果对于给定连接同时使用了压缩和加密,压缩会在加密之前进行。更多信息,请参见 6.2.8 节,“连接压缩控制”。

6.2.8 连接压缩控制

原文:dev.mysql.com/doc/refman/8.0/en/connection-compression-control.html

与服务器的连接可以在客户端和服务器之间的流量上使用压缩,以减少连接发送的字节数。默认情况下,连接是未压缩的,但如果服务器和客户端就一个相互允许的压缩算法达成一致,则可以进行压缩。

压缩连接起源于客户端,但会影响客户端和服务器双方的 CPU 负载,因为双方都会执行压缩和解压操作。由于启用压缩会降低性能,其好处主要体现在网络带宽较低、网络传输时间主导压缩和解压操作成本、结果集较大的情况下。

本节描述了可用的压缩控制配置参数以及用于监视压缩使用的信息来源。适用于经典的 MySQL 协议连接。

压缩控制适用于客户端程序连接到服务器以及参与源/副本复制或组复制的服务器之间的连接。压缩控制不适用于 FEDERATED 表的连接。在以下讨论中,“客户端连接”是指从任何支持压缩的源发起的连接到服务器的连接,除非上下文指示特定的连接类型。

注意

MySQL 8.0.19 开始,X 协议连接到 MySQL 服务器实例支持压缩,但 X 协议连接的压缩与此处描述的经典 MySQL 协议连接的压缩独立操作,并且受到单独控制。有关 X 协议连接压缩的信息,请参见 第 22.5.5 节,“使用 X 插件进行连接压缩”。

配置连接压缩
配置传统连接压缩
监视连接压缩

配置连接压缩

从 MySQL 8.0.18 开始,可以使用以下配置参数来控制连接压缩:

protocol_compression_algorithms 系统变量配置了服务器允许用于传入连接的压缩算法。
–compression-algorithms 和 –zstd-compression-level 命令行选项配置了以下客户端程序所允许的压缩算法和zstd压缩级别:mysql, mysqladmin, mysqlbinlog, mysqlcheck, mysqldump, mysqlimport, mysqlpump, mysqlshow, mysqlslap, 和 mysqltest,以及 mysql_upgrade。从 MySQL 8.0.20 版本开始,MySQL Shell 也提供这些命令行选项。
mysql_options() 函数的 MYSQL_OPT_COMPRESSION_ALGORITHMS 和 MYSQL_OPT_ZSTD_COMPRESSION_LEVEL 选项配置了使用 MySQL C API 的客户端程序所允许的压缩算法和zstd压缩级别。
CHANGE MASTER TO 语句的 MASTER_COMPRESSION_ALGORITHMS 和 MASTER_ZSTD_COMPRESSION_LEVEL 选项配置了参与源/复制复制的副本服务器所允许的压缩算法和zstd压缩级别。从 MySQL 8.0.23 版本开始,使用 CHANGE REPLICATION SOURCE TO 语句和选项 SOURCE_COMPRESSION_ALGORITHMS 和 SOURCE_ZSTD_COMPRESSION_LEVEL。
group_replication_recovery_compression_algorithms 和 group_replication_recovery_zstd_compression_level 系统变量配置了在新成员加入组并连接到提供者时,Group Replication 恢复连接所允许的压缩算法和zstd压缩级别。

允许指定压缩算法的配置参数是字符串值,并接受一个或多个逗号分隔的压缩算法名称列表,顺序不限��可从以下项目中选择(不区分大小写):

zlib: 允许使用zlib压缩算法的连接。
zstd: 允许使用zstd压缩算法的连接。
uncompressed:允许未压缩的连接。

注意

因为uncompressed是一个可能已配置或未配置的算法名称,因此可以配置 MySQL 不允许未压缩的连接。

示例:

要配置服务器允许传入连接使用的压缩算法,请设置protocol_compression_algorithms系统变量。默认情况下,服务器允许所有可用算法。要在启动时明确配置该设置,请在服务器的my.cnf文件中使用以下行:
[mysqld]
protocol_compression_algorithms=zlib,zstd,uncompressed
要在运行时设置和持久化protocol_compression_algorithms系统变量为该值,请使用以下语句:
SET PERSIST protocol_compression_algorithms=\’zlib,zstd,uncompressed\’;
SET PERSIST为运行中的 MySQL 实例设置一个值。它还保存该值,导致其在随后的服务器重新启动时保留。要更改运行中的 MySQL 实例的值,而不使其在随后的重新启动中保留,使用GLOBAL关键字而不是PERSIST。参见 Section 15.7.6.1, “SET Syntax for Variable Assignment”。
要仅允许使用zstd压缩的传入连接,请在启动时像这样配置服务器:
[mysqld]
protocol_compression_algorithms=zstd
或者,在运行时进行更改:
SET PERSIST protocol_compression_algorithms=\’zstd\’;
要允许mysql客户端发起zlib或uncompressed连接,请这样调用它:
mysql –compression-algorithms=zlib,uncompressed
要配置副本使用zlib或zstd连接连接到源,对于zstd连接使用压缩级别 7,请使用CHANGE REPLICATION SOURCE TO语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句(在 MySQL 8.0.23 之前):
CHANGE REPLICATION SOURCE TO
SOURCE_COMPRESSION_ALGORITHMS = \’zlib,zstd\’,
SOURCE_ZSTD_COMPRESSION_LEVEL = 7;
这假定replica_compressed_protocol或slave_compressed_protocol系统变量已禁用,原因在配置传统连接压缩中有描述。

为了成功建立连接,连接的双方必须就一种互相允许的压缩算法达成一致。算法协商过程尝试使用zlib,然后是zstd,最后是uncompressed。如果双方找不到共同的算法,连接尝试将失败。

因为双方必须就压缩算法达成一致,而uncompressed是一个不一定被允许的算法值,所以回退到未压缩连接并不一定发生。例如,如果服务器配置为允许zstd,而客户端配置为允许zlib,uncompressed,则客户端根本无法连接。在这种情况下,双方没有共同的算法,因此连接尝试失败。

启用指定zstd压缩级别的配置参数采用从 1 到 22 的整数值,较大的值表示更高级别的压缩。默认的zstd压缩级别为 3。压缩级别设置对不使用zstd压缩的连接没有影响。

可配置的zstd压缩级别可在减少网络流量和增加 CPU 负载与增加网络流量和降低 CPU 负载之间进行选择。更高的压缩级别可以减少网络拥塞,但额外的 CPU 负载可能会降低服务器性能。

配置遗留连接压缩

在 MySQL 8.0.18 之前,这些配置参数可用于控制连接压缩:

客户端程序支持–compress命令行选项,以指定与服务器的连接使用压缩。
对于使用 MySQL C API 的程序,通过为mysql_options()函数启用MYSQL_OPT_COMPRESS选项,指定与服务器的连接使用压缩。
对于源/副本复制,启用系统变量replica_compressed_protocol(从 MySQL 8.0.26 开始)或slave_compressed_protocol(在 MySQL 8.0.26 之前)指定副本连接到源的压缩使用。

在每种情况下,当指定使用压缩时,如果双方都允许,连接将使用zlib压缩算法,否则将回退到未压缩连接。

截至 MySQL 8.0.18,刚刚描述的压缩参数成为遗留参数,因为引入了用于更好控制连接压缩的其他压缩参数,详细信息请参阅配置连接压缩。一个例外是 MySQL Shell,在那里,–compress命令行选项仍然有效,并且可以用于请求压缩而不选择压缩算法。有关 MySQL Shell 的连接压缩控制信息,请参阅使用压缩连接。

旧压缩参数与新参数互动,并且它们的语义如下更改:

遗留的–compress选项的含义取决于是否指定了–compression-algorithms:

当未指定–compression-algorithms时,–compress等同于指定一个客户端算法集为zlib,uncompressed。
当指定–compression-algorithms时,–compress等同于指定一个zlib算法集,完整的客户端算法集是zlib加上–compression-algorithms指定的算法的并集。例如,使用–compress和–compression-algorithms=zlib,zstd,允许的算法集是zlib加上zlib,zstd;即,zlib,zstd。使用–compress和–compression-algorithms=zstd,uncompressed,允许的算法集是zlib加上zstd,uncompressed;即,zlib,zstd,uncompressed。
对于mysql_options() C API 函数,遗留的MYSQL_OPT_COMPRESS选项和MYSQL_OPT_COMPRESSION_ALGORITHMS选项之间发生相同类型的交互。
如果启用了replica_compressed_protocol或slave_compressed_protocol系统变量,则优先于MASTER_COMPRESSION_ALGORITHMS,如果源和复制品都允许该算法,则连接到源使用zlib压缩。如果禁用了replica_compressed_protocol或slave_compressed_protocol,则MASTER_COMPRESSION_ALGORITHMS的值适用。

注意

遗留的压缩控制参数自 MySQL 8.0.18 起已弃用;预计将在未来的 MySQL 版本中移除。

监控连接压缩

Compression状态变量为ON或OFF,表示当前连接是否使用了压缩。

mysql客户端的\\status命令显示一行,如果当前连接启用了压缩,则会显示Protocol: Compressed。如果该行不存在,则连接未压缩。

从 8.0.14 开始,MySQL Shell 的\\status命令显示一个Compression:行,指示连接是否压缩,显示为Disabled或Enabled。

截至 MySQL 8.0.18,有以下额外的信息源可用于监视连接压缩:

要监视客户端连接中使用的压缩情况,请使用Compression_algorithm和Compression_level状态变量。对于当前连接,它们的值分别表示压缩算法和压缩级别。
要确定服务器配置允许哪些压缩算法用于传入连接,请检查protocol_compression_algorithms系统变量。
对于源/复制复制连接,配置的压缩算法和压缩级别可从多个来源获取:

性能模式replication_connection_configuration表具有COMPRESSION_ALGORITHMS和ZSTD_COMPRESSION_LEVEL列。
mysql.slave_master_info系统表具有Master_compression_algorithms和Master_zstd_compression_level列。如果存在master.info文件,则其中也包含这些值的行。

6.2.9 设置环境变量

原文:dev.mysql.com/doc/refman/8.0/en/setting-environment-variables.html

环境变量可以在命令提示符下设置以影响当前命令处理器的当前调用,或永久设置以影响将来的调用。要永久设置变量,可以将其设置在启动文件中或使用系统为此目的提供的界面。请查阅您的命令解释器的文档以获取具体细节。第 6.9 节,“环境变量”列出了影响 MySQL 程序操作的所有环境变量。

要为环境变量指定值,请使用适合您的命令处理器的语法。例如,在 Windows 上,您可以设置USER变量以指定您的 MySQL 帐户名。要这样做,请使用以下语法:

SET USER=*your_name*

Unix 上的语法取决于您的 shell。假设您想使用MYSQL_TCP_PORT变量指定 TCP/IP 端口号。典型的语法(例如对于sh,ksh,bash,zsh等)如下:

MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT

第一个命令设置变量,export命令将变量导出到 shell 环境,使其值对 MySQL 和其他进程可访问。

对于csh和tcsh,使用setenv使 shell 变量可用于环境:

setenv MYSQL_TCP_PORT 3306

设置环境变量的命令可以在命令提示符下立即生效,但设置仅在注销前有效。要使设置在每次登录时生效,请使用系统提供的界面或将适当的命令或命令放置在启动文件中,以便您的命令解释器每次启动时都会读取。

在 Windows 上,您可以使用系统控制面板(在高级选项下)设置环境变量。

在 Unix 上,典型的 shell 启动文件是.bashrc或.bash_profile对于bash,或.tcshrc对于tcsh。

假设您的 MySQL 程序安装在/usr/local/mysql/bin中,并且您希望轻松调用这些程序。为此,请将PATH环境变量的值设置为包含该目录。例如,如果您的 shell 是bash,请将以下行添加到您的.bashrc文件中:

PATH=${PATH}:/usr/local/mysql/bin

bash 对登录和非登录 shell 使用不同的启动文件,因此您可能希望为登录 shell 添加设置到.bashrc,而对于非登录 shell 添加到.bash_profile,以确保PATH被设置。

如果您的 shell 是tcsh,请将以下行添加到您的.tcshrc文件中:

setenv PATH ${PATH}:/usr/local/mysql/bin

如果您的家目录中不存在适当的启动文件,请使用文本编辑器创建它。

修改PATH设置后,在 Windows 上打开一个新的控制台窗口,或在 Unix 上重新登录,以使设置生效。

6.3 服务器和服务器启动程序

原文:dev.mysql.com/doc/refman/8.0/en/programs-server.html

6.3.1 mysqld — MySQL 服务器

6.3.2 mysqld_safe — MySQL 服务器启动脚本

6.3.3 mysql.server — MySQL 服务器启动脚本

6.3.4 mysqld_multi — 管理多个 MySQL 服务器

本节描述了mysqld,即 MySQL 服务器,以及用于启动服务器的几个程序。

6.3.1 mysqld — MySQL 服务器

原文:dev.mysql.com/doc/refman/8.0/en/mysqld.html

mysqld,也称为 MySQL 服务器,是一个单个多线程程序,它在 MySQL 安装中执行大部分工作。它不会生成其他进程。MySQL 服务器管理访问包含数据库和表的 MySQL 数据目录。数据目录也是其他信息(如日志文件和状态文件)的默认位置。

注意

一些安装包包含一个名为mysqld-debug的服务器调试版本。为了获得调试支持、内存分配检查和跟踪文件支持,请调用此版本(请参见第 7.9.1.2 节,“创建跟踪文件”),而不是mysqld。

当 MySQL 服务器启动时,它会监听来自客户端程序的网络连接,并代表这些客户端管理对数据库的访问。

mysqld程序有许多可以在启动时指定的选项。要查看完整的选项列表,请运行以下命令:

mysqld –verbose –help

MySQL 服务器还有一组影响其运行的系统变量。系统变量可以在服务器启动时设置,并且其中许多可以在运行时更改以影响动态服务器重新配置。MySQL 服务器还有一组提供有关其运行情况的状态变量的状态变量。您可以监视这些状态变量以访问运行时性能特征。

对于 MySQL 服务器命令选项、系统变量和状态变量的完整描述,请参见第 7.1 节,“MySQL 服务器”。有关安装 MySQL 和设置初始配置的信息,请参见第二章,“安装 MySQL”。

6.3.2 mysqld_safe — MySQL 服务器启动脚本

原文:dev.mysql.com/doc/refman/8.0/en/mysqld-safe.html

mysqld_safe 是在 Unix 上启动 mysqld 服务器的推荐方式。mysqld_safe 添加了一些安全功能,例如在发生错误时重新启动服务器并将运行时信息记录到错误日志中。本节稍后将介绍错误日志的描述。

注意

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括 systemd 支持以管理 MySQL 服务器的启动和关闭。在这些平台上,mysqld_safe 不会安装,因为这是不必要的。有关更多信息,请参见 Section 2.5.9, “使用 systemd 管理 MySQL 服务器”。

在使用 systemd 进行服务器管理的平台上不使用 mysqld_safe 的一个含义是,选项文件中使用 [mysqld_safe] 或 [safe_mysqld] 部分不受支持,可能导致意外行为。

mysqld_safe 尝试启动名为 mysqld 的可执行文件。要覆盖默认行为并明确指定要运行的服务器的名称,请在 mysqld_safe 中指定 –mysqld 或 –mysqld-version 选项。您还可以使用 –ledir 指示 mysqld_safe 应该查找服务器的目录。

许多 mysqld_safe 的选项与 mysqld 的选项相同。请参阅 Section 7.1.7, “服务器命令选项”。

对于 mysqld_safe 不认识的选项,如果在命令行中指定,则传递给 mysqld,但如果在选项文件的 [mysqld_safe] 组中指定,则会被忽略。请参阅 Section 6.2.2.2, “使用选项文件”。

mysqld_safe 从选项文件的 [mysqld]、[server] 和 [mysqld_safe] 部分读取所有选项。例如,如果您指定了像这样的 [mysqld] 部分,mysqld_safe 将找到并使用 –log-error 选项:

[mysqld]
log-error=error.log

为了向后兼容,mysqld_safe 还会读取 [safe_mysqld] 部分,但为了保持最新,您应该将这些部分重命名为 [mysqld_safe]。

mysqld_safe 接受命令行和选项文件中的选项,如下表所述。有关 MySQL 程序使用的选项文件的信息,请参见 6.2.2.2 使用选项文件。

表 6.7 mysqld_safe 选项

选项名称描述–basedirMySQL 安装目录的路径–core-file-sizemysqld 可以创建的核心文件大小–datadir数据目录的路径–defaults-extra-file除了通常的选项文件外,还读取指定的选项文件–defaults-file仅读取指定的选项文件–help显示帮助信息并退出–ledir服务器所在目录的路径–log-error将错误日志写入指定文件–malloc-lib用于 mysqld 的替代 malloc 库–mysqld要启动的服务器程序的名称(在 ledir 目录中)–mysqld-safe-log-timestamps用于日志记录的时间戳格式–mysqld-version服务器程序名称的后缀–nice使用 nice 程序设置服务器调度优先级–no-defaults不读取任何选项文件–open-files-limitmysqld 可以打开的文件数–pid-file服务器进程 ID 文件的路径名–plugin-dir安装插件的目录–port用于监听 TCP/IP 连接的端口号–skip-kill-mysqld不尝试终止多余的 mysqld 进程–skip-syslog不将错误消息写入 syslog;使用错误日志文件–socket用于监听 Unix 套接字连接的套接字文件–syslog将错误消息写入 syslog–syslog-tag写入 syslog 的消息标签后缀–timezone将 TZ 时区环境变量设置为指定值–user以用户名user_name或数字用户 IDuser_id运行 mysqld选项名称描述
–help

命令行格式–help显示帮助消息并退出。
–basedir=*dir_name*

命令行格式–basedir=dir_name类型目录名称MySQL 安装目录的路径。
–core-file-size=*size*

命令行格式–core-file-size=size类型字符串mysqld应该能够创建的核心文件大小。选项值传递给ulimit -c。
注意
innodb_buffer_pool_in_core_file变量可用于减小支持此功能的操作系统上核心文件的大小。有关更多信息,请参见第 17.8.3.7 节,“从核心文件中排除缓冲池页”。
–datadir=*dir_name*

命令行格式–datadir=dir_name类型目录名称数据目录的路径。
–defaults-extra-file=*file_name*

命令行格式–defaults-extra-file=file_name类型文件名除了通常的选项文件外,还读取此选项文件。如果文件不存在或无法访问,服务器将以错误退出。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录。如果使用此选项,它必须是命令行上的第一个选项。
有关此选项文件和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-file=*file_name*

命令行格式–defaults-file=file_name类型文件名仅使用给定的选项文件。如果文件不存在或无法访问,服务器将以错误退出。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录。如果使用此选项,它必须是命令行上的第一个选项。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–ledir=*dir_name*

命令行格式–ledir=dir_name类型目录名如果mysqld_safe找不到服务器,请使用此选项指示服务器所在目录的路径名。
此选项仅在命令行上接受,而不在选项文件中。在使用 systemd 的平台上,该值可以在MYSQLD_OPTS的值中指定。请参见第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
–log-error=*file_name*

命令行格式–log-error=file_name类型文件名将错误日志写入指定的文件。请参见第 7.4.2 节,“错误日志”。
–mysqld-safe-log-timestamps

命令行格式–mysqld-safe-log-timestamps=type类型枚举默认值utc有效值system“hyphen“legacy此选项控制由mysqld_safe生成的日志输出中的时间戳格式。以下列表描述了允许的值。对于任何其他值,mysqld_safe会记录警告并使用UTC格式。

UTC, 协调世界时
ISO 8601 UTC 格式(与服务器的–log_timestamps=UTC相同)。这是默认值。
SYSTEM, 系统
ISO 8601 本地时间格式(与服务器的–log_timestamps=SYSTEM相同)。
HYPHEN, 连字符
YY-MM-DD h:mm:ss 格式,如mysqld_safe用于 MySQL 5.6。
LEGACY, 传统
YYMMDD hh:mm:ss 格式,如mysqld_safe在 MySQL 5.6 之前。
–malloc-lib=[*lib_name*]

命令行格式–malloc-lib=[lib-name]类型字符串用于内存分配的库的名称,而不是系统的malloc()库。选项值必须是目录之一/usr/lib,/usr/lib64,/usr/lib/i386-linux-gnu或/usr/lib/x86_64-linux-gnu。
–malloc-lib选项通过修改LD_PRELOAD环境值来影响动态链接,以便加载程序在运行时找到内存分配库:

如果未提供该选项,或者提供的值为空(–malloc-lib=),则不会修改LD_PRELOAD,也不会尝试使用tcmalloc。
在 MySQL 8.0.21 之前,如果选项给定为–malloc-lib=tcmalloc,mysqld_safe将在/usr/lib中查找tcmalloc库。如果找到tmalloc,则将其路径名添加到mysqld的LD_PRELOAD值的开头。如果未找到tcmalloc,mysqld_safe将因错误而中止。
截至 MySQL 8.0.21,tcmalloc不是–malloc-lib选项的允许值。
如果选项给定为–malloc-lib=*/path/to/some/library*,则该完整路径将添加到LD_PRELOAD值的开头。如果完整路径指向不存在或不可读文件,则mysqld_safe将因错误而中止。
对于mysqld_safe添加路径名到LD_PRELOAD的情况,它将路径添加到变量已有值的开头。
注意
在使用 systemd 管理服务器的系统上,mysqld_safe不可用。相反,通过在/etc/sysconfig/mysql中设置LD_PRELOAD来指定分配库。
Linux 用户可以通过将以下行添加到my.cnf文件,在任何已安装tcmalloc包的/usr/lib平台上使用libtcmalloc_minimal.so库:
[mysqld_safe]
malloc-lib=tcmalloc
要使用特定的tcmalloc库,请指定其完整路径名。示例:
[mysqld_safe]
malloc-lib=/opt/lib/libtcmalloc_minimal.so
–mysqld=*prog_name*

命令行格式–mysqld=file_name类型文件名你想要启动的服务器程序的名称(在ledir目录中)。如果你使用 MySQL 二进制发行版但数据目录在二进制发行版之外,则需要此选项。如果mysqld_safe找不到服务器,请使用–ledir选项指示服务器所在目录的路径名。
此选项仅在命令行上接受,而不在选项文件中接受。在使用 systemd 的��台上,该值可以在MYSQLD_OPTS的值中指定。请参阅第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
–mysqld-version=*suffix*

命令行格式–mysqld-version=suffix类型字符串此选项类似于–mysqld选项,但您只需指定服务器程序名称的后缀。基本名称假定为mysqld。例如,如果您使用–mysqld-version=debug,mysqld_safe将在ledir目录中启动mysqld-debug程序。如果–mysqld-version的参数为空,mysqld_safe将在ledir目录中使用mysqld。
此选项仅在命令行上接受,而不在选项文件中接受。在使用 systemd 的平台上,该值可以在MYSQLD_OPTS的值中指定。请参阅第 2.5.9 节,“使用 systemd 管理 MySQL 服务器”。
–nice=*priority*

命令行格式–nice=priority类型数字使用nice程序将服务器的调度优先级设置为给定值。
–no-defaults

命令行格式–no-defaults类型字符串不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,则可以使用–no-defaults来防止它们被读取。如果使用此选项,它必须是命令行上的第一个选项。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–open-files-limit=*count*

命令行格式–open-files-limit=count类型字符串mysqld应该能够打开的文件数。选项值传递给ulimit -n。
注意
你必须以root身份启动mysqld_safe才能使其正常运行。
–pid-file=*file_name*

命令行格式–pid-file=file_name类型文件名mysqld应该用于其进程 ID 文件的路径名。
–plugin-dir=*dir_name*

命令行格式–plugin-dir=dir_name类型目录名插件目录的路径名。
–port=*port_num*

命令行格式–port=number类型数字服务器在监听 TCP/IP 连接时应该使用的端口号。端口号必须是 1024 或更高,除非服务器由root操作系统用户启动。
–skip-kill-mysqld

命令行格式–skip-kill-mysqld不要在启动时尝试终止无关的mysqld进程。此选项仅在 Linux 上有效。
–socket=*path*

命令行格式–socket=file_name类型文件名服务器在监听本地连接时应该使用的 Unix 套接字文件。
–syslog, –skip-syslog

命令行格��–syslog已弃用是命令行格式–skip-syslog已弃用是–syslog导致错误消息被发送到支持logger程序的syslog。–skip-syslog抑制了syslog的使用;消息被写入错误日志文件。
当使用syslog进行错误日志记录时,daemon.err设施/严重性用于所有日志消息。
使用这些选项来控制mysqld的日志记录已经被弃用。要将错误日志输出写入系统日志,请使用第 7.4.2.8 节,“将错误日志记录到系统日志”中的说明。要控制设施,请使用服务器log_syslog_facility系统变量。
–syslog-tag=*tag*

命令行格式–syslog-tag=tag已弃用是对于写入syslog的日志,来自mysqld_safe和mysqld的消息分别带有mysqld_safe和mysqld的标识符。要为这些标识符指定后缀,请使用–syslog-tag=*tag*,这将修改标识符为mysqld_safe-*tag*和mysqld-*tag*。
使用这个选项来控制mysqld的日志记录已被弃用。请使用服务器的log_syslog_tag系统变量。参见 Section 7.4.2.8, “Error Logging to the System Log”.
–timezone=*timezone*

命令行格式–timezone=timezone类型字符串将TZ时区环境变量设置为给定的选项值。请查阅您的操作系统文档以获取合法的时区规范格式。
–user={*user_name*|*user_id*}

命令行格式–user={user_name|user_id}类型字符串类型数值以*user_name*或数字用户 ID *user_id*的名称运行mysqld服务器。(这里的“用户”指的是系统登录帐户,而不是在授权表中列出的 MySQL 用户。)

如果你使用–defaults-file或–defaults-extra-file选项来执行mysqld_safe来命名一个选项文件,那么这个选项必须是命令行中给出的第一个选项,否则选项文件将不会被使用。例如,以下命令不会使用指定的选项文件:

mysql> mysqld_safe –port=*port_num* –defaults-file=*file_name*

相反,请使用以下命令:

mysql> mysqld_safe –defaults-file=*file_name* –port=*port_num*

mysqld_safe脚本被编写成通常可以启动从 MySQL 源或二进制发行版安装的服务器,即使这些类型的发行版通常会将服务器安装在略有不同的位置。(参见 Section 2.1.5, “Installation Layouts”.)mysqld_safe期望以下条件之一为真:

服务器和数据库可以相对于工作目录(从中调用mysqld_safe的目录)找到。对于二进制发行版,mysqld_safe在其工作目录下查找bin和data目录。对于源代码发行版,它查找libexec和var目录。如果您从 MySQL 安装目录(例如,对于二进制发行版为/usr/local/mysql)执行mysqld_safe,则应满足此条件。
如果服务器和数据库无法相对于工作目录找到,mysqld_safe将尝试通过绝对路径名来定位它们。典型位置是/usr/local/libexec和/usr/local/var。实际位置是根据构建时配置到发行版中的值确定的。如果 MySQL 安装在配置时指定的位置,则它们应该是正确的。

因为mysqld_safe试图相对于自己的工作目录找到服务器和数据库,所以您可以在任何地方安装 MySQL 的二进制发行版,只要您从 MySQL 安装目录运行mysqld_safe:

cd *mysql_installation_directory*
bin/mysqld_safe &

如果mysqld_safe失败,即使从 MySQL 安装目录调用,也要指定–ledir和–datadir选项,以指示服务器和数据库在系统中的位置。

mysqld_safe尝试使用sleep和date系统实用程序来确定每秒尝试启动的次数。如果这些实用程序存在,并且每秒尝试启动次数大于 5,mysqld_safe在再次启动之前等待 1 秒。这旨在防止在重复失败的情况下出现过多的 CPU 使用率。(Bug #11761530,Bug #54035)

当您使用mysqld_safe启动mysqld时,mysqld_safe会安排来自自身和mysqld的错误(和通知)消息发送到相同的目的地。

有几个用于控制这些消息目的地的mysqld_safe选项:

–log-error=*file_name*: 将错误消息写入指定的错误文件。
–syslog: 将错误消息写入支持logger程序的syslog系统。
–skip-syslog: 不将错误消息写入syslog。消息将被写入默认的错误日志文件(数据目录中的*host_name*.err),或者如果给定–log-error选项,则写入指定的文件。

如果没有给出这些选项中的任何一个,则默认为–skip-syslog。

当mysqld_safe写入消息时,通知会发送到日志目的地(syslog或错误日志文件)和stdout。错误会发送到日志目的地和stderr。

注意

从mysqld_safe控制mysqld日志记录已被弃用。请改用服务器的本机syslog支持。有关更多信息,请参见第 7.4.2.8 节,“将错误日志记录到系统日志”。

6.3.3 mysql.server — MySQL Server Startup Script

原文:dev.mysql.com/doc/refman/8.0/en/mysql-server.html

Unix 和类 Unix 系统上的 MySQL 发行版包含一个名为mysql.server的脚本,它使用mysqld_safe启动 MySQL 服务器。它可以在使用 System V 风格运行目录启动和停止系统服务的系统上使用,例如 Linux 和 Solaris。它还被 macOS 的 MySQL 启动项使用。

mysql.server是 MySQL 源代码树中使用的脚本名称。安装后的名称可能不同(例如,mysqld或mysql)。在下面的讨论中,根据您的系统调整名称mysql.server。

注意

对于某些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包括 systemd 支持以管理 MySQL 服务器的启动和关闭。在这些平台上,不安装mysql.server和mysqld_safe,因为它们是不必要的。有关更多信息,请参见 Section 2.5.9, “使用 systemd 管理 MySQL 服务器”。

要手动启动或停止服务器,可以使用mysql.server脚本,在命令行中使用start或stop参数调用它:

mysql.server start
mysql.server stop

mysql.server将位置更改为 MySQL 安装目录,然后调用mysqld_safe。要以某个特定用户身份运行服务器,请在全局/etc/my.cnf选项文件的[mysqld]组中添加适当的user选项,如本节后面所示。(如果您在非标准位置安装了 MySQL 的二进制发行版,则可能必须编辑mysql.server。修改它以在运行mysqld_safe之前将位置更改为正确的目录。如果这样做,您修改过的mysql.server版本可能会在将来升级 MySQL 时被覆盖;请制作一个您可以重新安装的编辑过的版本的副本。)

mysql.server stop 通过向服务器发送信号来停止服务器。你也可以通过执行mysqladmin shutdown来手动停止服务器。

要在服务器上自动启动和停止 MySQL,你必须在/etc/rc*文件的适当位置添加启动和停止命令:

如果你使用 Linux 服务器 RPM 包(MySQL-server-*VERSION*.rpm),或者本机 Linux 包安装,mysql.server 脚本可能会安装在/etc/init.d目录中,名称为mysqld或mysql。有关 Linux RPM 包的更多信息,请参阅第 2.5.4 节,“使用 Oracle 的 RPM 包在 Linux 上安装 MySQL”。
如果你从源分发或使用不会自动安装mysql.server的二进制分发格式安装 MySQL,你可以手动安装该脚本。它可以在 MySQL 安装目录的support-files目录下或 MySQL 源代码树中找到。将脚本复制到/etc/init.d目录中,并命名为mysql,然后使其可执行:
cp mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysql
安装脚本后,激活它以在系统启动时运行所需的命令取决于你的操作系统。在 Linux 上,你可以使用 chkconfig:
chkconfig –add mysql
在一些 Linux 系统上,似乎还需要以下命令才能完全启用mysql 脚本:
chkconfig –level 345 mysql on
在 FreeBSD 上,启动脚本通常应放在/usr/local/etc/rc.d/中。将mysql.server脚本安装为/usr/local/etc/rc.d/mysql.server.sh以启用自动启动。rc(8)手册页指出,此目录中的脚本仅在其基本名称与*.sh shell 文件名模式匹配时才会执行。目录中存在的任何其他文件或目录都会被静默忽略。
作为前述设置的替代方案,一些操作系统还使用/etc/rc.local或/etc/init.d/boot.local在启动时启动其他服务。要使用这种方法启动 MySQL,将类似以下命令附加到适当的启动文件中:
/bin/sh -c \’cd /usr/local/mysql; ./bin/mysqld_safe –user=mysql &\’
对于其他系统,请查阅操作系统文档以了解如何安装启动脚本。

mysql.server 从选项文件的[mysql.server]和[mysqld]部分读取选项。为了向后兼容,它还会读取[mysql_server]部分,但为了保持最新,你应该将这些部分重命名为[mysql.server]。

您可以在全局 /etc/my.cnf 文件中为 mysql.server 添加选项。典型的 my.cnf 文件可能如下所示:

[mysqld]
datadir=/usr/local/mysql/var
socket=/var/tmp/mysql.sock
port=3306
user=mysql
[mysql.server]
basedir=/usr/local/mysql

mysql.server 脚本支持以下表中显示的选项。如果指定,它们必须放在选项文件中,而不是在命令行上。mysql.server 仅支持 start 和 stop 作为命令行参数。

表 6.8 mysql.server 选项文件选项

选项名称描述类型basedirMySQL 安装目录的路径目录名datadirMySQL 数据目录的路径目录名pid-file服务器应将其进程 ID 写入的文件文件名service-startup-timeout等待服务器启动的时间整数
basedir=*dir_name*
MySQL 安装目录的路径。
datadir=*dir_name*
MySQL 数据目录的路径。
pid-file=*file_name*
服务器应将其进程 ID 写入的文件的路径名。除非给定绝对路径名以指定不同目录,否则服务器将在数据目录中创建该文件。
如果未提供此选项,mysql.server 使用默认值 *host_name*.pid。传递给 mysqld_safe 的 PID 文件值会覆盖在 [mysqld_safe] 选项文件组中指定的任何值。因为 mysql.server 读取 [mysqld] 选项文件组而不是 [mysqld_safe] 组,您可以确保在从 mysql.server 调用时与手动调用时放置相同的 pid-file 设置在 [mysqld_safe] 和 [mysqld] 组中,以确保 mysqld_safe 获得相同的值。
service-startup-timeout=*seconds*
等待服务器启动确认的秒数。如果服务器在此时间内未启动,mysql.server 将以错误退出。默认值为 900。值为 0 表示根本不等待启动。负值表示永远等待(无超时)。

6.3.4 mysqld_multi — 管理多个 MySQL 服务器

原文:dev.mysql.com/doc/refman/8.0/en/mysqld-multi.html

mysqld_multi旨在管理监听不同 Unix 套接字文件和 TCP/IP 端口上的连接的多个mysqld进程。它可以启动或停止服务器,或报告它们的当前状态。

注意

对于一些 Linux 平台,从 RPM 或 Debian 软件包安装 MySQL 包含 systemd 支持来管理 MySQL 服务器的启动和关闭。在这些平台上,因为不需要,所以不安装mysqld_multi。有关使用 systemd 处理多个 MySQL 实例的信息,请参阅 Section 2.5.9,“使用 systemd 管理 MySQL 服务器”。

mysqld_multi在my.cnf(或由–defaults-file选项指定的文件)中搜索名为[mysqld*N*]的组。N可以是任何正整数。在以下讨论中,这个数字被称为选项组号,或GNR。组号将选项组彼此区分开,并用作传递给mysqld_multi的参数,以指定要启动、停止或获取状态报告的服务器。在这些组中列出的选项与用于启动mysqld的[mysqld]组中使用的选项相同。(例如,参见 Section 2.9.5,“自动启动和停止 MySQL”。)但是,在使用多个服务器时,每个服务器必须使用自己的值来设置选项,例如 Unix 套接字文件和 TCP/IP 端口号。有关在多服务器环境中哪些选项必须对每个服务器唯一的更多信息,请参阅 Section 7.8,“在一台机器上运行多个 MySQL 实例”。

要调用mysqld_multi,请使用以下语法:

mysqld_multi [*options*] {start|stop|reload|report} [*GNR*[,*GNR*] …]

start、stop、reload(停止和重新启动)和report表示要执行的操作。您可以根据接下来的*GNR*列表为单个服务器或多个服务器执行指定的操作。如果没有列表,mysqld_multi将为选项文件中的所有服务器执行操作。

每个*GNR值代表一个选项组编号或一组组编号。该值应为选项文件中组名称末尾的数字。例如,名为[mysqld17]的组的GNR为17。要指定一系列数字,请用短横线分隔第一个和最后一个数字。GNR值10-13代表组[mysqld10]到[mysqld13]。可以在命令行上指定多个组或组范围,用逗号分隔。GNR*列表中不能有空白字符(空格或制表符);空白字符后的任何内容都将被忽略。

此命令启动单个服务器,使用选项组[mysqld17]:

mysqld_multi start 17

此命令停止多个服务器,使用选项组[mysqld8]和[mysqld10]到[mysqld13]:

mysqld_multi stop 8,10-13

要了解如何设置选项文件的示例,请使用此命令:

mysqld_multi –example

mysqld_multi按以下方式搜索选项文件:

使用–no-defaults,不会读取任何选项文件。

命令行格式–no-defaults类型布尔值默认值false 使用–defaults-file=*file_name*,只读取指定的文件。

命令行格式–defaults-file=filename类型文件名默认值[none] 否则,将读取标准位置列表中的选项文件,包括由–defaults-extra-file=*file_name*选项指定的任何文件。(如果该选项多次给出,则使用最后一个值。)

命令行格式–defaults-extra-file=filename类型文件名默认值[none]
有关这些和其他选项文件选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。

读取的选项文件将搜索[mysqld_multi]和[mysqld*N*]选项组。[mysqld_multi]组可用于为mysqld_multi本身设置选项。[mysqld*N*]组可用于传递给特定mysqld实例的选项。

[mysqld]或[mysqld_safe]组可用于所有mysqld或mysqld_safe实例共同读取的常见选项。您可以指定一个–defaults-file=*file_name*选项,以使用不同的配置文件来为该实例设置选项,在这种情况下,该文件中的[mysqld]或[mysqld_safe]组将用于该实例。

mysqld_multi支持以下选项。

–help

命令行格式–help类型布尔值默认值false显示帮助消息并退出。
–example

命令行格式–example类型布尔值默认值false显示一个示例选项文件。
–log=*file_name*

命令行格式–log=path类型文件名默认值/var/log/mysqld_multi.log指定日志文件的名称。如果文件存在,则日志输出将附加到其中。
–mysqladmin=*prog_name*

命令行格式–mysqladmin=file类型文件名默认值[none]要用于停止服务器的mysqladmin二进制文件。
–mysqld=*prog_name*

命令行格式–mysqld=file类型文件名默认值[none]要使用的mysqld二进制文件。请注意,您还可以指定mysqld_safe作为此选项的值。如果您使用mysqld_safe启动服务器,您可以在相应的[mysqld*N*]选项组中包含mysqld或ledir选项。这些选项指示mysqld_safe应启动的服务器名称以及服务器所在目录的路径名。(请参阅第 6.3.2 节,“mysqld_safe — MySQL 服务器启动脚本”中这些选项的描述。)示例:
[mysqld38]
mysqld = mysqld-debug
ledir = /opt/local/mysql/libexec
–no-log

命令行格式–no-log类型布尔值默认值false将日志信息打印到stdout而不是日志文件。默认情况下,输出会写入日志文件。
–password=*password*

命令行格式–password=string类型字符串默认值[none]用于调用mysqladmin时要使用的 MySQL 帐户的密码。请注意,与其他 MySQL 程序不同,此选项的密码值是必需的。
–silent

命令行格式–silent类型布尔值默认值false静默模式;禁用警告。
–tcp-ip

命令行格式–tcp-ip类型布尔值默认值false通过 TCP/IP 端口连接到每个 MySQL 服务器,而不是通过 Unix 套接字文件。 (如果套接字文件丢失,则服务器可能仍在运行,但只能通过 TCP/IP 端口访问。)默认情况下,连接是使用 Unix 套接字文件进行的。此选项会影响stop和report操作。
–user=*user_name*

命令行格式–user=name类型字符串默认值root在调用mysqladmin时要使用的 MySQL 帐户的用户名。
–verbose

命令行格式–verbose类型布尔值默认值false更加详细。
–version

命令行格式–version类型布尔值默认值false显示版本信息并退出。

有关mysqld_multi的一些注意事项:

最重要的事项:在使用mysqld_multi之前,请确保您理解传递给mysqld服务器的选项的含义以及为什么您希望拥有单独的mysqld进程。注意使用具有相同数据目录的多个mysqld服务器的危险。除非你知道你在做什么,否则请使用单独的数据目录。在线程系统中,使用具有相同数据目录的多个服务器并不会提供额外的性能。参见 Section 7.8, “Running Multiple MySQL Instances on One Machine”。
重要提示
确保每个服务器的数据目录对于启动特定mysqld进程的 Unix 帐户是完全可访问的。不要使用 Unix 的 root 帐户进行此操作,除非你知道你在做什么。参见 Section 8.1.5, “How to Run MySQL as a Normal User”。
确保用于停止mysqld服务器(使用mysqladmin程序)的 MySQL 帐户对于每个服务器都具有相同的用户名和密码。此外,请确保该帐户具有SHUTDOWN权限。如果您要管理的服务器具有不同的管理帐户的用户名或密码,您可能希望在每个服务器上创建一个具有相同用户名和密码的帐户。例如,您可以通过为每个服务器执行以下命令来设置一个共同的multi_admin帐户:
$> mysql -u root -S /tmp/mysql.sock -p
Enter password:
mysql> CREATE USER \’multi_admin\’@\’localhost\’ IDENTIFIED BY \’multipass\’;
mysql> GRANT SHUTDOWN ON *.* TO \’multi_admin\’@\’localhost\’;
参见第 8.2 节“访问控制和帐户管理”。您必须为每个mysqld服务器执行此操作。在连接到每个服务器时,请适当更改连接参数。请注意,帐户名的主机名部分必须允许您从要运行mysqld_multi的主机连接为multi_admin。
Unix 套接字文件和 TCP/IP 端口号必须对于每个mysqld都不同。(或者,如果主机有多个网络地址,您可以设置bind_address系统变量,使不同的服务器监听不同的接口。)
如果您使用mysqld_safe启动mysqld(例如,–mysqld=mysqld_safe),那么–pid-file选项非常重要。每个mysqld都应该有自己的进程 ID 文件。使用mysqld_safe而不是mysqld的优势在于,mysqld_safe监视其mysqld进程,并在进程因使用kill -9发送信号或由于其他原因(如分段错误)终止时重新启动它。
您可能想要为mysqld使用–user选项,但要这样做,您需要以 Unix 超级用户(root)身份运行mysqld_multi脚本。在选项文件中有这个选项并不重要;如果您不是超级用户并且mysqld进程在您自己的 Unix 帐户下启动,您只会收到警告。

以下示例显示了如何为与mysqld_multi一起使用的选项文件进行设置。mysqld程序启动或停止的顺序取决于它们在选项文件中出现的顺序。组号不需要形成连续的序列。示例中故意省略了第一个和第五个[mysqld*N*]组,以说明选项文件中可以有“间隙”。这样可以提供更多的灵活性。

# This is an example of a my.cnf file for mysqld_multi.
# Usually this file is located in home dir ~/.my.cnf or /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = multi_admin
password = my_password
[mysqld2]
socket = /tmp/mysql.sock2
port = 3307
pid-file = /usr/local/mysql/data2/hostname.pid2
datadir = /usr/local/mysql/data2
language = /usr/local/mysql/share/mysql/english
user = unix_user1
[mysqld3]
mysqld = /path/to/mysqld_safe
ledir = /path/to/mysqld-binary/
mysqladmin = /path/to/mysqladmin
socket = /tmp/mysql.sock3
port = 3308
pid-file = /usr/local/mysql/data3/hostname.pid3
datadir = /usr/local/mysql/data3
language = /usr/local/mysql/share/mysql/swedish
user = unix_user2
[mysqld4]
socket = /tmp/mysql.sock4
port = 3309
pid-file = /usr/local/mysql/data4/hostname.pid4
datadir = /usr/local/mysql/data4
language = /usr/local/mysql/share/mysql/estonia
user = unix_user3
[mysqld6]
socket = /tmp/mysql.sock6
port = 3311
pid-file = /usr/local/mysql/data6/hostname.pid6
datadir = /usr/local/mysql/data6
language = /usr/local/mysql/share/mysql/japanese
user = unix_user4

参见第 6.2.2.2 节,“使用选项文件”。

6.4 与安装相关的程序

原文:dev.mysql.com/doc/refman/8.0/en/programs-installation.html

6.4.1 comp_err — 编译 MySQL 错误消息文件

6.4.2 mysql_secure_installation — 提高 MySQL 安装安全性

6.4.3 mysql_ssl_rsa_setup — 创建 SSL/RSA 文件

6.4.4 mysql_tzinfo_to_sql — 加载时区表

6.4.5 mysql_upgrade — 检查并升级 MySQL 表

本节中的程序用于安装或升级 MySQL。

6.4.1 comp_err — 编译 MySQL 错误消息文件

原文:dev.mysql.com/doc/refman/8.0/en/comp-err.html

comp_err 创建了 errmsg.sys 文件,该文件被 mysqld 用来确定不同错误代码的错误消息显示。comp_err 通常在构建 MySQL 时会自动运行。它从 MySQL 源代码分发中的文本格式错误信息编译 errmsg.sys 文件:

截至 MySQL 8.0.19,错误信息来自 share 目录中的 messages_to_error_log.txt 和 messages_to_clients.txt 文件。
要了解更多关于定义错误消息的信息,请参阅这些文件中的注释,以及 errmsg_readme.txt 文件。
在 MySQL 8.0.19 之前,错误信息来自 sql/share 目录中的 errmsg-utf8.txt 文件。

comp_err 还生成 mysqld_error.h、mysqld_ername.h 和 mysqld_errmsg.h 头文件。

调用 comp_err 如下:

comp_err [*options*]

comp_err 支持以下选项。

–help, -?

命令行格式–help类型布尔默认值false显示帮助消息并退出。
–charset=*dir_name*, -C *dir_name*

命令行格式–charset类型字符串默认值../share/charsets字符集目录。默认为 ../sql/share/charsets。
–debug=*debug_options*, -# *debug_options*

命令行格式–debug=options类型字符串默认值d:t:O,/tmp/comp_err.trace写入调试日志。典型的 debug_options 字符串是 d:t:O,*file_name*。默认为 d:t:O,/tmp/comp_err.trace。
–debug-info, -T

命令行格式–debug-info类型布尔默认值false程序退出时打印一些调试信息。
–errmsg-file=*file_name*, -H *file_name*

命令行格式–errmsg-file=name类型文件名默认值mysqld_errmsg.h错误消息文件的名称。默认为 mysqld_errmsg.h。此选项在 MySQL 8.0.18 中添加。
–header-file=*file_name*, -H *file_name*

命令行格式–header-file=name类型文件名默认值mysqld_error.h错误头文件的名称。默认为 mysqld_error.h。
–in-file=*file_name*, -F *file_name*

命令行格式–in-file=path类型文件名默认值[none]输入文件的名称。默认值为 ../share/errmsg-utf8.txt。
此选项在 MySQL 8.0.19 中被移除,并由 –in-file-errlog 和 –in-file-toclient 选项替代。
–in-file-errlog=*file_name*, -e *file_name*

命令行格式–in-file-errlog类型文件名默认值../share/messages_to_error_log.txt定义要写入错误日志的错误消息的输入文件名。默认值为 ../share/messages_to_error_log.txt。
此选项在 MySQL 8.0.19 中添加。
–in-file-toclient=*file_name*, -c *file_name*

命令行格式–in-file-toclient=path类型文件名默认值../share/messages_to_clients.txt定义要写入客户端的错误消息的输入文件名。默认值为 ../share/messages_to_clients.txt。
此选项在 MySQL 8.0.19 中添加。
–name-file=*file_name*, -N *file_name*

命令行格式–name-file=name类型文件名默认值mysqld_ername.h错误名称文件的名称。默认值为 mysqld_ername.h。
–out-dir=*dir_name*, -D *dir_name*

命令行格式–out-dir=path类型字符串默认值../share/输出基本目录的名称。默认值为 ../sql/share/。
–out-file=*file_name*, -O *file_name*

命令行格式–out-file=name类型文件名默认值errmsg.sys输出文件的名称。默认值为 errmsg.sys。
–version, -V

命令行格式–version类型布尔值默认值false显示版本信息并退出。

6.4.2 mysql_secure_installation — 改善 MySQL 安装安全性

译文:dev.mysql.com/doc/refman/8.0/en/mysql-secure-installation.html

该程序使您能够通过以下方式改善 MySQL 安装的安全性:

您可以为root帐户设置密码。
您可以删除可以从本地主机外部访问的root帐户。
您可以删除匿名用户帐户。
您可以删除test数据库(默认情况下可以被所有用户访问,甚至是匿名用户),以及允许任何人访问以test_开头的数据库的权限。

mysql_secure_installation帮助您实施类似于第 2.9.4 节“保护初始 MySQL 帐户”中描述的安全建议。

正常使用是连接到本地 MySQL 服务器;无参数调用mysql_secure_installation:

mysql_secure_installation

当执行时,mysql_secure_installation会提示您确定要执行哪些操作。

validate_password组件可用于检查密码强度。如果未安装插件,mysql_secure_installation会提示用户是否安装。稍后输入的任何密码如果启用插件,则会使用插件进行检查。

大多数常见的 MySQL 客户端选项,如–host和–port可以在命令行和选项文件中使用。例如,要连接到本地服务器的 IPv6 端口 3307,请使用以下命令:

mysql_secure_installation –host=::1 –port=3307

mysql_secure_installation支持以下选项,可以在命令行或选项文件的[mysql_secure_installation]和[client]组中指定。有关 MySQL 程序使用的选项文件的信息,请参见第 6.2.2.2 节“使用选项文件”。

表 6.9 mysql_secure_installation 选项

选项名称描述引入废弃–defaults-extra-file读取指定的选项文件以及通常的选项文件–defaults-file仅读取指定的选项文件–defaults-group-suffix选项组后缀值–help显示帮助信息并退出–hostMySQL 服务器所在的主机–no-defaults不读取任何选项文件–password被接受但始终被忽略。每当调用 mysql_secure_installation 时,用户都会被提示输入密码–port连接的 TCP/IP 端口号–print-defaults打印默认选项–protocol要使用的传输协议–socket要使用的 Unix 套接字文件或 Windows 命名管道–ssl-ca包含受信任的 SSL 证书颁发机构列表的文件–ssl-capath包含受信任的 SSL 证书颁发机构证书文件的目录–ssl-cert包含 X.509 证书的文件–ssl-cipher连接加密的允许密码–ssl-crl包含证书吊销列表的文件–ssl-crlpath包含证书吊销列表文件的目录–ssl-fips-mode是否在客户端启用 FIPS 模式8.0.34–ssl-key包含 X.509 密钥的文件–ssl-mode与服务器连接的期望安全状态–ssl-session-data包含 SSL 会话数据的文件8.0.29–ssl-session-data-continue-on-failed-reuse是否在会话重用失败时建立连接8.0.29–tls-ciphersuites用于加密连接的允许的 TLSv1.3 密码套件8.0.16–tls-version用于加密连接的允许的 TLS 协议–use-default无需用户交互执行–user连接到服务器时要使用的 MySQL 用户名选项名称描述引入废弃
–help, -?

命令行格式–help显示帮助消息并退出。
–defaults-extra-file=*file_name*

命令行格式–defaults-extra-file=file_name类型文件名在全局选项文件之后但(在 Unix 上)在用户选项文件之前读取此选项文件。如果文件不存在或无法访问,将会出现错误。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录的路径。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-file=*file_name*

命令行格式–defaults-file=file_name类型文件名仅使用给定的选项文件。如果文件不存在或无法访问,将会出现错误。如果*file_name*不是绝对路径名,则将其解释为相对于当前目录的路径。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–defaults-group-suffix=*str*

命令行格式–defaults-group-suffix=str类型字符串不仅读取通常的选项组,还读取具有通常名称和后缀*str*的组。例如,mysql_secure_installation通常会读取[client]和[mysql_secure_installation]组。如果将此选项指定为–defaults-group-suffix=_other,mysql_secure_installation还会读取[client_other]和[mysql_secure_installation_other]组。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–host=*host_name*, -h *host_name*

命令行格式–host连接到给定主机上的 MySQL 服务器。
–no-defaults

命令行格式–no-defaults不要读取任何选项文件。如果由于从选项文件中读取未知选项而导致程序启动失败,可以使用–no-defaults来防止读取它们。
例外情况是,无论何时都会读取.mylogin.cnf文件(如果存在)。即使使用–no-defaults,这允许以比在命令行上更安全的方式指定密码。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。请参见第 6.6.7 节,“mysql_config_editor — MySQL 配置实用程序”。
有关此选项和其他选项文件选项的更多信息,请参见第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–password=*password*, -p *password*

命令行格式–password=password类型字符串默认值[none]此选项被接受但被忽略。无论是否使用此选项,mysql_secure_installation始终提示用户输入密码。
–port=*port_num*, -P *port_num*

命令行格式–port=port_num类型数值默认值3306对于 TCP/IP 连接,要使用的端口号。
–print-defaults

命令行格式–print-defaults打印程序名称以及从选项文件获取的所有选项。
有关此选项和其他选项文件选项的更多信息,请参阅第 6.2.2.3 节,“影响选项文件处理的命令行选项”。
–protocol={TCP|SOCKET|PIPE|MEMORY}

命令行格式–protocol=type类型字符串默认值[见文本]有效值TCP“SOCKET“PIPE“MEMORY用于连接到服务器的传输协议。当其他连接参数通常导致使用不同于您想要的协议时,这很有用。有关允许值的详细信息,请参阅第 6.2.7 节,“连接传输协议”。
–socket=*路径*, -S *路径*

命令行格式–socket={file_name|pipe_name}类型字符串对于连接到localhost的连接,使用的 Unix 套接字文件,或者在 Windows 上使用的命名管道的名称。
在 Windows 上,此选项仅在服务器启动时启用了支持命名管道连接的named_pipe系统变量时才适用。此外,连接必须是由named_pipe_full_access_group系统变量指定的 Windows 组的成员。
–ssl*
以–ssl开头的选项指定是否使用加密连接到服务器,并指示 SSL 密钥和证书的位置。请参阅加密连接的命令选项。
–ssl-fips-mode={OFF|ON|STRICT}

命令行格式–ssl-fips-mode={OFF|ON|STRICT}已弃用8.0.34类型枚举默认值OFF有效值OFF“ON“STRICT控制是否在客户端启用 FIPS 模式。–ssl-fips-mode选项与其他–ssl-*xxx*选项不同,它不用于建立加密连接,而是用于影响允许的加密操作。请参阅第 8.8 节,“FIPS 支持”。
允许使用这些–ssl-fips-mode值:

OFF: 禁用 FIPS 模式。
ON: 启用 FIPS 模式。
STRICT: 启用“严格” FIPS 模式。
注意
如果 OpenSSL FIPS 对象模块不可用,–ssl-fips-mode 的唯一允许值为 OFF。在这种情况下,将 –ssl-fips-mode 设置为 ON 或 STRICT 会导致客户端在启动时产生警告并在非 FIPS 模式下运行。
从 MySQL 8.0.34 开始,此选项已被弃用。预计在将来的 MySQL 版本中将其移除。
–tls-ciphersuites=*ciphersuite_list*

命令行格式–tls-ciphersuites=ciphersuite_list引入版本8.0.16类型字符串用于使用 TLSv1.3 的加密连接的允许的密码套件。该值是一个或多个以冒号分隔的密码套件名称列表。可以为此选项命名的密码套件取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
此选项是在 MySQL 8.0.16 中添加的。
–tls-version=*protocol_list*

命令行格式–tls-version=protocol_list类型字符串默认值 (≥ 8.0.16)TLSv1,TLSv1.1,TLSv1.2,TLSv1.3 (OpenSSL 1.1.1 或更高版本)TLSv1,TLSv1.1,TLSv1.2 (否则)默认值 (≤ 8.0.15)TLSv1,TLSv1.1,TLSv1.2用于加密连接的允许的 TLS 协议。该值是一个或多个逗号分隔的协议名称列表。可以为此选项命名的协议取决于用于编译 MySQL 的 SSL 库。有关详细信息,请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。
–use-default

命令行格式–use-default类型布尔值非交互执行。此选项可用于无人值守安装操作。
–user=*user_name*, -u *user_name*

命令行格式–user=user_name类型字符串用于连接到服务器的 MySQL 帐户的用户名。

6.4.3 mysql_ssl_rsa_setup — 创建 SSL/RSA 文件

原文:dev.mysql.com/doc/refman/8.0/en/mysql-ssl-rsa-setup.html

注意

mysql_ssl_rsa_setup 在 MySQL 8.0.34 版本中已被弃用。相反,考虑使用 MySQL 服务器在启动时自动生成缺失的 SSL 和 RSA 文件(参见 Automatic SSL and RSA File Generation)。

该程序创建 SSL 证书和密钥文件以及 RSA 密钥对文件,以支持使用 SSL 进行安全连接和使用 RSA 在未加密连接上进行安全密码交换,如果这些文件丢失。mysql_ssl_rsa_setup 也可用于创建新的 SSL 文件,如果现有文件已过期。

注意

mysql_ssl_rsa_setup 使用 openssl 命令,因此��使用取决于您的机器上是否安装了 OpenSSL。

另一种生成 SSL 和 RSA 文件的方法,适用于使用 OpenSSL 编译的 MySQL 发行版,是让服务器自动生成它们。请参阅 Section 8.3.3.1, “Creating SSL and RSA Certificates and Keys using MySQL”。

重要提示

mysql_ssl_rsa_setup 通过更容易生成所需文件,降低了使用 SSL 的障碍。然而,由 mysql_ssl_rsa_setup 生成的证书是自签名的,安全性不高。在使用 mysql_ssl_rsa_setup 生成的文件获得经验后,考虑从注册的证书颁发机构获取 CA 证书。

像这样调用 mysql_ssl_rsa_setup:

mysql_ssl_rsa_setup [*options*]

典型的选项包括 –datadir 用于指定创建文件的位置,以及 –verbose 用于查看 mysql_ssl_rsa_setup 执行的 openssl 命令。

mysql_ssl_rsa_setup 尝试使用默认的文件名创建 SSL 和 RSA 文件。其工作方式如下:

mysql_ssl_rsa_setup 检查PATH环境变量指定的位置是否存在openssl二进制文件。如果未找到openssl,mysql_ssl_rsa_setup 不执行任何操作。如果找到openssl,mysql_ssl_rsa_setup 将在 MySQL 数据目录中查找默认 SSL 和 RSA 文件,该目录由–datadir选项指定,或者如果未提供–datadir选项,则查找编译的数据目录。
mysql_ssl_rsa_setup 检查数据目录中具有以下名称的 SSL 文件:
ca.pem
server-cert.pem
server-key.pem
如果这些文件中有任何一个存在,mysql_ssl_rsa_setup 将不创建 SSL 文件。否则,它会调用openssl来创建它们,以及一些额外的文件:
ca.pem Self-signed CA certificate
ca-key.pem CA private key
server-cert.pem Server certificate
server-key.pem Server private key
client-cert.pem Client certificate
client-key.pem Client private key
这些文件使用 SSL 启用安全的客户端连接;参见第 8.3.1 节,“配置 MySQL 使用加密连接”。
mysql_ssl_rsa_setup 检查数据目录中具有以下名称的 RSA 文件:
private_key.pem Private member of private/public key pair
public_key.pem Public member of private/public key pair
如果这些文件中有任何一个存在,mysql_ssl_rsa_setup 将不创建 RSA 文件。否则,它会调用openssl来创建它们。这些文件启用了通过sha256_password或caching_sha2_password插件进行的帐户的 RSA 在未加密连接上进行安全密码交换;参见第 8.4.1.3 节,“SHA-256 可插拔认证”,以及第 8.4.1.2 节,“缓存 SHA-2 可插拔认证”。

有关由mysql_ssl_rsa_setup创建的文件特性的信息,请参见第 8.3.3.1 节,“使用 MySQL 创建 SSL 和 RSA 证书和密钥”。

在启动时,如果没有提供除–ssl(可能还包括ssl_cipher)之外的显式 SSL 选项,则 MySQL 服务器会自动使用由mysql_ssl_rsa_setup创建的 SSL 文件来启用 SSL。如果您更喜欢明确指定文件,请在启动时使用–ssl-ca、–ssl-cert和–ssl-key选项来命名ca.pem、server-cert.pem和server-key.pem文件。

服务器还会自动使用由mysql_ssl_rsa_setup创建的 RSA 文件来启用 RSA,如果没有提供明确的 RSA 选项。

如果服务器启用了 SSL,则客户端默认使用 SSL 进行连接。要明确指定证书和密钥文件,请使用–ssl-ca、–ssl-cert和–ssl-key选项来命名ca.pem、client-cert.pem和client-key.pem文件。但是,首先可能需要一些额外的客户端设置,因为mysql_ssl_rsa_setup默认会在数据目录中创建这些文件。数据目录的权限通常只允许运行 MySQL 服务器的系统帐户访问,因此客户端程序无法使用那里的文件。为了使文件可用,请将它们复制到一个可读(但不可写)的目录中供客户端使用:

对于本地客户端,可以使用 MySQL 安装目录。例如,如果数据目录是安装目录的子目录,并且您当前位置是数据目录,则可以像这样复制文件:
cp ca.pem client-cert.pem client-key.pem ..
对于远程客户端,请使用安全通道分发文件,以确保在传输过程中不被篡改。

如果用于 MySQL 安装的 SSL 文件已过期,您可以使用mysql_ssl_rsa_setup创建新文件:

停止服务器。
重命名或删除现有的 SSL 文件。您可能希望先备份它们。(RSA 文件不会过期,因此无需删除它们。mysql_ssl_rsa_setup会检查它们是否存在,并不会覆盖它们。)
运行mysql_ssl_rsa_setup时使用–datadir选���来指定新文件的创建位置。
重新启动服务器。

mysql_ssl_rsa_setup支持以下命令行选项,可以在命令行或选项文件的[mysql_ssl_rsa_setup]和[mysqld]组中指定。有关 MySQL 程序使用的选项文件的信息,请参见第 6.2.2.2 节,“使用选项文件”。

Table 6.10 mysql_ssl_rsa_setup Options

选项名称描述–datadir数据目录路径–help显示帮助信息并退出–suffixX.509 证书通用名称属性的后��–uid用于文件权限的有效用户名称–详细详细模式–version显示版本信息并退出
–help, ?

命令行格式–help显示帮助信息并退出。
–datadir=*dir_name*

命令行格式–datadir=dir_name类型目录名称mysql_ssl_rsa_setup应检查默认 SSL 和 RSA 文件的目录路径,并在其中创建文件(如果缺少)。默认为编译的数据目录。
–suffix=*str*

命令行格式–suffix=str类型字符串X.509 证书中通用名称属性的后缀。后缀值限制为 17 个字符。默认值基于 MySQL 版本号。
–uid=name, -v

命令行格式–uid=name应该成为任何创建文件的所有者的用户名称。该值是用户名,而不是数字用户 ID。如果没有此选项,由mysql_ssl_rsa_setup创建的文件将由执行它的用户拥有。只有在以root身份在支持chown()系统调用的系统上执行程序时,此选项才有效。
–verbose, -v

命令行格式–verbose详细模式。显示程序执行的更多输出。例如,程序显示运行的openssl命令,并生成输出以指示是否跳过 SSL 或 RSA 文件的创建,因为某些默认文件已经存在。
–version, -V

命令行格式–version显示版本信息并退出。

#以上关于MySQL8 中文参考(九)的相关内容来源网络仅供参考,相关信息请以官方公告为准!

原创文章,作者:CSDN,如若转载,请注明出处:https://www.sudun.com/ask/92287.html

(0)
CSDN's avatarCSDN
上一篇 2024年6月26日 下午11:38
下一篇 2024年6月26日 下午11:38

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注