Источник MySQL не был инициализирован. Неверное имя в dlopen?

В этой статье мы рассматриваем распространенную проблему, с которой пользователи часто сталкиваются при попытке импорта данных из 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, необходимо установить соответствующие драйверные библиотеки на той же системе, где находится indexer.

Итак, что вызывает сообщение об ошибке ‘Источник MySQL не был инициализирован. Неверное имя в dlopen?’?

Существует несколько потенциальных причин:

  • libmysqlclient может быть не установлен в вашей системе. Эта библиотека распространяется с пакетом Linux и может иметь разные названия на разных платформах:

    • На CentOS/RHEL она называется mysql-libs.
    • Пользователи Debian/Ubuntu должны искать default-libmysqlclient-dev.
    • В Alpine есть пакеты mariadb-connector-c-dev.
  • Даже если libmysqlclient установлена, она может быть неверной версии. Indexer скомпилирован против определенной версии клиентской библиотеки, которая обычно входит в состав стандартного пакета MySQL дистрибутива Linux. Версии MySQL могут различаться в разных дистрибутивах Linux, при этом некоторые используют официальный MySQL, а другие предпочитают MariaDB по умолчанию.

    Проблемы возникают при обновлении до новой major-версии MySQL или переключении на другой вариант MySQL. Оба сценария могут привести к проблемам совместимости, так как они могут привести к использованию другой (обычно более новой) версии клиентской библиотеки.

    Дистрибутивы MySQL предоставляют совместимый пакет, который включает более старые версии клиентской библиотеки для приложений, предназначенных для работы с этими версиями. Например, если вы переключаетесь на дистрибутив, использующий MariaDB по умолчанию, но хотите использовать последнюю официальную MySQL, следует установить совместимый пакет mysql-community-libs-compat из официального источника MySQL.

  • Возможно, вы установили неподходящий пакет Manticore. Например, вы можете использовать Ubuntu, но случайно установить пакет Manticore для Debian. Хотя 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/. Alternatively, путь библиотеки ld можно настроить для включения библиотеки MySQL при запуске демона, например, LD_LIBRARY_PATH=/path/to/mysql searchd. Если вы используете файл модуля systemd, вы можете установить это в Environment, но обычно рекомендуется решать путь клиентской библиотеки в масштабах всей системы. Это связано с возможными изменениями в файлах модулей при будущих обновлениях.

Установить Manticore Search

Установить Manticore Search