MySQL Shell 9.0  /  ...  /  MySQL Shell 的壓縮控制

4.3.7.1 MySQL Shell 的壓縮控制

對於 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 連線,您可以使用 zliblz4zstd 的任何組合和優先順序。對於傳統 MySQL 通訊協定連線,您可以使用 zlibzstd 的任何組合和優先順序。以下傳統 MySQL 通訊協定連線的範例僅允許 zstd 演算法

    $> mysqlsh --mysql -u user -h localhost -C preferred --compression-algorithms=zstd

    您也可以只使用 --compression-algorithms 而不使用 --compress (-C) 選項來請求壓縮。在這種情況下,如果您想要允許未壓縮的連線,請將 uncompressed 新增至演算法清單,如果您不想允許它們,則省略它。這種連線壓縮控制樣式與其他 MySQL 用戶端 (例如 mysqlmysqlbinlog) 相容。以下傳統 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 用戶端 (例如 mysqlmysqlbinlog) 相容。例如,這些 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 選項以允許或禁止未壓縮的連線。