Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Connecting to the Server Using URI-Like Strings or Key-Value Pairs

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

本节描述了使用 URI-Like 连接字符串或键值对来指定如何连接到 MySQL 服务器的方法,适用于客户端如 MySQL Shell。有关使用命令行选项连接的信息,请参阅 mysqlmysqldump,请参阅 第 6.2.4 节,“使用命令选项连接到 MySQL 服务器”。如果您无法连接,请参阅 第 8.2.22 节,“排除 MySQL 连接问题”

Note

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

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

  • MySQL Shell

  • 实现 X DevAPI 的 MySQL 连接器

本节记录了所有有效的 URI-Like 字符串和键值对连接参数,其中许多参数与命令行选项相同:

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

  • 使用键值对指定参数的语法类似于 {user:'myuser', host:'example.com', port:3306, schema:'main-schema'}。有关完整语法,请参阅 使用键值对

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

本节涵盖以下主题:

基本连接参数

以下讨论描述了指定 MySQL 连接时可用的参数。这些参数可以使用符合基本 URI-Like 语法的字符串提供(见 使用 URI-Like 连接字符串连接),或作为键值对提供(见 使用键值对连接)。

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

  • 用户:要提供的 MySQL 用户帐户用于身份验证过程。

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

    Warning

    在连接规范中指定明确的密码是不安全的,不建议这样做。后续讨论将展示如何导致交互式密码提示。

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

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

  • socket: Unix套接字文件的路径或Windows命名管道的名称。值是本地文件路径。在URI-like字符串中,它们必须被编码,使用百分号编码或将路径括在括号中。括号消除了对目录分隔符字符(如/)的百分号编码的需要。例如,要连接到root@localhost,使用Unix套接字/tmp/mysql.sock,可以使用百分号编码指定路径为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-like字符串中指定连接选项,方法是追加?attribute=value,或作为键值对。以下选项可用:

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

    • DISABLED

    • PREFERRED

    • REQUIRED

    • VERIFY_CA

    • VERIFY_IDENTITY

    Important

    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 密钥对基于密码交换的公钥。当使用经典 MySQL 协议连接到 MySQL 8+ 服务器时,使用 SSL 模式 DISABLED。在这种情况下,您必须指定协议。例如:

    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.2 节,“Caching SHA-2 可插拔身份验证”

  • server-public-key-path: 包含服务器所需的公钥的文件路径,以便在使用经典 MySQL 协议连接到 MySQL 8+ 服务器时进行 RSA 密钥对基于密码交换。使用 SSL 模式 DISABLED

    此选项适用于使用 sha256_passwordcaching_sha2_password 身份验证插件的客户端。该选项将被忽略,如果客户端使用安全连接连接到服务器,则 RSA 基于密码交换不使用。

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

    有关 sha256_passwordcaching_sha2_password 插件的信息,请参阅 第 8.4.1.3 节,“SHA-256 可插拔身份验证”第 8.4.1.2 节,“Caching SHA-2 可插拔身份验证”

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

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

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

    Warning

    在连接规范中指定明确的密码是不安全的,不建议这样做。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 选项指定的身份文件的密码。

    Warning

    在连接规范中指定明确的密码是不安全的,不建议这样做。MySQL Shell 在需要时会交互式提示密码。

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

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

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

    Note

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

  • 压缩算法压缩级别:这些选项在 MySQL Shell 中可用于控制连接压缩。您可以指定它们以选择连接所使用的压缩算法,以及该算法所使用的数字压缩级别。您还可以使用 压缩算法 代替 压缩 来请求连接压缩。有关 MySQL Shell 连接压缩控制的信息,请参阅 使用压缩连接

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

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

    默认行为是发送默认的属性集。应用程序可以指定要传递的附加连接属性作为连接字符串中的 连接属性 参数。 连接属性 参数值必须为空(与指定 true 相同),布尔值 (truefalse 以启用或禁用默认属性集),或以逗号分隔的零个或多个 键=值 规范(在默认属性集之外发送)。在列表中,缺少键值将被评估为空字符串。进一步的示例:

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

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

使用 URI-Like 连接字符串连接

您可以使用 URI-Like 字符串指定连接到 MySQL 服务器。这些字符串可以与 MySQL Shell 的 --uri 命令选项、MySQL Shell 的 \connect 命令和实现 X DevAPI 的 MySQL 连接器一起使用。

Note

术语 URI-Like 表示连接字符串语法类似于但不相同于由 RFC 3986 定义的 URI 语法。

URI-Like 连接字符串的语法如下:

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

在 URI-like 字符串中的保留字符需要使用百分号编码。例如,如果您指定了包含 @ 字符的字符串,该字符必须被替换为 %40。如果您在 IPv6 地址中包括区域 ID,则用于分隔的 % 字符必须被替换为 %25

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

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

如果 URI-like 字符串中未指定密码(推荐),交互式客户端将提示输入密码。以下示例显示了如何使用用户名 user_name 指定 URI-like 字符串。在每种情况下,密码将被提示。

  • 使用 X 协议连接到本地服务器实例,监听端口 33065。

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

    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]
  • 使用套接字连接,路径使用百分号编码或括号提供。

    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
  • 可以指定一个可选的查询,consisting of 值对,例如 key=value 或单个 key。要指定多个值,请使用 , 字符分隔。可以混合使用 key=valuekey 值。值可以是列表类型,列表值按出现顺序排序。字符串必须是百分号编码或括号括起来的。以下是等效的。

    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 服务器,键值对以语言自然的结构提供。例如,可以使用 JSON 对象在 JavaScript 中或 Python 中的字典来提供连接参数。不管键值对是如何提供的,概念保持不变:本节中描述的键可以分配值,以指定连接。可以在 MySQL Shell 的 shell.connect() 方法或 InnoDB Cluster 的 dba.createCluster() 方法中指定键值对连接,也可以使用一些实现 X DevAPI 的 MySQL 连接器。

通常,键值对被 {} 字符所包围,并使用 , 字符作为键值对之间的分隔符。: 字符用于键和值之间,字符串必须被限定(例如,使用 ' 字符)。不需要百分号编码字符串, unlike URI-like 连接字符串。

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

{ key: value, key: value, ...}

可以作为连接键的参数在 基本连接参数 中描述。

如果键值对中没有指定密码(这是推荐的做法),交互式客户端将提示输入密码。以下示例显示如何使用键值对指定连接,使用用户名 'user_name'。在每种情况下,密码将被提示。

  • 使用 X 协议连接到本地服务器实例,监听端口 33065。

    {user:'user_name', host:'localhost', port:33065}
  • 使用经典的 MySQL 协议连接到本地服务器实例,监听端口 3333。

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