文档首页
MySQL 9.0 参考手册
相关文档 下载此手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  连接压缩控制

6.2.8 连接压缩控制

与服务器的连接可以使用客户端和服务器之间的通信流量的压缩来减少通过连接发送的字节数。默认情况下,连接是不压缩的,但如果服务器和客户端在相互允许的压缩算法上达成一致,则可以压缩。

压缩连接源自客户端,但会影响客户端和服务器两端的 CPU 负载,因为两端都会执行压缩和解压缩操作。由于启用压缩会降低性能,因此它的好处主要是在网络带宽较低、网络传输时间占压缩和解压缩操作成本的主要部分以及结果集较大的情况下。

本节介绍可用的压缩控制配置参数以及用于监控压缩使用情况的信息源。它适用于经典的 MySQL 协议连接。

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

注意

与 MySQL 服务器实例的 X 协议连接支持压缩,但 X 协议连接的压缩独立于此处描述的经典 MySQL 协议连接的压缩,并且是单独控制的。有关 X 协议连接压缩的信息,请参见第 22.5.5 节“使用 X 插件进行连接压缩”

配置连接压缩

以下配置参数可用于控制连接压缩

允许指定压缩算法的配置参数是字符串值的,并采用一个或多个以逗号分隔的压缩算法名称列表,以任意顺序,从以下项目中选择(不区分大小写)

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

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

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

注意

由于 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 语法用于变量赋值”

  • 要仅允许使用 zstd 压缩的传入连接,请在启动时这样配置服务器

    [mysqld]
    protocol_compression_algorithms=zstd

    或者,要在运行时进行更改

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

    mysql --compression-algorithms=zlib,uncompressed
  • 要配置副本使用 zlibzstd 连接连接到源,对于 zstd 连接,压缩级别为 7,请使用 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 负载之间进行选择。更高的压缩级别会减少网络拥塞,但额外的 CPU 负载可能会降低服务器性能。

配置旧版连接压缩

在 MySQL 8.0.18 之前,可以使用以下配置参数来控制连接压缩

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

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

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

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

从 MySQL 8.0.18 开始,上面描述的压缩参数成为旧版参数,这是由于引入了额外的压缩参数来更有效地控制连接压缩,这些参数在 配置连接压缩 中描述。MySQL Shell 除外,其中 --compress 命令行选项仍然是当前的,可以用来请求压缩,而无需选择压缩算法。有关 MySQL Shell 连接压缩控制的信息,请参阅 使用压缩连接

旧版压缩参数与较新的参数交互,它们的语义会发生以下变化

监控连接压缩

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

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 文件存在,它也包含这些值的线。