MySQL8-中文参考-九-

99 阅读1小时+

MySQL8 中文参考(九)

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

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

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

本节描述了使用命令行选项来指定如何建立与 MySQL 服务器的连接,适用于诸如mysqlmysqldump等客户端。有关使用类似 URI 的连接字符串或键值对建立连接的信息,适用于 MySQL Shell 等客户端,请参阅第 6.2.5 节,“使用类似 URI 的字符串或键值对连接到服务器”。如果无法连接,需要更多信息,请参阅第 8.2.22 节,“解决连接到 MySQL 的问题”。

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

这里的示例使用mysql客户端程序,但原则适用于其他客户端,如mysqldumpmysqladminmysqlshow

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

mysql

因为没有参数选项,所以适用默认值:

  • 默认主机名是localhost。在 Unix 上,这具有特殊含义,稍后会描述。

  • 默认用户名是 Windows 上的ODBC或 Unix 上的登录名。

  • 没有发送密码,因为既没有--password也没有给出-p

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

要明确指定主机名和用户名,以及密码,请在命令行上提供适当的选项。要选择默认数据库,请添加一个数据库名称参数。示例:

mysql --host=localhost --user=myname --password=*password* mydb
mysql -h localhost -u myname -p*password* mydb

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

  • 如果使用--password-p选项并指定密码值,则--password=-p与其后的密码之间不能有空格

  • 如果你使用--password-p但没有指定密码值,客户端程序会提示你输入密码。在输入密码时,密码不会显示出来。这比在命令行上提供密码更安全,因为这样可能会使系统上的其他用户通过执行诸如ps之类的命令看到密码。参见第 8.1.2.1 节,“终端用户密码安全指南”。

  • 要明确指定没有密码,并且客户端程序不应提示输入密码,请使用--skip-password选项。

正如刚才提到的,将密码值包含在命令行上是一种安全风险。为了避免这种风险,请指定不带任何后续密码值的--password-p选项:

mysql --host=localhost --user=myname --password mydb
mysql -h localhost -u myname -p mydb

当使用--password-p选项时,没有密码值,客户端程序会打印提示并等待你输入密码。(在这些示例中,mydb并不被解释为密码,因为它与前面的密码选项之间有一个空格。)

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

客户端程序确定要进行的连接类型如下:

  • 如果未指定主机或主机为localhost,则会连接到本地主机:

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

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

  • 在 Windows 上,如果host.(句点),或者未启用 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 地址或名称。您还可以明确指定传输协议,即使是对于localhost,也可以使用--protocol=TCP选项。示例:

mysql --host=127.0.0.1
mysql --protocol=TCP

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

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

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

mysql --host=remote.example.com

要明确指定端口号,请使用--port-P选项:

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

您也可以为连接到本地服务器指定端口号。但是,如前所述,在 Unix 上连接到localhost默认使用套接字文件,因此除非您像之前描述的那样强制使用 TCP/IP 连接,否则任何指定端口号的选项都将被忽略。

对于此命令,在 Unix 上程序使用套接字文件,--port选项将被忽略:

mysql --port=13306 --host=localhost

要使用端口号,请强制使用 TCP/IP 连接。例如,以以下任一种方式调用程序:

mysql --port=13306 --host=127.0.0.1
mysql --port=13306 --protocol=TCP

有关控制客户端程序如何与服务器建立连接的选项的更多信息,请参见第 6.2.3 节,“连接到服务器的命令选项”。

可以在每次调用客户端程序时指定连接参数,而无需每次在命令行中输入它们:

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

    [client]
    host=*host_name*
    user=*user_name*
    password=*password*
    

    查看更多信息,请参见第 6.2.2.2 节,“使用选项文件”。

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

    • 要指定mysql的主机,请使用MYSQL_HOST

    • 在 Windows 上,要指定 MySQL 用户名,请使用USER

    要查看支持的环境变量列表,请参见第 6.9 节,“环境变量”。

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

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

本节描述了如何使用类似 URI 的连接字符串或键值对来指定如何建立与 MySQL 服务器的连接,适用于诸如 MySQL Shell 的客户端。有关使用命令行选项建立连接的信息,适用于诸如mysqlmysqldump等客户端,请参阅第 6.2.4 节,“使用命令选项连接到 MySQL 服务器”。如果无法连接,请参阅第 8.2.22 节,“连接到 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 的连接字符串进行连接)或作为键值对(请参阅使用键值对进行连接)来提供。

  • scheme: 要使用的传输协议。对于 X 协议连接,请使用 mysqlx,对于经典 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@localhost?socket=(/tmp/mysql.sock)

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

在 Unix 上处理 localhost 取决于传输协议的类型。使用经典 MySQL 协议的连接将 localhost 与其他 MySQL 客户端一样处理,这意味着假定 localhost 用于基于套接字的连接。对于使用 X 协议的连接,localhost 的行为不同,它被假定代表回环地址,例如,IPv4 地址 127.0.0.1。

附加连接参数

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

  • ssl-mode: 连接的期望安全状态。以下模式是允许的:

    • DISABLED

    • PREFERRED

    • REQUIRED

    • VERIFY_CA

    • VERIFY_IDENTITY

    重要

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

    有关这些模式的信息,请参见加密连接的命令选项中的--ssl-mode选项描述。

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

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

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

  • ssl-cipher: 用于使用 TLS 协议进行连接的加密密码,直到 TLSv1.2。

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

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

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

  • tls-version: 经典 MySQL 协议加密连接允许的 TLS 协议。此选项仅由 MySQL Shell 支持。tls-version(单数)的值是逗号分隔的列表,例如TLSv1.2,TLSv1.3。详情请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。此选项取决于未将ssl-mode选项设置为DISABLED

  • tls-versions: 加密 X 协议连接的允许 TLS 协议。tls-versions(复数)的值是一个数组,例如[TLSv1.2,TLSv1.3]。详情请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。此选项取决于未将ssl-mode选项设置为DISABLED

  • tls-ciphersuites: 允许的 TLS 密码套件。tls-ciphersuites的值是列出在TLS 密码套件中的 IANA 密码套件名称的列表。详情请参见第 8.3.2 节,“加密连接 TLS 协议和密码”。此选项取决于未将ssl-mode选项设置为DISABLED

  • auth-method: 用于连接的身份验证方法。默认值为AUTO,表示服务器会尝试猜测。以下方法是允许的:

    • AUTO

    • MYSQL41

    • SHA256_MEMORY

    • FROM_CAPABILITIES

    • FALLBACK

    • PLAIN

    对于 X 协议连接,任何配置的auth-method都会被覆盖为以下身份验证方法序列:MYSQL41SHA256_MEMORYPLAIN

  • get-server-public-key:从服务器请求所需的用于 RSA 密钥对密码交换的公钥。在使用 SSL 模式DISABLED连接到 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插件的信息,请参见 Section 8.4.1.2,“缓存 SHA-2 可插拔认证”。

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

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

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

    关于sha256_passwordcaching_sha2_password插件的信息,请参见 Section 8.4.1.3,“SHA-256 可插拔认证”,以及 Section 8.4.1.2,“缓存 SHA-2 可插拔认证”。

  • ssh:连接到 SSH 服务器以使用 SSH 隧道访问 MySQL 服务器实例的 URI。URI 格式为[user@]host[:port]。使用uri选项指定目标 MySQL 服务器实例的 URI。有关从 MySQL Shell 进行 SSH 隧道连接的信息,请参见使用 SSH 隧道。

  • uri:通过 SSH 隧道从由ssh选项指定的服务器访问的 MySQL 服务器实例的 URI。URI 格式为[scheme://][user@]host[:port]。不要使用基本连接参数(schemeuserhostport)来指定用于 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 服务器的秒数。

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

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

    • 从 MySQL 8.0.20 开始,此选项的值为required,表示请求压缩并在服务器不支持时失败;preferred表示请求压缩并在无法时回退到未压缩连接;disabled表示请求未压缩连接并在服务器不允许时失败。preferred是 X 协议连接的默认值,而disabled是经典的 MySQL 协议连接的默认值。有关 X 插件连接压缩控制的信息,请参阅第 22.5.5 节,“X 插件连接压缩”。

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

  • compression-algorithmscompression-level:这些选项在 MySQL Shell 8.0.20 及更高版本中可用,用于更好地控制连接压缩。您可以指定它们以选择连接所使用的压缩算法,以及与该算法一起使用的数字压缩级别。您还可以使用 compression-algorithms 代替 compression 来请求连接的压缩。有关 MySQL Shell 连接压缩控制的信息,请参阅 使用压缩连接。

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

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

    默认行为是发送默认属性集。应用程序可以指定要传递的除默认属性之外的属性。您可以将额外的连接属性指定为连接字符串中的 connection-attributes 参数。connection-attributes 参数值必须为空(与指定 true 相同),是一个布尔值(truefalse 用于启用或禁用默认属性集),或者是一个由逗号分隔的零个或多个 key=value 指定器的列表(用于发送除默认属性集之外的属性)。在列表中,缺少的键值将被视为空字符串。更多示例:

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

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

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

您可以使用类似 URI 的字符串指定与 MySQL Server 的连接。这种字符串可以与 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 客户端库的程序(例如,mysqlmysqldump),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命名管道Windows
MEMORY共享内存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_ALGORITHMSMYSQL_OPT_ZSTD_COMPRESSION_LEVEL 选项配置了使用 MySQL C API 的客户端程序所允许的压缩算法和zstd压缩级别。

  • CHANGE MASTER TO 语句的 MASTER_COMPRESSION_ALGORITHMSMASTER_ZSTD_COMPRESSION_LEVEL 选项配置了参与源/复制复制的副本服务器所允许的压缩算法和zstd压缩级别。从 MySQL 8.0.23 版本开始,使用 CHANGE REPLICATION SOURCE TO 语句和选项 SOURCE_COMPRESSION_ALGORITHMSSOURCE_ZSTD_COMPRESSION_LEVEL

  • group_replication_recovery_compression_algorithmsgroup_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客户端发起zlibuncompressed连接,请这样调用它:

    mysql --compression-algorithms=zlib,uncompressed
    
  • 要配置副本使用zlibzstd连接连接到源,对于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_protocolslave_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_protocolslave_compressed_protocol系统变量,则优先于MASTER_COMPRESSION_ALGORITHMS,如果源和复制品都允许该算法,则连接到源使用zlib压缩。如果禁用了replica_compressed_protocolslave_compressed_protocol,则MASTER_COMPRESSION_ALGORITHMS的值适用。

注意

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

监控连接压缩

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

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

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

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

  • 要监视客户端连接中使用的压缩情况,请使用Compression_algorithmCompression_level状态变量。对于当前连接,它们的值分别表示压缩算法和压缩级别。

  • 要确定服务器配置允许哪些压缩算法用于传入连接,请检查protocol_compression_algorithms系统变量。

  • 对于源/复制复制连接,配置的压缩算法和压缩级别可从多个来源获取:

    • 性能模式replication_connection_configuration表具有COMPRESSION_ALGORITHMSZSTD_COMPRESSION_LEVEL列。

    • mysql.slave_master_info系统表具有Master_compression_algorithmsMaster_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 端口号。典型的语法(例如对于shkshbashzsh等)如下:

MYSQL_TCP_PORT=3306
export MYSQL_TCP_PORT

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

对于cshtcsh,使用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=tcmallocmysqld_safe将在/usr/lib中查找tcmalloc库。如果找到tmalloc,则将其路径名添加到mysqldLD_PRELOAD值的开头。如果未找到tcmallocmysqld_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=debugmysqld_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_safemysqld的消息分别带有mysqld_safemysqld的标识符。要为这些标识符指定后缀,请使用--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在其工作目录下查找bindata目录。对于源代码发行版,它查找libexecvar目录。如果您从 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尝试使用sleepdate系统实用程序来确定每秒尝试启动的次数。如果这些实用程序存在,并且每秒尝试启动次数大于 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 源代码树中使用的脚本名称。安装后的名称可能不同(例如,mysqldmysql)。在下面的讨论中,根据您的系统调整名称mysql.server

注意

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

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

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目录中,名称为mysqldmysql。有关 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 仅支持 startstop 作为命令行参数。

表 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_multimy.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*] ...]

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

每个*GNR值代表一个选项组编号或一组组编号。该值应为选项文件中组名称末尾的数字。例如,名为[mysqld17]的组的GNR17。要指定一系列数字,请用短横线分隔第一个和最后一个数字。GNR10-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]组可用于所有mysqldmysqld_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*]选项组中包含mysqldledir选项。这些选项指示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 套接字文件进行的。此选项会影响stopreport操作。

  • --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.txtmessages_to_clients.txt 文件。

    要了解更多关于定义错误消息的信息,请参阅这些文件中的注释,以及 errmsg_readme.txt 文件。

  • 在 MySQL 8.0.19 之前,错误信息来自 sql/share 目录中的 errmsg-utf8.txt 文件。

comp_err 还生成 mysqld_error.hmysqld_ername.hmysqld_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=_othermysql_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 设置为 ONSTRICT 会导致客户端在启动时产生警告并在非 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 文件。其工作方式如下:

  1. mysql_ssl_rsa_setup 检查PATH环境变量指定的位置是否存在openssl二进制文件。如果未找到opensslmysql_ssl_rsa_setup 不执行任何操作。如果找到opensslmysql_ssl_rsa_setup 将在 MySQL 数据目录中查找默认 SSL 和 RSA 文件,该目录由--datadir选项指定,或者如果未提供--datadir选项,则查找编译的数据目录。

  2. mysql_ssl_rsa_setup 检查数据目录中具有以下名称的 SSL 文件:

    ca.pem
    server-cert.pem
    server-key.pem
    
  3. 如果这些文件中有任何一个存在,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 使用加密连接”。

  4. 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
    
  5. 如果这些文件中有任何一个存在,mysql_ssl_rsa_setup 将不创建 RSA 文件。否则,它会调用openssl来创建它们。这些文件启用了通过sha256_passwordcaching_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.pemserver-cert.pemserver-key.pem文件。

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

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

  • 对于本地客户端,可以使用 MySQL 安装目录。例如,如果数据目录是安装目录的子目录,并且您当前位置是数据目录,则可以像这样复制文件:

    cp ca.pem client-cert.pem client-key.pem ..
    
  • 对于远程客户端,请使用安全通道分发文件,以确保在传输过程中不被篡改。

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

  1. 停止服务器。

  2. 重命名或删除现有的 SSL 文件。您可能希望先备份它们。(RSA 文件不会过期,因此无需删除它们。mysql_ssl_rsa_setup会检查它们是否存在,并不会覆盖它们。)

  3. 运行mysql_ssl_rsa_setup时使用--datadir选���来指定新文件的创建位置。

  4. 重新启动服务器。

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

    显示版本信息并退出。