您可以在 JavaScript 和 Python 模式下使用可用函数来创建您选择类型的多个会话对象,并将它们分配给变量。这些会话对象允许您建立和管理并发连接,以便从单个 MySQL Shell 实例使用多个 MySQL 服务器实例,或者以多种方式使用同一个实例。
用于创建会话对象的函数在 mysqlx
和 mysql
JavaScript 和 Python 模块中可用。这些模块必须在使用前导入,当 MySQL Shell 在交互模式下使用时,会自动完成导入。函数 mysqlx.getSession()
使用指定的连接数据打开到 MySQL 服务器实例的 X 协议连接,并返回一个 Session
对象来表示该连接。函数 mysql.getClassicSession()
和 mysql.getSession()
使用指定的连接数据打开到 MySQL 服务器实例的经典 MySQL 协议连接,并返回一个 ClassicSession
对象来表示该连接。使用这些函数时,MySQL Shell 使用的连接协议内置于函数中,而不是使用单独的选项进行选择,因此您必须选择适当的函数以匹配端口的正确协议。
MySQL Shell 在 shell
全局对象中提供了 openSession()
方法,该方法可以在 JavaScript 或 Python 模式下使用。shell.openSession()
适用于 X 协议和经典 MySQL 协议。您将连接协议指定为连接数据的一部分,或者让 MySQL Shell 根据您的其他连接参数(例如协议的默认端口号)自动检测它。
所有这些函数的连接数据可以指定为类似 URI 的连接字符串,也可以指定为键值对字典。您可以使用分配给变量的变量来访问返回的会话对象。此示例展示了如何使用 mysql.getClassicSession()
函数打开经典 MySQL 协议连接,该函数返回一个 ClassicSession
对象来表示该连接
mysql-js> var s1 = mysql.getClassicSession('user@localhost:3306', 'password');
mysql-js> s1
<ClassicSession:user@localhost:3306>
此示例展示了如何在 Python 模式下使用 shell.openSession()
打开需要压缩的 X 协议连接。返回一个 Session
对象
mysql-py> s2 = shell.open_session('mysqlx://user@localhost:33060?compression=required', 'password')
mysql-py> s2
<Session:user@localhost:33060>
您在 JavaScript 模式下使用这些函数创建的会话对象只能在 JavaScript 模式下使用,如果在 Python 模式下创建会话对象,则情况相同。您不能在 SQL 模式下创建多个会话对象。虽然您只能在创建会话对象的模式下使用其分配的变量来引用它们,但是您可以在任何模式下使用 shell.setSession()
方法将您创建并分配给变量的会话对象设置为 session
全局对象。例如
mysql-js> var s3 = mysqlx.getSession('user@localhost:33060', 'password');
mysql-js> s3
<Session:user@localhost:33060>
mysql-js> shell.setSession(s3);
<Session:user@localhost:33060>
mysql-js> session
<Session:user@localhost:33060>
mysql-js> shell.status();
shell.status()
MySQL Shell version 8.1.0-commercial
Connection Id: 9
Current schema:
Current user: root@localhost
SSL: Cipher in use: TLS_AES_256_GCM_SHA384 TLSv1.3
Using delimiter: ;
Server version: 8.1.0-commercial MySQL Enterprise Server - Commercial
Protocol version: Classic 10
Client library: 8.1.0
Connection: localhost via TCP/IP
TCP port: 3306
Server characterset: utf8mb4
Schema characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
Result characterset: utf8mb4
Compression: Disabled
Uptime: 9 hours 42 min 5.0000 sec
Threads: 2 Questions: 61 Slow queries: 0 Opens: 176 Flush tables: 3 Open tables: 95 Queries per second avg: 0.001
会话对象 s3
现在可以使用 session
全局对象访问,因此它表示的 X 协议连接可以从任何 MySQL Shell 模式访问:SQL 模式、JavaScript 模式和 Python 模式。现在还可以使用 shell.status()
方法显示此连接的详细信息,该方法仅显示 session
全局对象表示的连接的详细信息。如果 MySQL Shell 实例有一个或多个打开的连接,但没有一个被设置为 session
全局对象,则 shell.status()
方法返回 “未连接”。
您使用 shell.setSession()
设置的会话对象将替换设置为 session
全局对象的任何现有会话对象。如果替换的会话对象最初是使用 mysqlx
或 mysql
函数之一或 shell.openSession()
创建并分配给变量的,则它仍然存在,并且其连接保持打开状态。您可以在最初创建它的 MySQL Shell 模式下继续使用此连接,并且您可以随时使用 shell.setSession()
再次将其设置为 session
全局对象。如果替换的会话对象是使用 shell.connect()
方法创建并分配给变量的,则情况相同。如果替换的会话对象是在启动 MySQL Shell 时创建的,或者使用 \connect
命令创建的,或者使用 shell.connect()
方法创建但没有分配给变量的,则其连接将关闭,并且如果您想再次使用它,则必须重新创建该会话对象。