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 开发者提供的官方 C++ 客户端来实现与 MySQL 数据库的连接。重要的是,当 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,但意外安装了 Manticore Debian 包。虽然 searchd 可能正常工作,但如果索引器是为与您当前发行版提供的不同版本而设计的,则可能无法正常工作。

  • 一种不太常见的情况是 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