前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >动态库libstdc++.so.6及libc.so.6版本过低导致MySQL无法安装

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

作者头像
July
发布2022-11-11 15:23:57
2.7K0
发布2022-11-11 15:23:57
举报
文章被收录于专栏:数据库干货铺

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

因Percona官方文档也有说明5.7.31版本后不再是OpenSSL库方式的二进制包了。

升级动态库并安装新版本MySQL的案例如下文所示。

1、初始化报错

安装Percona Server 5.7.38-41,进行初始化,将出现如下报错信息:

代码语言:javascript
复制
[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即可解决。

代码语言:javascript
复制
yum install -y numactl

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

代码语言:javascript
复制
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)

提示找不到对应的依赖包GLIBCXX_3.4.15以及 GLIBC_2.14 - GLIBC_2.18

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

代码语言:javascript
复制
GLIBCXX_3.4.15 -->libstdc++.so.6
GLIBC_2.18 -->libc.so.6

2. 升级libstdc++.so.6

下载libstdc++6包

代码语言:javascript
复制
wget http://ftp.de.debian.org/debian/pool/main/g/gcc-4.9/libstdc++6_4.9.2-10+deb8u1_amd64.deb

进行安装

代码语言:javascript
复制
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

此时再查看对应版本已升级完毕:

代码语言:javascript
复制
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

3. 升级libc.so.6

本次仅升级到GLIBC_2.18,满足当前要求即可。

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

代码语言:javascript
复制
wget  http://ftp.gnu.org/gnu/glibc/glibc-2.18.tar.gz

编译安装:

代码语言:javascript
复制
tar -zxvf glibc-2.18.tar.gz
cd glibc/
mkdir  build
cd build
 ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin
make && make install  # make的时间较长

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

代码语言:javascript
复制
strings /lib64/libc.so.6 |grep GLIBC

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

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

代码语言:javascript
复制
* LD_LIBRARY_PATH shouldn’t contain the current directory when
* building glibc. Please change theenvironment variable
* and run configure again.

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

代码语言:javascript
复制
LD_LIBRARY_PATH=''

3. 脱坑提示

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

代码语言:javascript
复制
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

‍‍

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

恢复方案:

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

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据库干货铺 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档