文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  使用类似 URI 的字符串或键值对连接到服务器

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

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

注意

术语类似 URI表示连接字符串语法类似于RFC 3986定义的 URI(统一资源标识符)语法,但并不完全相同。

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

  • MySQL Shell

  • 实现 X DevAPI 的 MySQL 连接器

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

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

本节涵盖以下主题:

基本连接参数

以下讨论描述了在指定与 MySQL 的连接时可用的参数。可以使用符合基本类似 URI 语法的字符串(请参阅使用类似 URI 的连接字符串进行连接)或键值对(请参阅使用键值对进行连接)来提供这些参数。

  • scheme:要使用的传输协议。使用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.sockroot@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:X.509 证书颁发机构文件的路径(PEM 格式)。

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

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

  • ssl-cipher:用于使用 TLS 协议(最高到 TLSv1.2)的连接的加密密码。

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

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

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

  • 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 的值是 IANA 密码套件名称列表,如TLS 密码套件中所列。有关详细信息,请参见第 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 协议连接到 MySQL 8+ 服务器时使用。在这种情况下,必须指定协议。例如

    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 插件的信息,请参见第 8.4.1.1 节“缓存 SHA-2 可插拔身份验证”

  • server-public-key-path:包含服务器所需的用于基于 RSA 密钥对的密码交换的客户端公钥副本的文件(PEM 格式)的路径名。在使用 SSL 模式 DISABLED 通过经典 MySQL 协议连接到 MySQL 8+ 服务器时使用。

    此选项适用于使用 sha256_passwordcaching_sha2_password 身份验证插件进行身份验证的客户端。对于未使用其中一种插件进行身份验证的帐户,将忽略此选项。如果未使用基于 RSA 的密码交换(例如,当客户端使用安全连接连接到服务器时),也会忽略此选项。

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

    有关 sha256_passwordcaching_sha2_password 插件的信息,请参见第 8.4.1.2 节“SHA-256 可插拔身份验证”第 8.4.1.1 节“缓存 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-passssh-identity-file 选项指定的身份文件的密码。

    警告

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

  • connect-timeout:一个整数值,用于配置客户端(如 MySQL Shell)在停止尝试连接到无响应的 MySQL 服务器之前等待的秒数。

  • compression:此选项请求或禁用连接的压缩。

    此选项可用的值为:required(请求压缩,如果服务器不支持则失败);preferred(请求压缩,如果服务器不支持则回退到未压缩的连接);disabled(请求未压缩的连接,如果服务器不允许则失败)。preferred 是 X 协议连接的默认值,disabled 是经典 MySQL 协议连接的默认值。有关 X 插件连接压缩控制的信息,请参见第 22.5.5 节“使用 X 插件进行连接压缩”

    注意

    不同的 MySQL 客户端以不同的方式实现对连接压缩的支持。有关详细信息,请参阅客户端的文档。

  • compression-algorithmscompression-level:这些选项在 MySQL Shell 中可用,用于更精细地控制连接压缩。您可以指定它们来选择用于连接的压缩算法,以及与该算法一起使用的数字压缩级别。您还可以使用 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 相同)、Boolean 值(truefalse,用于启用或禁用默认属性集),或一个或多个以逗号分隔的 key=value 说明符的列表(将与默认属性集一起发送)。在列表中,缺少键值将被视为空字符串。更多示例

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

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

使用类似 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 的字符串的元素中的保留字符使用百分号编码。例如,如果指定包含 @ 字符的字符串,则必须将该字符替换为 %40。如果在 IPv6 地址中包含区域 ID,则必须将用作分隔符的 % 字符替换为 %25

您可以在类似 URI 的连接字符串中使用的参数在基本连接参数中进行了描述。

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

如果在类似 URI 的字符串中未指定密码(建议这样做),则交互式客户端会提示输入密码。以下示例显示如何使用用户名 user_name 指定类似 URI 的字符串。在每种情况下,都会提示输入密码。

  • 与监听端口 33065 的本地服务器实例的 X 协议连接。

    mysqlx://user_name@localhost:33065
  • 与监听端口 3333 的本地服务器实例的经典 MySQL 协议连接。

    mysql://user_name@localhost:3333
  • 与远程服务器实例的 X 协议连接,使用主机名、IPv4 地址和 IPv6 地址。

    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%2Fto%2Fsocket.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=valuekey 值。值可以是列表类型,列表值按出现顺序排列。字符串必须进行百分号编码或用括号括起来。以下是等效的。

    [email protected]?ssl-ca=%2Froot%2Fclientcert%2Fca-cert.pem\
    &ssl-cert=%2Froot%2Fclientcert%2Fclient-cert.pem\
    &ssl-key=%2Froot%2Fclientcert%2Fclient-key
    
    [email protected]?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}
  • 与远程服务器实例的 X 协议连接,使用主机名、IPv4 地址和 IPv6 地址。

    {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'}