对于 X 协议连接和经典 MySQL 协议连接,每当您创建会话对象来管理与 MySQL 服务器实例的连接时,您都可以指定该连接是否需要、首选或禁用压缩。
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
系统变量(限制压缩 (zlib) 压缩的最大压缩级别)设置为默认值 5,则服务器使用允许的最高压缩级别 5。
如果 MySQL 服务器实例不支持协议的连接压缩(在 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 协议连接,您可以按任何组合和优先顺序使用zlib
、lz4
和zstd
。对于经典 MySQL 协议连接,您可以按任何组合和优先顺序使用zlib
和zstd
。以下经典 MySQL 协议连接示例只允许 zstd 算法$> mysqlsh --mysql -u user -h localhost -C preferred --compression-algorithms=zstd
您也可以仅使用
--compression-algorithms
而不使用--compress
(-C
) 选项来请求压缩。在这种情况下,如果您希望允许未压缩连接,请在算法列表中添加uncompressed
,否则请省略它。这种连接压缩控制方式与其他 MySQL 客户端(如 mysql 和 mysqlbinlog)兼容。以下经典 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
为 zstd 算法指定 1 到 22 之间的整数压缩级别,并且与其他 MySQL 客户端(如 mysql 和 mysqlbinlog)兼容。例如,以下 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
参数的情况下使用compression-algorithms
参数,包括或省略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
参数的情况下使用compression-algorithms
参数,包括或省略uncompressed
选项来允许或不允许未压缩连接。