Documentation Home
MySQL 外壳 8.0  / 第 4 章 MySQL Shell 入门  / 4.3 MySQL Shell 连接  / 4.3.6 使用压缩连接  /  4.3.6.1 MySQL Shell 8.0.20及以后的压缩控制

4.3.6.1 MySQL Shell 8.0.20及以后的压缩控制

从 MySQL Shell 8.0.20 开始,对于 X 协议连接和经典 MySQL 协议连接,每当您创建会话对象来管理与 MySQL 服务器实例的连接时,您都可以指定该连接是否需要、首选或禁用压缩。

  • required向服务器请求压缩连接,如果服务器不支持压缩或无法与 MySQL Shell 就压缩协议达成一致,则连接失败。

  • preferred从服务器请求压缩连接,如果服务器不支持压缩或不能与 MySQL Shell 就压缩协议达成一致,则回退到未压缩连接。这是 X 协议连接的默认值。

  • disabled请求未压缩的连接,如果服务器仅允许压缩连接,则连接失败。这是经典 MySQL 协议连接的默认设置。

从 MySQL Shell 8.0.20 开始,您还可以选择允许连接的压缩算法。默认情况下,MySQL Shell 为 X Protocol 连接向服务器推荐 zlib、LZ4 和 zstd 算法,为经典 MySQL 协议连接(不支持 LZ4 算法)推荐 zlib 和 zstd 算法。您可以指定这些算法的任意组合。您指定压缩算法的顺序是 MySQL Shell 建议它们的优先顺序,但服务器可能不受此优先级的影响,具体取决于协议和服务器配置。

指定任何压缩算法或它们的组合会自动请求对连接进行压缩,因此您可以这样做而不是使用单独的参数来指定是否需要、首选或禁用压缩。uncompressed使用这种连接压缩控制方法,您可以通过将选项(允许未压缩的连接)添加到压缩算法列表来指示压缩是必需的还是首选。如果包含uncompressed,则首选压缩,如果不包含,则需要压缩。也可以传入 uncompressed单独指定压缩被禁用。如果您在单独的参数中指定压缩是必需的、首选的或禁用的,则这优先 uncompressed于在压缩算法列表中使用。

您还可以为连接指定数字压缩级别,这适用于 X 协议连接的任何压缩算法,或仅适用于经典 MySQL 协议连接的 zstd 算法。对于 X 协议连接,如果服务器最终选择的算法不接受指定的压缩级别,则服务器会根据Connection Compression with X Plugin中列出的行为选择适当的设置 。例如,如果 MySQL Shell 请求 zlib 算法的压缩级别为 7,则服务器的 mysqlx_deflate_max_client_compression_level 系统变量(限制 deflate 或 zlib 压缩的最大压缩级别)设置为默认值 5,服务器使用允许的最高压缩级别 5。

如果 MySQL 服务器实例不支持协议的连接压缩(X 协议连接在 MySQL 8.0.19 之前就是这种情况),或者如果它支持连接压缩但不支持指定连接算法和压缩级别,则 MySQL Shell 建立连接而不指定不支持的参数。

要从 MySQL Shell 8.0.20 请求压缩连接,请使用以下方法之一:

  • 如果您从命令行启动 MySQL Shell 并使用单独的命令选项指定连接参数,请使用 --compress ( -C) 选项,指定连接是否需要、首选或禁用压缩。例如:

    $> mysqlsh --mysqlx -u user -h localhost -C required

    ( ) 选项与早期版本的 MySQL Shell(回到 MySQL 8.0.14)兼容,并且仍然接受这些版本的布尔设置--compress-C从 MySQL Shell 8.0.20 开始,如果您只指定 --compress ( -C) 而没有参数,则连接需要压缩。

    上面的 X 协议连接示例按照优先顺序向服务器建议 zlib、LZ4 和 zstd 算法。如果您更喜欢压缩算法的替代组合,您可以通过使用 --compression-algorithms选项指定一个字符串来指定它,该字符串包含以逗号分隔的允许算法列表。对于 X 协议连接,您可以 按任意组合和优先顺序使用zliblz4和 。zstd对于经典的 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 协议连接。 --compression-level为 X 协议连接的任何算法或仅在经典 MySQL 协议连接上的 zstd 算法指定压缩级别的整数。 --zstd-compression-levelzstd算法的压缩级别指定1到22的整数,兼容mysqlmysqlbinlog等其他MySQL客户端. 例如,X 协议连接的这些连接参数指定全局会话需要压缩并且必须使用 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 允许或禁止未压缩连接的选项。