文档首页
MySQL Connector/J 开发人员指南
相关文档 下载本手册
PDF (US Ltr) - 1.2Mb
PDF (A4) - 1.2Mb


6.2 连接 URL 语法

本节介绍连接到 MySQL 的 URL 语法。

这是连接 URL 的通用格式

protocol//[hosts][/database][?properties]

URL 由以下部分组成

重要

任何出现在连接 URL 任何部分的 URL 保留字符(例如,/:@(、)、[]&#=? 和空格)必须进行百分比编码。

协议

连接可能使用的协议如下:

  • jdbc:mysql: 用于普通和基本的 JDBC 故障转移连接。

  • jdbc:mysql:loadbalance: 用于负载均衡 JDBC 连接。有关详细信息,请参阅第 9.3 节,“使用 Connector/J 配置负载均衡”

  • jdbc:mysql:replication: 用于 JDBC 复制连接。有关详细信息,请参阅第 9.4 节,“使用 Connector/J 配置源/副本复制”

  • mysqlx: 用于 X DevAPI 连接。

  • jdbc:mysql+srv: 用于使用 DNS SRV 记录的普通和基本的故障转移 JDBC 连接。

  • jdbc:mysql+srv:loadbalance: 用于使用 DNS SRV 记录的负载均衡 JDBC 连接。

  • jdbc:mysql+srv:replication: 用于使用 DNS SRV 记录的复制 JDBC 连接。

  • mysqlx+srv: 用于使用 DNS SRV 记录的 X DevAPI 连接。

主机

根据具体情况,主机 部分可能仅包含主机名,也可能是一个复杂结构,包含多个主机名、端口号、特定于主机的属性和用户凭据等元素。

  • 单个主机

    • 不添加特定于主机的属性的单个主机连接

      • 主机 部分以 主机:端口 的格式编写。这是一个简单的单个主机连接 URL 示例

        jdbc:mysql://host1:33060/sakila
      • 主机 可以是 IPv4 或 IPv6 主机名字符串,在后一种情况下,它必须放在方括号内,例如 [1000:2000::abcd]. 当未指定 主机 时,将使用 localhost 的默认值。

      • 端口 是一个标准端口号,即 1 到 65535 之间的整数。普通 MySQL 连接的默认端口号为 3306,使用 X 协议的连接的默认端口号为 33060。如果未指定 端口,则使用相应的默认值。

    • 添加特定于主机的属性的单个主机连接

      • 在这种情况下,主机被定义为一系列 = 对。键用于标识主机、端口以及任何特定于主机的属性。有两种用于指定键的替代格式

        • 地址等号” 格式

          address=(host=host_or_ip)(port=port)(key1=value1)(key2=value2)...(keyN=valueN)

          这是一个使用“地址等号” 格式的示例 URL

          jdbc:mysql://address=(host=myhost)(port=1111)(key1=value1)/db
        • 键值” 格式

          (host=host,port=port,key1=value1,key2=value2,...,keyN=valueN)

          这是一个使用“键值” 格式的示例 URL

          jdbc:mysql://(host=myhost,port=1111,key1=value1)/db

      • 主机和端口由键 主机端口 标识。上面不添加特定于主机的属性的单个主机 中关于 主机端口 格式和默认值的描述也适用于此。

      • 可以添加的其他键包括 用户密码协议 等等。它们会覆盖在属性 URL 部分中设置的全局值。将覆盖限制为用户、密码、网络超时以及语句和元数据缓存大小;其他每个主机覆盖的效果未定义。

      • 不同的协议可能需要不同的键。例如,mysqlx: 方案使用两个特殊键,地址优先级地址 是一个 主机:端口 对,优先级 是一个整数。例如

        mysqlx://(address=host:1111,priority=1,key1=value1)/db
      • 区分大小写。两个仅大小写不同的键被认为是冲突的,并且不保证使用哪个键。

  • 多个主机

    有两种格式可用于指定多个主机

    • 以逗号分隔列表形式列出主机

      host1,host2,...,hostN

      每个主机都可以以上面单个主机 中描述的三种方式中的任何一种进行指定。以下是一些示例

      jdbc:mysql://myhost1:1111,myhost2:2222/db
      jdbc:mysql://address=(host=myhost1)(port=1111)(key1=value1),address=(host=myhost2)(port=2222)(key2=value2)/db
      jdbc:mysql://(host=myhost1,port=1111,key1=value1),(host=myhost2,port=2222,key2=value2)/db
      jdbc:mysql://myhost1:1111,(host=myhost2,port=2222,key2=value2)/db
      mysqlx://(address=host1:1111,priority=1,key1=value1),(address=host2:2222,priority=2,key2=value2)/db
    • 以逗号分隔列表形式列出主机,然后用方括号括起列表

      [host1,host2,...,hostN]

      这称为主机子列表形式,它允许所有列表中的主机共享用户凭据,就好像它们是单个主机一样。列表中的每个主机都可以以上面单个主机 中描述的三种方式中的任何一种进行指定。以下是一些示例

      jdbc:mysql://sandy:secret@[myhost1:1111,myhost2:2222]/db
      jdbc:mysql://sandy:secret@[address=(host=myhost1)(port=1111)(key1=value1),address=(host=myhost2)(port=2222)(key2=value2)]/db
      jdbc:mysql://sandy:secret@[myhost1:1111,address=(host=myhost2)(port=2222)(key2=value2)]/db

      虽然无法递归地写入主机子列表,但主机列表可以包含主机子列表作为其成员主机。

  • 用户凭据

    用户凭据可以在连接 URL 之外设置,例如,作为从 java.sql.DriverManager 获取连接时的参数(有关详细信息,请参阅第 6.3 节,“配置属性”)。当使用连接 URL 设置用户凭据时,有几种方法可以指定它们

    • 使用 @ 将单个主机、主机子列表(请参阅多个主机)或主机列表中的任何主机与用户凭据前缀起来

       user:password@host_or_host_sublist

      例如

      mysqlx://sandy:secret@[(address=host1:1111,priority=1,key1=value1),(address=host2:2222,priority=2,key2=value2))]/db
    • 使用键 用户密码 为每个主机指定凭据

      (user=sandy)(password=mypass)

      例如

      jdbc:mysql://[(host=myhost1,port=1111,user=sandy,password=secret),(host=myhost2,port=2222,user=finn,password=secret)]/db
      jdbc:mysql://address=(host=myhost1)(port=1111)(user=sandy)(password=secret),address=(host=myhost2)(port=2222)(user=finn)(password=secret)/db

    在这两种形式中,当指定多个用户凭据时,最左边的凭据优先——也就是说,从连接字符串的左到右,找到第一个适用于主机的凭据,即使用该凭据。

    内部 主机子列表中,任何主机都不能以 @ 格式拥有用户凭据,但单个主机可以以键格式指定用户凭据。

数据库

要打开的默认数据库或目录。如果没有指定数据库,则连接将建立,但没有默认数据库。在这种情况下,您可以在 Connection 实例上调用 setCatalog() 方法,或者在您的 SQL 语句中使用数据库名称来指定表名(即 SELECT dbname.tablename.colname FROM dbname.tablename...)。通常,在构建与多个数据库(例如 GUI 数据库管理器)一起使用的工具时,才会在未指定要使用的数据库的情况下打开连接。

注意

在 JDBC 应用程序中,始终使用 Connection.setCatalog() 方法来指定所需的数据库,而不是使用 USE database 语句。

properties

一系列应用于所有主机的全局属性,以 ? 开头,并以 key=value 对的形式编写,对之间用符号 &. 分隔。以下是一些示例

jdbc:mysql://(host=myhost1,port=1111),(host=myhost2,port=2222)/db?key1=value1&key2=value2&key3=value3

以下内容适用于键值对

  • keyvalue 只是字符串。Connector/J 在内部执行适当的类型转换和验证。

  • key 区分大小写。两个仅大小写不同的键被认为是冲突的,并且不确定将使用哪一个。

  • 单个主机,包含主机特定属性多个主机 中以键值对形式指定的任何主机特定值都将覆盖此处设置的全局值。

有关配置属性的详细信息,请参见 第 6.3 节,“配置属性”