MySQL Shell 9.0  /  ...  /  MySQL Shell 压缩控制

4.3.7.1 MySQL Shell 压缩控制

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

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

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

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

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

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

您还可以为连接指定一个数字压缩级别,该级别适用于 X 协议连接的任何压缩算法,或仅适用于经典 MySQL 协议连接上的 zstd 算法。对于 X 协议连接,如果指定的压缩级别对于最终选择的算法来说服务器不可接受,则服务器会根据 使用 X 插件进行连接压缩 中列出的行为选择一个合适的设置。例如,如果 MySQL Shell 请求对 zlib 算法进行 7 级压缩,并且服务器的 mysqlx_deflate_max_client_compression_level 系统变量(它限制了 deflate 或 zlib 压缩的最大压缩级别)设置为默认的 5,则服务器使用允许的最大压缩级别 5。

如果 MySQL Server 实例不支持该协议的连接压缩(在 MySQL 8.0.19 之前的 X 协议连接中就是这种情况),或者它支持连接压缩但不支持指定连接算法和压缩级别,则 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 协议连接示例以该顺序优先向服务器建议 zlib、LZ4 和 zstd 算法。如果您更喜欢其他压缩算法组合,则可以使用 --compression-algorithms 选项指定一个带有逗号分隔的允许算法列表的字符串。对于 X 协议连接,您可以以任何组合和优先顺序使用 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 协议连接。--compression-level 指定一个整数,表示 X 协议连接的任何算法的压缩级别,或者仅表示经典 MySQL 协议连接上的 zstd 算法的压缩级别。--zstd-compression-level 指定一个介于 1 到 22 之间的整数,表示 zstd 算法的压缩级别,并且与其他 MySQL 客户端(如 mysqlmysqlbinlog)兼容。例如,这些 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 [email protected]?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 [email protected]:33060?compression=preferred&compression-algorithms=zlib,zstd&compression-level=4
    mysql-js> \connect [email protected]: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 选项来允许或不允许未压缩连接。