先 mark 记录一下。

log_bin_compress——这个配置决定了是否可以压缩二进制日志。这个增强功能是 MariaDB 独有的,因此 MySQL 不支持。

https://www.infoq.cn/article/mariadb-vs-mysql

binlog压缩 为了减小binlog的存储开销。在TenDB中,基于ZLIB算法实现了binlog压缩的功能。该功能可以在运行中开启和关闭,并且适用于statement,row,mixed格式。

压缩 开启Binlog压缩:

```shell

set global log_bin_compress=ON ```

Binlog压缩阈值:

```shell

set global log_bin_compress_min_len=256 ```

在开启压缩功能的前提下,binlog字段长度大于256的event,符合压缩条件。

经过测试,在通常情况下,启用binlog压缩功能,可以达到7-9的压缩比。是以CPU为代价缓解了IO压力的良好实践。

解压 有两种解压的方式可以选择:

让binlog在IO线程中解压:

```shell

set global relay_log_uncompress = ON ```

让binlog在sql线程中解压:

```shell

set global relay_log_uncompress = OFF ```

如果slave机器,relay-log空间够,可以set global relay_log_uncompress=ON(默认配置),在binlog在IO线程中解压。 如果slave机器,relay-log空间不够,可以set global relay_log_uncompress=OFF,让binlog在sql线程中解压,但是这样可能会导致sql线程变慢。 但slave都有并行同步能力,所以在sql线程解压一般不会对运行速度有很大影响。

兼容性

新增了4种事件类型: QUERY_COMPRESSED_EVENT表示statement格式下压缩后的DML事件; WRITE_ROWS_COMPRESSED_EVENT,UPDATE_ROWS_COMPRESSED_EVENT和DELETE_ROWS_COMPRESSED_EVENT分别表示row格式下插入,更新和删除在压缩后的事件。

推荐使用TenDB的mysqlbinlog工具进行binlog操作。

https://tendbcluster.com/book-cn/Documentation/tendb/binlog-compress.html

log_bin_compress https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#log_bin_compress

log_bin_compress_min_len https://mariadb.com/kb/en/replication-and-binary-log-system-variables/#log_bin_compress_min_len

https://mysql.wisborg.dk/2020/05/07/mysql-compressed-binary-logs/

https://mariadb.com/kb/en/authentication-plugins/

https://mariadb.com/kb/en/caching_sha2_password-authentication-plugin/