Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

6.2.8 连接压缩控制

客户端和服务器之间的流量可以使用压缩来减少传输的字节数量。默认情况下,连接是未压缩的,但如果服务器和客户端都允许某种压缩算法,可以压缩连接。

压缩连接始于客户端,但是对客户端和服务器都产生CPU负载,因为双方都执行压缩和解压操作。启用压缩降低性能,主要在网络带宽很小、网络传输时间占据压缩和解压操作成本的比例很高且结果集很大的情况下才有利。

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

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

Note

MySQL 服务器实例支持 X 协议连接的压缩,但是 X 协议连接的压缩独立于 classic MySQL 协议连接的压缩,且由单独控制。有关 X 协议连接压缩的信息,请参阅第22.5.5节,“X 插件连接压缩”

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

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

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

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

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

Note

因为uncompressed是可能配置的算法名称,因此可能不允许未压缩的连接。

示例:

  • 要配置服务器允许哪些压缩算法的 incoming 连接,设置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节,“变量赋值语法”

  • 要允许只使用zstd压缩的 incoming 连接,配置服务器启动时这样:

    [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并不是一定被允许的算法值,因此不一定会 fallback 到未压缩连接。例如,如果服务器配置了zstd,客户端配置了zlib,uncompressed,那么客户端就不能连接。在这种情况下,没有共同的算法,所以连接尝试失败。

可以指定zstd压缩级别的配置参数需要整数值,从1到22,较大的值表示更高的压缩级别。默认的zstd压缩级别是3。压缩级别设置对不使用zstd压缩的连接无效。

可配置的zstd压缩级别使得可以选择更少网络流量和更高CPU负载 versus 更多网络流量和更低CPU负载。较高的压缩级别减少网络拥堵,但额外的CPU负载可能会降低服务器性能。

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

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

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

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

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

从 MySQL 8.0.18 起,这些描述的压缩参数变为遗留参数,因为引入了更多控制连接压缩的参数,详见配置连接压缩。一个例外是 MySQL Shell,where the --compress 命令行选项仍然有效,可以用于请求压缩而不选择压缩算法。关于 MySQL Shell 的连接压缩控制,见使用压缩连接

遗留压缩参数与新参数相互作用,语义如下:

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

MySQL 命令行客户端mysql\status命令显示当前连接是否启用压缩,如果没有该行,表示连接未压缩。

MySQL Shell 的\status命令显示一个Compression:行,表示连接是否启用压缩。

监控连接压缩的这些额外信息可用: