Ошибка: символ mysql_get_server_name, версия libmysqlclient_16 не определена
Если вы видите сообщение об ошибке:
symbol mysql_get_server_name, version libmysqlclient_16 not defined in file libmysqlclient.so.16 with link time reference
…то, вероятно, вы пытаетесь использовать командную строку клиента MySQL от MariaDB с libmysqlclient.so от MySQL.
Символ mysql_get_server_name() присутствует в дереве исходного кода MariaDB, но отсутствует в дереве исходного кода MySQL.
Если у вас установлены как пакет клиента MariaDB, так и пакеты клиентов MySQL, эта ошибка возникнет, если ваша система сначала обнаружит версию MySQL от libmysqlclient.so.
Чтобы определить, какая библиотека подключается динамически (т.е., неправильная), используйте инструмент 'ldd'.
ldd $(which mysql) | grep mysql
или
ldd /path/to/the/binary | grep mysql
Например:
me@mybox:~$ ldd $(which mysql)|grep mysql
libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0xb74df000)
Затем вы можете использовать инструменты менеджера пакетов, чтобы узнать, к какому пакету принадлежит библиотека.
В CentOS команда для определения пакета, установившего определенный файл, выглядит так:
rpm -qf /path/to/file
В системах на базе Debian команда выглядит так:
dpkg -S /path/to/file
Вот пример определения библиотеки и выяснения, к какому пакету она относится в системе Ubuntu:
me@mybox:~$ ldd $(which mysql)|grep mysql libmysqlclient.so.16 => /usr/lib/libmysqlclient.so.16 (0xb75f8000) me@mybox:~$ dpkg -S /usr/lib/libmysqlclient.so.16 libmariadbclient16: /usr/lib/libmysqlclient.so.16
Выше показано, что командная строка клиента MySQL использует библиотеку /usr/lib/libmysqlclient.so.16 и что эта библиотека входит в пакет libmariadbclient16 Ubuntu. Неудивительно, что в этой системе командная строка клиента MySQL работает отлично.
Если бы полученный ответ был связан с пакетом не MariaDB, то, вероятно, возникли бы проблемы при запуске приложения клиента MariaDB mysql.
Если библиотека, которую система пытается использовать, не из пакета MariaDB, решение состоит в удалении проблемного пакета (и, возможно, установке или повторной установке правильного пакета), чтобы можно было использовать правильную библиотеку.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/error-symbol-mysql_get_server_name-version-libmysqlclient_16-not-defined/