MySQL Shell 8.4  /  MySQL Shell 入门  /  MySQL Shell 连接

4.3 MySQL Shell 连接

MySQL Shell 可以使用 X 协议和经典 MySQL 协议连接到 MySQL Server。您可以通过以下方式全局指定 MySQL Shell 连接到的 MySQL Server 实例

这些连接到 MySQL Server 实例的方法创建全局会话,这是一个可以在所有 MySQL Shell 执行模式(SQL 模式、JavaScript 模式和 Python 模式)中使用的连接。名为 session 的 MySQL Shell 全局对象表示此连接,变量 session 保存对它的引用。您还可以使用 shell.openSession()mysqlx.getSession()mysql.getSession()mysql.getClassicSession() 函数创建多个代表其他 MySQL Server 实例连接的额外会话对象。这些连接可以在您创建它们的模式中使用,并且它们中的一个可以在任何时候被指定为 MySQL Shell 的全局会话,以便它可以在所有模式中使用。有关会话对象的说明、如何在全局会话上进行操作以及如何从 MySQL Shell 实例创建和管理多个连接,请参见 第 4.2 节,“MySQL Shell 会话”

所有这些连接到 MySQL Server 实例的不同方式都支持以下连接指定方式

  • 使用 URI 类字符串指定的参数使用类似 [email protected]:3306/main-schema 的语法。有关完整语法,请参见 使用 URI 类连接字符串连接

  • 使用键值对指定的参数使用类似 {user:'myuser', host:'example.com', port:3306, schema:'main-schema'} 的语法。这些键值对以实现的语言自然结构提供。例如,您可以使用 JavaScript 中的 JSON 对象或 Python 中的字典以键值对的形式提供连接参数。有关完整语法,请参见 使用键值对连接

有关更多信息,请参见 使用 URI 类字符串或键值对连接到服务器

重要

无论您选择何种连接方式,了解 MySQL Shell 如何处理密码都非常重要。默认情况下,假定连接需要密码。密码(最大长度为 128 个字符)将在登录提示符处请求,并且可以使用 第 4.4 节,“可插拔密码存储” 进行存储。如果指定的用户拥有无密码帐户(不安全,不建议使用),或者如果正在使用套接字对等身份验证(例如,使用 Unix 套接字连接时),您必须明确指定未提供密码并且不需要密码提示。为此,请使用以下方法之一

  • 如果您使用的是 URI 类连接字符串,请在字符串中的 user 后放置一个 :,但不要在它之后指定密码。

  • 如果您使用的是键值对,请在 password 键后使用 '' 提供空字符串。

  • 如果您使用的是单个参数,请指定 --no-password 选项,或使用空值指定 --password= 选项。

如果您没有为连接指定参数,则使用以下默认值

  • user 默认值为当前系统用户名。

  • host 默认值为 localhost

  • port 默认情况下使用 X 协议连接时为 X 插件端口 33060,使用经典 MySQL 协议连接时为端口 3306。

要配置连接超时,请使用 connect-timeout 连接参数。connect-timeout 的值必须是非负整数,以毫秒为单位定义时间范围。超时默认值为 10000 毫秒,即 10 秒。例如

// Decrease the timeout to 2 seconds.
mysql-js> \connect [email protected]?connect-timeout=2000
// Increase the timeout to 20 seconds
mysql-js> \connect [email protected]?connect-timeout=20000

要禁用超时,请将 connect-timeout 的值设置为 0,这意味着客户端将等待底层套接字超时,这取决于平台。

某些对服务器打开大量连接的操作可能需要很长时间才能执行,例如,shell.connect() 命令。连接超时可能无法提供足够的时间来响应。

您可以使用 MySQL Shell 配置选项 connectTimeout 来设置除 AdminAPI 之外的任何会话的默认连接超时。

除了 TCP 连接,您还可以使用 Unix 套接字文件或 Windows 命名管道进行连接。有关说明,请参见 第 4.3.3 节,“使用 Unix 套接字和 Windows 命名管道连接”

如果 MySQL Server 实例支持加密连接,您可以启用并配置连接以使用加密。有关说明,请参见 第 4.3.4 节,“使用加密连接”

对于经典 MySQL 协议连接,支持使用 LDAP 和 Kerberos 身份验证。有关使用这些方法的说明,请参见 第 4.3.5 节,“使用 LDAP 和 Kerberos 身份验证”

MySQL Shell 支持 SSH 隧道连接到 MySQL Server 实例。有关说明,请参见 第 4.3.6 节,“使用 SSH 隧道”

您还可以请求连接为在 MySQL Shell 和 MySQL Server 实例之间发送的所有数据使用压缩。有关说明,请参见 第 4.3.7 节,“使用压缩连接”

如果与服务器的连接断开,您可以使用 \reconnect 命令,该命令使 MySQL Shell 使用现有的连接参数尝试对当前全局会话进行多次重新连接尝试。\reconnect 命令在不带任何参数或选项的情况下指定。如果这些尝试不成功,您可以使用 \connect 命令并指定连接参数进行新的连接。