MySQL源未初始化。dlopen中的名称错误?

在本文中,我们将解决用户在尝试将MySQL数据导入Manticore时经常遇到的常见问题。

大家都知道Manticore可以使用indexer工具从MySQL索引数据。但在深入探讨本文标题中的具体问题之前,让我们首先建立对Manticore和MySQL关系的理解。

目前,Manticore提供的最强大的API是SphinxQL。该API利用MySQL传输协议,由于其查询语言语法与MySQL相似,大大简化了搜索任务和其他操作。SphinxQL所需的MySQL协议命令在searchd中原生实现。因此,Manticore在安装的主机上不需要最小的MySQL库或MySQL要求。

indexer工具可以与MySQL数据库交互并检索数据以构建Manticore索引。这种与MySQL数据库的连接是通过MySQL开发人员提供的官方C++客户端实现的。重要的是,当Manticore编译时,MySQL客户端库并未嵌入Manticore二进制文件中。对于PostgreSQL、XML管道和ODBC也是如此。如果indexer用户希望连接到PostgreSQL、MySQL或支持ODBC的数据库,则必须在运行indexer的系统上安装相应的驱动程序库。

那么,什么原因导致了"MySQL源未初始化。dlopen中的名称错误?“错误消息?

可能的原因有几个:

  • 系统上可能未安装libmysqlclient。该库在Linux软件包中分发,在不同平台上可能标记不同:

    • 在CentOS/RHEL上,它被称为mysql-libs
    • Debian/Ubuntu用户应查找default-libmysqlclient-dev
    • Alpine包含mariadb-connector-c-dev软件包。
  • 即使安装了libmysqlclient,它也可能不是正确的版本。Indexer是针对特定的客户端库版本编译的,通常与Linux发行版的默认MySQL软件包捆绑在一起。MySQL版本在Linux发行版之间可能会有所不同,有些使用官方MySQL,而其他一些选择MariaDB作为默认选项。

    当你升级到新的MySQL主要版本或切换到不同的MySQL变体时,就会出现问题。这两种情况都可能导致兼容性问题,因为这些操作可能会引入不同(通常是更新的)版本的客户端库。

    MySQL发行版提供了一个兼容性软件包,其中包含旧版本的客户端库,以便为设计用于这些版本的应用程序提供支持。例如,如果您正在切换到默认使用MariaDB的发行版,但希望使用最新的官方MySQL,则应从官方MySQL源安装mysql-community-libs-compat兼容性软件包。

  • 您可能安装了不适当的Manticore软件包。例如,您可能在Ubuntu上意外安装了Debian的Manticore软件包。虽然searchd可能可以工作,但如果indexer是为与当前发行版不同的版本而设计的,则可能无法工作。

  • 较少见的情况是手动安装MySQL,或由于某些原因MySQL客户端库未包含在共享库路径中。尽管Manticore对MySQL的安装方法无关紧要,但它必须能够使用操作系统的共享库路径找到客户端库,通常位于/usr/lib/usr/lib/x86_64-linux-gnu/。在这种情况下,应将libmysqlclient添加(或符号链接)到默认的ld路径。如果您使用自定义路径,则需要将该路径包含在/etc/ld.so.conf.d/中。例如,在某些发行版中,客户端库位于/usr/lib/mysql文件夹中,安装这些文件的软件包还会向/etc/ld.so.conf.d/贡献一个条目。或者,当启动守护程序时,可以调整ld库路径以包含MySQL库,例如LD_LIBRARY_PATH=/path/to/mysql searchd。如果您使用systemd单元文件,可以在Environment中设置,但通常建议全系统范围地解决客户端库路径。这是因为未来的更新可能会带来单元文件的变化。

安装Manticore Search

安装Manticore Search