對於 X Protocol 連線和傳統 MySQL 通訊協定連線,每當您建立工作階段物件來管理與 MySQL 伺服器執行個體的連線時,您可以指定該連線是否需要、偏好或停用壓縮。
required
會向伺服器請求壓縮連線,如果伺服器不支援壓縮或無法與 MySQL Shell 就壓縮通訊協定達成一致,則連線會失敗。preferred
會向伺服器請求壓縮連線,如果伺服器不支援壓縮或無法與 MySQL Shell 就壓縮通訊協定達成一致,則會回復為未壓縮連線。這是 X Protocol 連線的預設值。disabled
會請求未壓縮連線,如果伺服器只允許壓縮連線,則連線會失敗。這是傳統 MySQL 通訊協定連線的預設值。
您也可以選擇允許連線使用哪些壓縮演算法。依預設,MySQL Shell 會向伺服器建議 zlib、LZ4 和 zstd 演算法用於 X Protocol 連線,以及 zlib 和 zstd 演算法用於傳統 MySQL 通訊協定連線 (不支援 LZ4 演算法)。您可以指定這些演算法的任何組合。您指定壓縮演算法的順序是 MySQL Shell 建議它們的偏好順序,但伺服器可能不會受到此偏好的影響,這取決於通訊協定和伺服器組態。
指定任何壓縮演算法或它們的組合會自動請求連線壓縮,因此您可以這麼做,而不是使用單獨的參數來指定是否需要、偏好或停用壓縮。使用此連線壓縮控制方法,您可以透過將 uncompressed
選項 (允許未壓縮連線) 新增至壓縮演算法清單,來指出是否偏好或需要壓縮。如果您包含 uncompressed
,則會偏好壓縮,如果您不包含它,則需要壓縮。您也可以單獨傳遞 uncompressed
來指定停用壓縮。如果您在單獨的參數中指定需要、偏好或停用壓縮,則這會優先於在壓縮演算法清單中使用 uncompressed
。
您也可以指定連線的數值壓縮層級,這適用於 X Protocol 連線的任何壓縮演算法,或僅適用於傳統 MySQL 通訊協定連線上的 zstd 演算法。對於 X Protocol 連線,如果指定的壓縮層級對於最終選定的演算法伺服器無法接受,則伺服器會根據使用 X Plugin 的連線壓縮中列出的行為選擇適當的設定。例如,如果 MySQL Shell 為 zlib 演算法請求壓縮層級 7,且伺服器的mysqlx_deflate_max_client_compression_level
系統變數 (限制 deflate 或 zlib 壓縮的最大壓縮層級) 設定為預設值 5,則伺服器會使用允許的最高壓縮層級 5。
如果 MySQL 伺服器執行個體不支援通訊協定的連線壓縮 (在 MySQL 8.0.19 之前的 X Protocol 連線就是如此),或者如果它支援連線壓縮但不支援指定連線演算法和壓縮層級,則 MySQL Shell 會建立連線,而不指定不支援的參數。
若要請求連線壓縮,請使用下列其中一種方法
-
如果您從命令列啟動 MySQL Shell 並使用單獨的命令選項指定連線參數,請使用
--compress
(-C
) 選項,指定該連線是否需要、偏好或停用壓縮。例如$> mysqlsh --mysqlx -u user -h localhost -C required
--compress
(-C
) 選項與較早版本的 MySQL Shell (回溯至 MySQL 8.0.14) 相容,並且仍然接受這些版本的布林值設定。如果您只指定--compress
(-C
) 而不指定參數,則連線需要壓縮。上述 X Protocol 連線範例會依偏好順序向伺服器建議 zlib、LZ4 和 zstd 演算法。如果您偏好壓縮演算法的替代組合,您可以使用
--compression-algorithms
選項指定一個字串,其中包含以逗號分隔的允許演算法清單來指定。對於 X Protocol 連線,您可以使用zlib
、lz4
和zstd
的任何組合和偏好順序。對於傳統 MySQL 通訊協定連線,您可以使用zlib
和zstd
的任何組合和偏好順序。下列傳統 MySQL 通訊協定連線範例僅允許 zstd 演算法$> mysqlsh --mysql -u user -h localhost -C preferred --compression-algorithms=zstd
您也可以只使用
--compression-algorithms
,而不使用--compress
(-C
) 選項來請求壓縮。在這種情況下,如果您想要允許未壓縮連線,請將uncompressed
新增至演算法清單,如果您不想允許未壓縮連線,則省略它。這種連線壓縮控制樣式與其他 MySQL 用戶端 (例如 mysql 和 mysqlbinlog) 相容。下列傳統 MySQL 通訊協定連線範例與上述範例具有相同的效果,其中preferred
指定為單獨的選項,也就是說,使用 zstd 演算法建議壓縮,但回復為未壓縮連線$> mysqlsh --mysql -u user -h localhost --compression-algorithms=zstd,uncompressed
您可以使用
--compression-level
或--zstd-compression-level
選項來設定壓縮層級,這會針對傳統 MySQL 通訊協定連線進行驗證,但不針對 X Protocol 連線進行驗證。--compression-level
會指定 X Protocol 連線的任何演算法的壓縮層級整數,或者僅針對傳統 MySQL 通訊協定連線的 zstd 演算法指定。--zstd-compression-level
會為 zstd 演算法指定 1 到 22 的整數作為壓縮層級,並且與其他 MySQL 用戶端 (例如 mysql 和 mysqlbinlog) 相容。例如,這些 X Protocol 連線的連線參數指定全域工作階段需要壓縮,並且必須使用 LZ4 或 zstd 演算法,且要求的壓縮層級為 5$> mysqlsh --mysqlx -u user -h localhost -C required --compression-algorithms=lz4,zstd --compression-level=5
-
如果您使用類似 URI 的連線字串來指定連線參數,無論是從命令列,還是使用 MySQL Shell 的
\connect
命令,或是使用shell.connect()
、shell.openSession()
、mysqlx.getSession()
、mysql.getSession()
或mysql.getClassicSession()
函數,請使用查詢字串中的compression
參數來指定是否需要、偏好或停用壓縮。例如mysql-js> \connect user@example.com?compression=preferred
$> mysqlsh mysqlx://user@localhost:33060?compression=disabled
使用
compression-algorithms
參數選取壓縮演算法,並使用compression-level
參數選取壓縮層級,就像命令列選項一樣。(類似 URI 的連線字串沒有 zstd 專用的壓縮層級參數。)您也可以在不使用compression
參數的情況下使用compression-algorithms
參數,包含或省略uncompressed
選項以允許或不允許未壓縮連線。例如,這兩組連線參數都指定偏好壓縮但允許未壓縮連線,可接受 zlib 和 zstd 演算法,並且應使用壓縮層級 4mysql-js> \connect user@example.com:33060?compression=preferred&compression-algorithms=zlib,zstd&compression-level=4
mysql-js> \connect user@example.com:33060?compression-algorithms=zlib,zstd,uncompressed&compression-level=4
-
如果您使用鍵/值組來指定連線參數,無論是使用 MySQL Shell 的
\connect
命令,還是使用shell.connect()
、shell.openSession()
、mysqlx.getSession()
、mysql.getSession()
或mysql.getClassicSession()
函數,請使用選項字典中的compression
參數來指定是否需要、偏好或停用壓縮。例如mysql-js> var s1=mysqlx.getSession({host: 'localhost', user: 'root', password: 'password', compression: 'required'});
如同命令列和類似 URI 連接字串的方法,您可以使用
compression-algorithms
參數來選擇壓縮演算法,並使用compression-level
參數來選擇壓縮等級。(對於鍵值對,沒有針對 zstd 的特定壓縮等級參數。)您也可以在不使用compression
參數的情況下使用compression-algorithms
參數,並包含或省略uncompressed
選項來允許或禁止未壓縮的連線。