Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

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

Note

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

以下 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'}。完整语法请见使用键值对连接

连接参数不区分大小写。每个参数如果指定,仅能指定一次。如果一个参数指定多次,会出现错误。

本节涵盖以下主题:

以下讨论描述了在指定 MySQL 连接时可用的参数。这些参数可以使用 URI 类似语法(见使用 URI 类似连接字符串)或键值对(见)提供。

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

  • user:用于身份验证的 MySQL 用户账户。

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

    Warning

    在连接指定中显式提供密码是不安全且不推荐的。后续讨论将展示如何导致交互式密码提示。

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

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

  • socket: Unix 套接字文件路径或 Windows 命名管道名称。值是本地文件路径。在 URI 类似字符串中,他们必须被编码,使用百分号编码或将路径包围在圆括号中。圆括号消除需要百分号编码的字符,如/ 目录分隔符字符。例如,连接为 root@localhost 使用 Unix 套接字 /tmp/mysql.sock,指定路径使用百分号编码为 root@localhost?socket=%2Ftmp%2Fmysql.sock,或使用圆括号为 root@localhost?socket=(/tmp/mysql.sock)

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

Unix 上localhost 的处理方式取决于传输协议。使用 classic MySQL 协议的连接将localhost 处理方式与其他 MySQL 客户端相同,即假设为套接字基于连接。使用 X 协议的连接,localhost 的行为不同,假设表示环回地址,例如 IPv4 地址 127.0.0.1。

您可以指定连接选项,既可以作为 URI 类似字符串的属性追加 ?attribute=value,也可以作为键值对。以下选项可用:

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

    • DISABLED

    • PREFERRED

    • REQUIRED

    • VERIFY_CA

    • VERIFY_IDENTITY

    Important

    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 的值是 IANA 加密套件名称列表,见TLS Ciphersuites。详细信息,请参阅第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 8+ 服务器时,使用 classic MySQL 协议,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 Pluggable Authentication”

  • server-public-key-path:PEM 格式文件的路径名,包含服务器要求客户端使用的 RSA 密钥对密码交换所需的公钥。使用时连接 MySQL 8+ 服务器,协议模式为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:连接到 SSH 服务器以通过 SSH 隧道访问 MySQL 服务器实例的 URI。URI 格式为 [user@]host[:port]。使用 uri 选项指定目标 MySQL 服务器实例的 URI。关于 MySQL Shell 中的 SSH隧道连接,请参阅使用 SSH 隧道

  • uri:要通过 SSH 隧道访问的 MySQL 服务器实例的 URI。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 配置文件 ~/.ssh/config

  • ssh-identity-file:连接到 SSH 服务器时使用的身份文件。默认情况下,如果未指定该选项,任何配置在 SSH 代理中(如果使用)的身份文件、SSH 配置文件或标准私钥文件 (~/.ssh/id_rsa) 都可以。

  • ssh-identity-pass:指定的身份文件的密码。

    Warning

    在连接说明中显式指定密码不安全且不推荐。MySQL Shell 在需要密码时交互地提示密码。

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

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

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

    Note

    不同 MySQL 客户端对连接压缩的支持方式各异。请查看客户端文档获取详细信息。

  • compression-algorithmscompression-level:这些选项在 MySQL Shell 中可用于更好地控制连接压缩。你可以指定连接使用的压缩算法和该算法对应的数字压缩级别。也可以将 compression-algorithms 替换为 compression 来请求连接压缩。关于 MySQL Shell 连接压缩控制,请参阅使用压缩连接

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

    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-like字符串来指定连接到 MySQL 服务器。这些字符串可以与 MySQL Shell 使用 --uri 命令选项、MySQL Shell 的 \connect 命令和实现 X DevAPI 的 MySQL 连接器。

Note

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

URI-like 连接字符串具有以下语法:

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

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

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

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

如果 URI 类似字符串中没有指定密码,推荐这样做,交互式客户端将提示输入密码。以下示例展示了如何使用用户名 user_name 指定 URI 类似字符串,在每个情况下都需要输入密码。

  • 到本地服务器实例的 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
  • 可以指定可选的查询,各个值以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 socket 连接的socket 对等身份验证,你必须在连接字符串中明确指定不提供密码,密码提示符不需要。要做到这点,请在字符串中添加一个:,但不要在后面指定密码。例如:

mysqlx://user_name:@localhost

使用键值对连接

在 MySQL Shell 和一些实现 X DevAPI 的 MySQL 连接器中,您可以使用键值对来指定连接到 MySQL 服务器,使用语言自然的构造方式。例如,您可以使用 JSON 对象在 JavaScript 中或字典在 Python 中提供连接参数,无论如何提供键值对,概念都是一致:可以将本节中描述的键分配给值以指定连接。您可以使用 MySQL Shell 的 shell.connect() 方法或 InnoDB 集群的 dba.createCluster() 方法,以及一些实现 X DevAPI 的 MySQL 连接器来指定连接。

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

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

{ 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套接字连接的socket对等身份验证,必须明确地指定无密码,并且不需要密码提示。要做到这点,可以在password关键字后提供一个空字符串,例如:

{user:'user_name', password:'', host:'localhost'}