Mariadb 10.11 compression plugin的配置问题


Mariadb 10.11修改了一些配置要求,使得原本在mariadb 10.6版本下能够使用的lz4压缩配置行不通了。本文主要讨论如何在避免安装官方mariadb-plugin-provider-lz4插件的情况下启用lz4(以及lzo, snappy, lzma, bz2)压缩算法。


以lz4为例

下面的例子用的是lz4,且mariadb为自己cmake编译的版本(而不是官方deb发行版)

lzo, snappy, lzma, bz2同理,见本文后半部分。

🔗 [InnoDB Page Compression - MariaDB Knowledge Base] https://mariadb.com/kb/en/innodb-page-compression/

之前在使用mariadb 10.6.x时,启用lz4插件的逻辑为:

(注意:这个方法在mariadb 10.11已经行不通了)

1: 安装lz4依赖:$ apt install liblz4-dev

2: 编译mariadb,并正常走编译安装的流程

3: 直接在配置文件my.cnf里面加入:

[mariadb]
innodb_compression_default=ON
innodb_file_format='Barracuda'
innodb_default_row_format='dynamic'
innodb_compression_algorithm='lz4'

4: 重启mariadb,完成


但是在升级到mariadb 10.11以后上面的老办法行不通了,按官方教程安装mariadb-plugin-provider-lz4差点把整个环境搞崩(因为mariadb-plugin-provider-lz4和mariadb-client, mariadb-server的deb发行版绑定依赖)

后来开了个docker虚拟机看看上面这条apt命令到底在干什么,终于发现了猫腻(在/etc/mysql/mariadb.conf.d/provider_lz4.cnf里面能够找到)。

现在需要这么做:

1: 安装lz4依赖:$ apt install liblz4-dev

2: 编译mariadb,并正常走编译安装的流程

2.5:检查插件文件 provider_lz4.so 被正确编译:假设cmake的自定义安装路径为/usr/local/mariadb,那么编译安装完成后应该能找到一个叫 /usr/local/mariadb/lib/plugin/provider_lz4.so 的文件。

3: 在执行mysql_install_db以及启动mariadb之前,先把所有和lz4相关的my.cnf配置都暂时注释掉(这是为了能用root登陆)。总之,只要能root登陆就行。

4:启动mariadb,用root登陆进去,执行: INSTALL SONAME 'provider_lz4'; ,然后退出登陆

5:现在可以修改my.cnf配置文件里的内容了:

# 新增
[server]
plugin_load_add=provider_lz4
provider_lz4=force_plus_permanent


# 原本的配置不变
[mariadb]
innodb_compression_default=ON
innodb_file_format='Barracuda'
innodb_default_row_format='dynamic'
innodb_compression_algorithm='lz4'

6:修改完my.cnf以后重启mariadb即可


lzo, snappy, lzma, bz2, lz4

这些压缩算法插件基本不占什么空间,顺带编译了也没问题。这样除了lz4还可以试试别的压缩算法。

安装步骤其实都差不多,所有命令和配置都是固定前缀有规律的,绝大多数时候把lz4换成(lzo, snappy, lzma, bz2, lz4)就可以:

# 注意:本步骤必须在mariadb编译安装之前进行
apt install liblzo2-dev liblzma-dev libbz2-dev libsnappy-dev liblz4-dev

编译安装后,可以检查出这几个插件文件:

$ ls /usr/local/mariadb/lib/plugin/ | grep provider
provider_bzip2.so
provider_lz4.so
provider_lzma.so
provider_lzo.so
provider_snappy.so

root命令行下输入的指令也差不多:

INSTALL SONAME 'provider_lz4';

INSTALL SONAME 'provider_lzma';

INSTALL SONAME 'provider_lzo';

INSTALL SONAME 'provider_bzip2';

INSTALL SONAME 'provider_snappy';

然后修改my.cnf对应的算法配置就可以(可以同时load所有插件,然后根据喜好启用其中的一个就行):

[server]
plugin_load_add=provider_lz4
provider_lz4=force_plus_permanent
plugin_load_add=provider_lzo
provider_lz4=force_plus_permanent
plugin_load_add=provider_lzma
provider_lz4=force_plus_permanent
plugin_load_add=provider_bzip2
provider_lz4=force_plus_permanent
plugin_load_add=provider_snappy
provider_lz4=force_plus_permanent


# 原本的配置不变
[mariadb]
innodb_compression_default=ON
innodb_file_format='Barracuda'
innodb_default_row_format='dynamic'
innodb_compression_algorithm='xxx' # 修改这里

另附:常见压缩算法的对比:

🔗 [Evaluating Database Compression Methods: Update] https://www.percona.com/blog/evaluating-database-compression-methods-update/

综合来看lz4的速度最快,且压缩比不算低,所以我会选择lz4作为mariadb的压缩算法。



 Last Modified in 2024-04-25 


Leave a Comment Anonymous comment is allowed / 允许匿名评论