资讯详情

动态库libstdc++.so.6及libc.so.6版本过低导致MySQL无法安装

点击上面的蓝字关注我

477d85fbca06a14db7ca9621d5b9f227.png

最近安装了新版本MySQL(Percona Server)发现所依赖的libstdc .so.6、libc.so.6均较高(尤其是在Centos 6版本安装时),数据库安装无法完成。

因Percona官方文方文件也有说明.7.31版不再是OpenSSL库式二进制包。

升级动态库,安装新版本MySQL如下文所示。

安装Percona Server 5.7.初始化38-41,将出现以下错误信息:

[root@c6 mysql5.7]# bin/mysqld --defaults-file=/data/mysql/mysql3306/etc/my.cnf  --initialize --user=mysql  bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory

报错直接安装numactl即可解决。

yum install -y numactl

再次初始化时,报错信息如下:

bin/mysqld: /usr/lib64/libstdc  .so.6: version `GLIBCXX_3.4.15' not found (required by bin/mysqld) bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.16' not found (required by bin/mysqld) bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by bin/mysqld) bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libssl.so) bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libssl.so) bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libcrypto.so) bin/mysqld: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /usr/local/Percona-Server-5.7.38-41-Linux.x86_64.glibc2.17/bin/../lib/private/libcrypto.so)

提示找不到相应的依赖包以及

查看系统对应的版本是(Centos6.9)GLIBCXX_3.4.13以及GLIBC_2.12,(Centos7.6 GLIBCXX_3.4.15以及GLIBC_2.17)因此,需要安装相应的依赖包,相应的动态库分别为:

GLIBCXX_3.4.15 -->libstdc  .so.6 GLIBC_2.18 -->libc.so.6

下载libstdc 6包

wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.9/libstdc  6_4.9.2-10 deb8u1_amd64.deb

进行安装

ar -x libstdc  6_4.9.2-10 deb8u1_amd64.deb xz -d data.tar.xz tar -xvf data.tar   cp libstdc  .so.6.0.20 sln libstdc  .so.6.0.20  /usr/lib64/libstdc  .so.6 chmod  x libstdc  .so.6.0.20 sln libstdc  .so.6.0.20 libstdc  .so.6

此时,查看相应版本已升级:

strings /usr/lib64/libstdc  .so.6|grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBCXX_3.4.20 GLIBC_2.3 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.18 GLIBC_2.17 GLIBC_2.3.2 GLIBCXX_DEBUG_MESSAGE_LENGTH

这次只升级到2.18.满足当前要求。

下载源码包(rpm也可以通过源码包编译安装)

wget  http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz

编译安装:

tar -zxvf glibc-2.18.tar.gz cd glibc/ mkdir  build cdbuild  ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make&&makeinstall#make的时间较长

编译安装完成后,执行以下命令

strings /lib64/libc.so.6 |grep GLIBC

如安过程出现如下错误,则需提前安装gcc-c++包,yum直接安装即可

如果configure过程中出现如下错误

* LD_LIBRARY_PATH shouldn’t contain the current directory when
* building glibc. Please change theenvironment variable
* and run configure again.

则直接在当前会话窗口将 LD_LIBRARY_PATH 置为空后再次运行即可

LD_LIBRARY_PATH=''

不要直接编译到其他路径后通过软连接的形式升级libc.so.6,否则可能导致所有很多命令无法运行,例如执行ll 命令(其他命令也一样)时出现如下错误

ls: relocation error: /usr/local/glibc-2.18/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
id: relocation error: /usr/local/glibc-2.18/lib/libc.so.6: symbol _dl_find_dso_for_object, version GLIBC_PRIVATE not defined in file ld-linux-x86-64.so.2 with link time reference
‍ ‍

也会出现缺少其他动态库的情况。

千万不要关闭当前会话!!!
通过export LD_PRELOAD= 修复修改已调整的库
执行 ldconfig (通常能恢复),如不行,则继续下一步

其他的坑可能也有,大家遇到了可以相互交流。

往期精彩回顾

1.  MySQL高可用之MHA集群部署

2.  mysql8.0新增用户及加密规则修改的那些事

3.  比hive快10倍的大数据查询利器-- presto

4.  监控利器出鞘:Prometheus+Grafana监控MySQL、Redis数据库

5.  PostgreSQL主从复制--物理复制

6.  MySQL传统点位复制在线转为GTID模式复制

7.  MySQL敏感数据加密及解密

8.  MySQL数据备份及还原(一)

9.  MySQL数据备份及还原(二)

扫码关注     

标签: 低浓度甲烷传感器gjc4

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台