對於 X Protocol 連線和傳統 MySQL 通訊協定連線,當您建立工作階段物件來管理與 MySQL Server 執行個體的連線時,您可以指定該連線是否需要、偏好或停用壓縮。
required
會向伺服器請求壓縮連線,如果伺服器不支援壓縮或無法與 MySQL Shell 就壓縮協定達成一致,則連線會失敗。preferred
會向伺服器請求壓縮連線,如果伺服器不支援壓縮或無法與 MySQL Shell 就壓縮協定達成一致,則會回復為未壓縮的連線。這是 X Protocol 連線的預設設定。disabled
會請求未壓縮的連線,如果伺服器僅允許壓縮連線,則連線會失敗。這是傳統 MySQL 通訊協定連線的預設設定。
您也可以選擇允許連線使用的壓縮演算法。依預設,MySQL Shell 會針對 X Protocol 連線向伺服器提議 zlib、LZ4 和 zstd 演算法,並針對傳統 MySQL 通訊協定連線提議 zlib 和 zstd 演算法 (這些連線不支援 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 伺服器執行個體不支援該通訊協定的連線壓縮 (X Protocol 連線在 MySQL 8.0.19 之前就是如此),或者如果它支援連線壓縮但不支援指定連線演算法和壓縮層級,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-algorithms
參數而不用compression
參數,包含或省略uncompressed
選項以允許或禁止未壓縮的連線。例如,以下這兩組連線參數都指定偏好壓縮,但也允許未壓縮連線,可接受的演算法為 zlib 和 zstd,並應使用壓縮等級 4。mysql-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'});
使用
compression-algorithms
參數選擇壓縮演算法,並使用compression-level
參數選擇壓縮等級,如同命令列和 URI 類型的連線字串方法。(對於鍵值對,沒有 zstd 特有的壓縮等級參數。)您也可以使用compression-algorithms
參數而不用compression
參數,包含或省略uncompressed
選項以允許或禁止未壓縮的連線。