Bug #81384 libmysqlclient.so.18 missing from MySQL 5.7
Submitted: 11 May 2016 21:09 Modified: 3 Aug 2016 13:56
Reporter: monty solomon Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Installing Severity:S1 (Critical)
Version:5.7 OS:CentOS (6.7)
Assigned to: Terje Røsten CPU Architecture:Any

[11 May 2016 21:09] monty solomon
Description:
Packages built using libmysqlclient.so.18 can't run with MySQL 5.7. The library is missing from 

How to repeat:
Install some version of MySQL 5.5 or 5.6 and build oursql

MySQL-devel-5.6.29-1.el6.x86_64.rpm
MySQL-shared-5.6.29-1.el6.x86_64.rpm

test oursql

PYTHONPATH=$PWD/oursql-0.9.3.1/build/lib.linux-x86_64-2.6/ python -c 'import oursql; print oursql.__file__'
/mnt2/msolomon/oursql/oursql-0.9.3.1/build/lib.linux-x86_64-2.6/oursql.so

Try to use oursql on a system running 5.7.

PYTHONPATH=$PWD/oursql-0.9.3.1/build/lib.linux-x86_64-2.6/ python -c 'import oursql; print oursql.__file__'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: libmysqlclient.so.18: cannot open shared object file: No such file or directory

# rpm -qa | grep ^mysql-community
mysql-community-libs-5.7.12-1.el6.x86_64
mysql-community-devel-5.7.12-1.el6.x86_64
mysql-community-common-5.7.12-1.el6.x86_64
mysql-community-client-5.7.12-1.el6.x86_64
mysql-community-libs-compat-5.7.12-1.el6.x86_64
mysql-community-server-5.7.12-1.el6.x86_64

Suggested fix:
Add libmysqlclient.so.18 to the mysql-community-libs-compat package.
[11 May 2016 21:23] monty solomon
CentOS release 6.7 (Final)
[11 May 2016 23:49] MySQL Verification Team
[miguel@centosvb Downloads]$ ls
mysql-community-libs-compat-5.7.12-1.el6.x86_64.rpm  mysql-community-libs-compat-5.7.12-1.el7.x86_64.rpm
[miguel@centosvb Downloads]$ rpm -qp --provides mysql-community-libs-compat-5.7.12-1.el7.x86_64.rpm | grep client
warning: mysql-community-libs-compat-5.7.12-1.el7.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_16)(64bit)
libmysqlclient.so.18(libmysqlclient_18)(64bit)
[miguel@centosvb Downloads]$ rpm -qp --provides mysql-community-libs-compat-5.7.12-1.el6.x86_64.rpm | grep client
warning: mysql-community-libs-compat-5.7.12-1.el6.x86_64.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
libmysqlclient.so.16()(64bit)
libmysqlclient.so.16(libmysqlclient_16)(64bit)
libmysqlclient_r.so.16()(64bit)
libmysqlclient_r.so.16(libmysqlclient_16)(64bit)

http://bugs.mysql.com/bug.php?id=78112

 [17 Aug 2015 21:03] Terje Røsten

Hi again

whats your exact platform?

For CentOS7/RHEL7/Oracle Linux 7 libmysqlclient.so.18 is provided in mysql-community-libs-compat.

$ rpm -qp --pr [17 Aug 2015 21:03] Terje Røsten

Hi again

whats your exact platform?

For CentOS7/RHEL7/Oracle Linux 7 libmysqlclient.so.18 is provided in mysql-community-libs-compat.

$ rpm -qp --provides  mysql-community-libs-compat-5.7.8-0.3.rc.el7.x86_64.rpm | grep client
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_16)(64bit)
libmysqlclient.so.18(libmysqlclient_18)(64bit)

For CentOS6/RHEL6/Oracle Linux 6 libmysqlclient.so.16 is provided in mysql-community-libs-compat.

$ rpm -qp --requires mysql-community-libs-compat-5.7.8-0.3.rc.el6.x86_64.rpm |grep client
libmysqlclient.so.16()(64bit)  
libmysqlclient_r.so.16()(64bit)  ovides  mysql-community-libs-compat-5.7.8-0.3.rc.el7.x86_64.rpm | grep client
libmysqlclient.so.18()(64bit)
libmysqlclient.so.18(libmysqlclient_16)(64bit)
libmysqlclient.so.18(libmysqlclient_18)(64bit)

For CentOS6/RHEL6/Oracle Linux 6 libmysqlclient.so.16 is provided in mysql-community-libs-compat.

$ rpm -qp --requires mysql-community-libs-compat-5.7.8-0.3.rc.el6.x86_64.rpm |grep client
libmysqlclient.so.16()(64bit)  
libmysqlclient_r.so.16()(64bit)
[12 May 2016 4:30] monty solomon
CentOS 6.7

# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-community-libs-compat-5.7.12-1.el6.x86... 

# rpm -qpl mysql-community-libs-compat-5.7.12-1.el6.x86_64.rpm | grep client
/usr/lib64/mysql/libmysqlclient.so.16
/usr/lib64/mysql/libmysqlclient.so.16.0.0
/usr/lib64/mysql/libmysqlclient_r.so.16
/usr/lib64/mysql/libmysqlclient_r.so.16.0.0
[12 May 2016 4:40] monty solomon
It appears that libmysqlclient.so.18 is in mysql-community-libs-compat-5.7.8-0.3 but is not in any of the subsequent versions.

Please provide both versions 16 and 18 in mysql-community-libs-compat on RHEL 6 / CentOS 6.

# rpm -qpl mysql-community-libs-compat-5.7.8-0.3.rc.el7.x86_64.rpm | grep client
/usr/lib64/mysql/libmysqlclient.so.18
/usr/lib64/mysql/libmysqlclient.so.18.1.0
/usr/lib64/mysql/libmysqlclient_r.so.18
/usr/lib64/mysql/libmysqlclient_r.so.18.1.0

# rpm -qpl mysql-community-libs-compat-5.7.9-1.el6.x86_64.rpm | grep client
/usr/lib64/mysql/libmysqlclient.so.16
/usr/lib64/mysql/libmysqlclient.so.16.0.0
/usr/lib64/mysql/libmysqlclient_r.so.16
/usr/lib64/mysql/libmysqlclient_r.so.16.0.0

# rpm -qpl mysql-community-libs-compat-5.7.10-1.el6.x86_64.rpm | grep client
/usr/lib64/mysql/libmysqlclient.so.16
/usr/lib64/mysql/libmysqlclient.so.16.0.0
/usr/lib64/mysql/libmysqlclient_r.so.16
/usr/lib64/mysql/libmysqlclient_r.so.16.0.0

# rpm -qpl mysql-community-libs-compat-5.7.11-1.el6.x86_64.rpm | grep client
/usr/lib64/mysql/libmysqlclient.so.16
/usr/lib64/mysql/libmysqlclient.so.16.0.0
/usr/lib64/mysql/libmysqlclient_r.so.16
/usr/lib64/mysql/libmysqlclient_r.so.16.0.0

# rpm -qpl mysql-community-libs-compat-5.7.12-1.el6.x86_64.rpm | grep client
/usr/lib64/mysql/libmysqlclient.so.16
/usr/lib64/mysql/libmysqlclient.so.16.0.0
/usr/lib64/mysql/libmysqlclient_r.so.16
/usr/lib64/mysql/libmysqlclient_r.so.16.0.0
[12 May 2016 4:49] monty solomon
For my previous comment I accidentally downloaded the el7 version of 5.7.8. The el6 version of 5.7.8 does not contain version 18 of the library.

# rpm -qpl  mysql-community-libs-compat-5.7.8-0.3.rc.el6.x86_64.rpm  | grep client
/usr/lib64/mysql/libmysqlclient.so.16
/usr/lib64/mysql/libmysqlclient.so.16.0.0
/usr/lib64/mysql/libmysqlclient_r.so.16
/usr/lib64/mysql/libmysqlclient_r.so.16.0.0

Please add version 18 to mysql-community-libs-compat for el6.
[12 May 2016 13:21] Terje Røsten
Hi!

This is by design.

EL6 versions of libs-compat contains libmysqlclient version found
in distribution's version of mysql-libs.

EL6 ships MySQL 5.1 with libmysqlclient.so.16, hence libs-compat ships this version. 

EL5 ships MySQL 5.0 and libmysqlclient.so.14,

EL7 is similar with libmysqlclient.so.18.

If you have software built against libmysqlclient, please rebuild against MySQL 5.7 headers and libs (libmysqlclient.so.20) or on a pure, clean system
with mysql-libs and mysql-devel (from OS) installed and MySQL Repos disabled.
[13 May 2016 9:59] MySQL Verification Team
Thank you Terje for the detailed explanation.

@monty - As Terje explained, this is by design, and also outlined the workaround. I would mark it as !bg for now.

Regards,
Umesh
[14 May 2016 3:36] monty solomon
We build multiple apps on a continuous integration (CI) server and want to deploy them anywhere. We run a mixed environment of MySQL 5.6 and MySQL 5.7 but the libmysqlclient.so.18 library is no longer available with MySQL 5.7 on RHEL 6/CentOS 6.

If there is some compelling reason that the libmysqlclient.so.18 should not be added to the libs-compat package then it should be added to the libs package or to its own package. It does not make sense that the library just disappears with this release.
[3 Aug 2016 13:56] Paul DuBois
Posted by developer:
 
Noted in 5.7.14 changelog.

On RPM-based systems, it is now easier to install multiple client
library versions, such as for the case that you want to maintain
compatibility with older applications linked against previous
libraries. To install an older client library, use the --oldpackage
option with rpm. For example, to install mysql-community-libs-5.5 on
an EL6 system that has libmysqlclient.20 from MySQL 5.7, use a
command like this:

shell> rpm --oldpackage -ivh mysql-community-libs-5.5.50-2.el6.x86_64.rpm