Назад | Перейти на главную страницу

Установите 32-битную клиентскую библиотеку MySQL на 64-битную CentOS

Я пытаюсь запустить скомпилированный 32-разрядный двоичный файл на 64-разрядном узле CentOS 5.3 (на основе RedHat 4.1.2). Бинарный файл жалуется на невозможность найти libmysqlclient.so.15. Такой файл существует на сервере, но он 64-битный и поэтому не годится.

Могу ли я установить 32-битные клиентские библиотеки MySQL на хост? Желательно официальным способом (т.е. через репозиторий). Если нет, то как насчет хакерского пути?

Кроме того, подходящее ли это место для такого вопроса?

РЕДАКТИРОВАТЬ: вот статья это подтверждает, что вы не можете смешивать и сопоставлять биты в одном процессе. Но его рецепт не применим к CentOS.

Википедия заявляет, что RHEL, от которого происходит CentOS, может иметь полную 32-разрядную пользовательскую среду, работающую вместе с 64-разрядной ... В системе уже есть некоторые 32-разрядные библиотеки - libc и тому подобное. Только не MySQL.

Я могу запускать другие 32-битные двоичные файлы, которые не связаны с libmysqlclient.

В некотором роде.

РЕДАКТИРОВАТЬ: yum search mysql говорит следующее:

Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.symnds.com
 * extras: mirror.symnds.com
 * updates: mirror.wiredtree.com
addons                                                   | 1.9 kB     00:00
base                                                     | 1.1 kB     00:00
extras                                                   | 1.9 kB     00:00
updates                                                  | 1.9 kB     00:00
Excluding Packages in global exclude list
Finished
================================ Matched: mysql ================================
mod_auth_mysql.x86_64 : Basic authentication for the Apache web server using a
                      : MySQL database.
qt-MySQL.x86_64 : MySQL drivers for Qt's SQL classes.
MySQL-bench.x86_64 : MySQL - Benchmarks and test system
MySQL-client.x86_64 : MySQL - Client
MySQL-devel.x86_64 : MySQL - Development header files and libraries
MySQL-python.x86_64 : An interface to MySQL
MySQL-server.x86_64 : MySQL: a very fast and reliable SQL database server
MySQL-shared.x86_64 : MySQL - Shared libraries
apr-util-mysql.x86_64 : APR utility library MySQL DBD driver
bytefx-data-mysql.x86_64 : MySQL database connectivity for Mono
freeradius-mysql.x86_64 : MySQL bindings for freeradius
freeradius2-mysql.x86_64 : MySQL support for freeradius
libdbi-dbd-mysql.x86_64 : MySQL plugin for libdbi
pdns-backend-mysql.x86_64 : MySQL backend for pdns
pure-ftpd.x86_64 : Lightweight, fast and secure FTP server
qt4-mysql.x86_64 : MySQL drivers for Qt's SQL classes
rsyslog.x86_64 : Enhanced system logging and kernel message trapping daemon
rsyslog-mysql.x86_64 : MySQL support for rsyslog
unixODBC.i386 : A complete ODBC driver manager for Linux
unixODBC.x86_64 : A complete ODBC driver manager for Linux
unixODBC64.x86_64 : A complete ODBC driver manager for Linux

Как мне установить 32-битный libmysqlclient.so?

1. Установка

Ваша установка MySQL могла быть получена из разных источников. Это может быть rpm-пакет, поставляемый с дистрибутивом, или rpm-пакет Sun / Oracle, или он может быть собран из исходных текстов.

 rpm -q --whatprovides $(which mysql)

должен сообщить вам название пакета, например

  1. MySQL-client-...
  2. mysql-5.0...
  3. mysql-community-server-client
  4. mysql-5.1...
  5. no package provides /usr/bin/mysql.

На CentOS наиболее вероятны первые два варианта. MySQL-client-5.0 это RPM Sun / Oracle и mysql-5.0 мог прийти из раздачи. Использовать rpm -q --info <package_name> чтобы получить расширенную информацию и убедиться, что Vendor: линия подтверждает гипотезу.

Вот типичная линия поставщика:

Name        : MySQL-shared-community       Relocations: (not relocatable)
Version     : 5.0.96                       Vendor: Oracle and/or its affiliates

1.1 MySQL от Sun / Oracle RPM

Если ваша установка mysql происходит от Sun / Oracle, перейдите на сервер сообщества MySQL. страница загрузкивыберите среди общедоступных (GA) выпусков тот, который имеет версию mysql 5.0 и 32-разрядную архитектуру, выберите пакет MySQL-shared-community, загрузите и установите его с помощью rpm -i. Этот пакет предоставляет именно /usr/lib/libmysqlclient.so.15 библиотека.

1.2 mysql из CentOS

В CentOS5 libmysqlclient принадлежит пакету mysql.

yum install mysql.i386

должен сделать свое дело.

В CentOS6 он был перемещен в отдельный пакет mysql-libs.

2. Тестирование

После установки библиотеки проверьте, правильно ли разрешены зависимости динамической библиотеки:

ldd <your_binary> | grep libmysqlclient

должен вернуть что-то вроде

libmysqlclient.so.15 => /usr/lib/mysql/libmysqlclient.so.15

Если вы хотите узнать, что предоставляет 32-битную версию определенной 64-битной библиотеки, вы можете использовать rpm -q --whatprovides /path/to/your/lib64/library для определения названия пакета. Затем замените x86_64 на i686 в имени, чтобы получить имя 32-разрядного аналога. Использовать yum search чтобы проверить, предоставляется ли пакет репозиториями, на которые вы подписаны.

Могу ли я установить 32-битные клиентские библиотеки MySQL на хост?

Да. Redhat устанавливает 32-битные библиотеки в / usr / lib, а 64-битные библиотеки идут в / usr / lib64. ОС автоматически загрузит соответствующую библиотеку при запуске программного обеспечения.