В этой статье мы рассматриваем распространенную проблему, с которой пользователи часто сталкиваются при попытке импортировать данные из MySQL в Manticore.
Способность Manticore индексировать данные из MySQL с помощью инструмента indexer широко признана. Однако прежде чем углубиться в конкретную проблему, озаглавленную в этой статье, давайте сначала установим понимание взаимосвязи между Manticore и MySQL.
В настоящее время самым мощным API, который предлагает Manticore, является SphinxQL. Этот API использует протокол передачи MySQL, значительно упрощая задачи поиска и другие операции благодаря схожести синтаксиса языка запросов с MySQL. Команды протокола MySQL, необходимые для SphinxQL, реализованы в searchd. Поэтому Manticore не имеет минимальной библиотеки MySQL или требований к MySQL для работы на хосте, где установлен Manticore.
Инструмент indexer может взаимодействовать с базой данных MySQL и извлекать данные для построения индекса Manticore. Это соединение с базой данных MySQL осуществляется через официальный клиент C++, предоставленный для разработчиков MySQL. Важно отметить, что при компиляции Manticore библиотека клиента MySQL не встраивается в бинарные файлы Manticore. То же самое касается PostgreSQL, XML-каналов и ODBC. Если пользователь indexer хочет подключиться к PostgreSQL, MySQL или базе данных, поддерживающей ODBC, необходимые библиотеки драйверов должны быть установлены на той же системе, где находится индексатор.
Итак, что вызывает сообщение об ошибке 'Исходный код MySQL не был инициализирован. Неправильное имя в dlopen?'?
Существует несколько потенциальных виновников:
libmysqlclientможет не быть установлен на вашей системе. Эта библиотека распространяется с пакетом Linux и может иметь разные названия на разных платформах:- На CentOS/RHEL она называется
mysql-libs. - Пользователи Debian/Ubuntu должны искать
default-libmysqlclient-dev. - Alpine включает пакеты
mariadb-connector-c-dev.
- На CentOS/RHEL она называется
Даже если
libmysqlclientустановлен, он может быть не той версии. Индексатор компилируется с определенной версией библиотеки клиента, которая обычно поставляется с умолчательным пакетом MySQL дистрибутива Linux. Версии MySQL могут различаться между дистрибутивами Linux, некоторые используют официальный MySQL, а другие выбирают MariaDB в качестве умолчательного.Проблемы возникают, когда вы обновляете до новой основной версии MySQL или переключаетесь на другой вариант MySQL. Оба сценария могут привести к проблемам совместимости, так как эти действия могут ввести другую (обычно более новую) версию библиотеки клиента.
Дистрибутивы MySQL предоставляют пакет совместимости, который включает более старые версии библиотеки клиента для приложений, предназначенных для работы с этими версиями. Например, если вы переходите на дистрибутив, который по умолчанию использует MariaDB, но хотите использовать последнюю официальную версию MySQL, вам следует установить пакет совместимости
mysql-community-libs-compatиз официального источника MySQL.Вы могли установить неподходящий пакет 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, но обычно рекомендуется решать проблему с путем библиотеки клиента на уровне всей системы. Это связано с потенциальными изменениями в файлах юнитов, вызванными будущими обновлениями.