您可以使用 JavaScript 和 Python 模式中可用的函式,建立您選擇的類型的多個會話物件,並將其指派給變數。這些會話物件可讓您建立和管理並行連線,從單一 MySQL Shell 執行個體以多種方式使用多個 MySQL 伺服器執行個體,或與同一個執行個體搭配使用。
建立會話物件的函式可在 mysqlx
和 mysql
JavaScript 和 Python 模組中使用。這些模組必須在使用前匯入,當 MySQL Shell 在互動模式中使用時,會自動完成此操作。函式 mysqlx.getSession()
使用指定的連線資料開啟與 MySQL 伺服器執行個體的 X Protocol 連線,並傳回一個 Session
物件來表示連線。函式 mysql.getClassicSession()
和 mysql.getSession()
使用指定的連線資料開啟與 MySQL 伺服器執行個體的傳統 MySQL 通訊協定連線,並傳回一個 ClassicSession
物件來表示連線。透過這些函式,MySQL Shell 使用的連線通訊協定內建於函式中,而不是使用單獨的選項來選擇,因此您必須選擇適當的函式來符合連接埠的正確通訊協定。
MySQL Shell 在 shell
全域物件中提供了 openSession()
方法,該方法可以在 JavaScript 或 Python 模式中使用。shell.openSession()
可以同時使用 X Protocol 和傳統 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 Protocol 連線。會傳回 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
現在可以使用 session
全域物件來使用會話物件 s3
,因此可以從 MySQL Shell 的任何模式存取它所代表的 X Protocol 連線: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()
方法建立,但未將其指派給變數,則其連線會關閉,如果您想再次使用它,必須重新建立會話物件。