在本文中,我们将解决用户在尝试将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
软件包。
- 在CentOS/RHEL上,它被称为
即使安装了
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
中设置,但通常建议全系统范围地解决客户端库路径。这是因为未来的更新可能会带来单元文件的变化。