Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Connection Compression Control

6.2.8 连接压缩控制

到服务器的连接可以在客户端和服务器之间的流量上使用压缩,以减少通过连接发送的字节数。默认情况下,连接是未压缩的,但如果服务器和客户端同意使用共同允许的压缩算法,则可以压缩。

压缩连接来自客户端,但影响客户端和服务器两侧的 CPU 负载,因为两侧都执行压缩和解压缩操作。由于启用压缩会降低性能,因此其益处主要发生在网络带宽较低、网络传输时间占主导地位、压缩和解压缩操作成本高、结果集很大的情况下。

本节描述了可用的压缩控制配置参数和监控压缩使用的信息来源。它适用于经典的 MySQL 协议连接。

压缩控制适用于来自客户端程序的服务器连接和参与源/副本复制或组复制的服务器连接。压缩控制不适用于 FEDERATED 表的连接。在以下讨论中,客户端连接 是指来自任何支持压缩的来源的服务器连接,除非上下文指明特定的连接类型。

Note

X 协议连接到 MySQL 服务器实例支持压缩,但 X 协议连接的压缩独立于这里描述的经典 MySQL 协议连接的压缩,并单独控制。请参阅 第 22.5.5 节,“使用 X 插件的连接压缩” 以获取 X 协议连接压缩的信息。

配置连接压缩

这些配置参数可用于控制连接压缩:

配置参数启用指定压缩算法是字符串值,采用一个或多个以逗号分隔的压缩算法名称列表,来自以下项目(不区分大小写):

  • zlib:允许使用 zlib 压缩算法的连接。

  • zstd:允许使用 zstd 压缩算法的连接。

  • uncompressed:允许未压缩的连接。

Note

因为 uncompressed 是一个算法名称,可以配置 MySQL 允许未压缩的连接。

示例:

  • 要配置服务器允许的压缩算法,设置 protocol_compression_algorithms 系统变量。默认情况下,服务器允许所有可用的算法。要在启动时显式配置该设置,使用以下行在服务器 my.cnf 文件中:

    [mysqld]
    protocol_compression_algorithms=zlib,zstd,uncompressed

    要设置并持久化 protocol_compression_algorithms 系统变量到该值,在运行时使用以下语句:

    SET PERSIST protocol_compression_algorithms='zlib,zstd,uncompressed';

    SET PERSIST 设置一个值为当前 MySQL 实例。它还保存该值,使其在后续服务器重新启动时保持不变。要更改当前 MySQL 实例的值,而不使其在后续重新启动时保持不变,请使用 GLOBAL 关键字而不是 PERSIST。请参阅 第 15.7.6.1 节,“SET 语法 for 变量赋值”

  • 要仅允许使用 zstd 压缩的入站连接,配置服务器启动时如下:

    [mysqld]
    protocol_compression_algorithms=zstd

    或,在运行时进行更改:

    SET PERSIST protocol_compression_algorithms='zstd';
  • 要允许 mysql 客户端启动 zlibuncompressed 连接,请像这样调用它:

    mysql --compression-algorithms=zlib,uncompressed
  • 要使用 zlibzstd 连接配置副本连接到源,使用压缩级别 7 的 zstd 连接,使用 CHANGE REPLICATION SOURCE TO 语句:

    CHANGE REPLICATION SOURCE TO
      SOURCE_COMPRESSION_ALGORITHMS = 'zlib,zstd',
      SOURCE_ZSTD_COMPRESSION_LEVEL = 7;

    这假设 replica_compressed_protocol 系统变量被禁用,原因在 配置遗留连接压缩 中描述。

为了成功设置连接,连接的两端必须同意一个共同的压缩算法。算法协商过程尝试使用 zlib,然后 zstd,然后 uncompressed。如果两端找不到共同的算法,连接尝试将失败。

因为两端必须同意压缩算法,并且 uncompressed 是一个算法值,不一定是允许的,因此回退到未压缩连接不一定会发生。例如,如果服务器配置为允许 zstd,而客户端配置为允许 zlib,uncompressed,客户端无法连接。在这种情况下,两端没有共同的算法,因此连接尝试将失败。

配置参数可以指定 zstd 压缩级别,取值范围为 1 到 22,较大的值表示增加的压缩级别。默认的 zstd 压缩级别为 3。压缩级别设置对不使用 zstd 压缩的连接没有影响。

可配置的 zstd 压缩级别使您可以在网络流量和 CPU 负载之间进行选择。较高的压缩级别可以减少网络拥塞,但增加的 CPU 负载可能会降低服务器性能。

配置遗留连接压缩

在 MySQL 8.0.18 之前,这些配置参数可用于控制连接压缩:

  • 客户端程序支持 --compress 命令行选项,以指定连接到服务器的压缩使用。

  • 对于使用 MySQL C API 的程序,启用 MYSQL_OPT_COMPRESS 选项对于 mysql_options() 函数指定了连接到服务器的压缩使用。

  • 对于源/副本复制,启用系统变量 replica_compressed_protocol 指定了副本连接到源的压缩使用。

在每种情况下,当指定使用压缩时,连接使用 zlib 压缩算法,如果双方都允许,否则回退到未压缩的连接。

从 MySQL 8.0.18 开始,上述压缩参数变为遗留参数,因为引入了更多的压缩参数来控制连接压缩,如 配置连接压缩 中所述。一个例外是 MySQL Shell,其中 --compress 命令行选项仍然是当前的,可以用来请求压缩而不选择压缩算法。有关 MySQL Shell 的连接压缩控制,请参阅 使用压缩连接

遗留压缩参数与新的参数交互,语义如下所示:

监控连接压缩

状态变量 CompressionONOFF,以指示当前连接是否使用压缩。

使用 mysql 客户端 \status 命令将显示一行,表明当前连接是否启用压缩:Protocol: Compressed。如果该行不存在,则连接未压缩。

MySQL Shell \status 命令将显示一行:Compression:,表明连接是否启用压缩:DisabledEnabled

以下是监控连接压缩的其他信息来源:

  • 要监控客户端连接的压缩使用情况,可以使用 Compression_algorithmCompression_level 状态变量。对于当前连接,这些值分别表明压缩算法和压缩级别。

  • 要确定服务器配置的压缩算法,可以检查 protocol_compression_algorithms 系统变量。

  • 对于源/副本复制连接,配置的压缩算法和压缩级别可以从多个来源获取:

    • 性能模式 replication_connection_configuration 表具有 COMPRESSION_ALGORITHMSZSTD_COMPRESSION_LEVEL 列。

    • 系统表 mysql.slave_master_info 具有 Master_compression_algorithmsMaster_zstd_compression_level 列。如果 master.info 文件存在,也包含这些值的行。