鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

Percona数据库中安装TokuDB引擎失败的解决方法

问题现象描述

在鲲鹏服务器中,CentOS 7.6下,Percona数据库安装TokuDB引擎失败,提示无法加载libjemalloc.so.1库。提示信息如下:

ERROR: Connot find libjemalloc.so.1 library. Make sure you have libjemalloc1 on debian|ubuntu or jemalloc on centos package installed.

关键过程、根本原因分析

  1. 查看jemalloc安装时生成的库文件,可以看到libjemalloc.so.2是由5.2.1版本的jemalloc生成。

  2. 查看Percona中与jemalloc有关的代码,可以看到Percona调用了libjemalloc.so.1的库文件。

  3. 尝试改为使用低版本的jemalloc,即3.6版本的jemalloc。可以生成libjemalloc.so.1的库文件。

    但却提示jemalloc版本低于2.3.0,而3.6版本的jemalloc并不低于2.3.0。因此不是jemalloc版本的问题。

  4. 通过查询相关资料发现,TokuDB的代码会到jemalloc的源码包中检索jemalloc的版本信息。

  5. 从网上下载的jemalloc源码包,解压后没有相关jemalloc的版本信息。只会在执行autogen.sh时生成一个“VERSION”文件,文件内容全是0。TokuDB代码检索的就是这个“VERSION”文件。

结论、解决方案及效果

该问题与jemalloc的版本无关,即与库文件libjemalloc.so.1和libjemalloc.so.2无关,只与上文提到的“VERSION”文件内容有关。

  1. 删除已有的jemalloc库文件。
    rm -rf libjemalloc.so.1
    rm -rf libjemalloc.so.2
  2. 配置编译jemalloc之前,在jemalloc源码包内创建“VERSION”文件,并在“VERSION”文件中增加如下内容:
    5.2.1-0-g0000000000000000000000000000000000000000

  3. 在jemalloc源码路径下重新配置编译生成新的jemalloc库文件。
    ./autogen.sh
    Make
    ./configure
    make install
  4. 重新安装TokuDB引擎。
    INSTALL PLUGIN tokudb SONAME 'ha_tokudb.so';
  5. 查看TokuDB引擎状态。可以看到TokuDB已经加载成功。
    show engines;