正解mysql: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/libstdc++.so.6)

时间:2023-01-04 15:30:53

事情经过:yum安装Xtrabackup工具,yum更新完成gcc,页面提示:

[work@tj-gongsi-quku lib64]$ mysql
mysql: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/libstdc++.so.6)
mysql: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /usr/lib64/libstdc++.so.6)


WTF??????????????之前好好的怎么不能用了,所以建议大家平时没事别用yum安装太大的工具,少用root,多用work。


然后百度:出现一堆解决/lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/libstdc++.so.6)

按照教程,安装了GLIBC_2.18 发现还是不行,而且提示Segmentation fault (core dumped),吓得不行,还好最后是虚惊一场;

实际证明,这次百度教程全是搞笑的。


原因: (required by /usr/lib64/libstdc++.so.6),因为升级gcc的时候生成的动态库,替换了老版本gcc的动态库,修改回来就行。


正文:

系统centos6

用户root

(如果有按照百度教程升级GLIBC_2.14 or GLIBC_2.XX)的同学请先走第一步、第二步,没有安装高版本的GLIBC的同学直接进行第三部;

我们的目的是修改回原始的动态库;


第一步:确认动态库是否被修改

[root@tj-gongsi-quku lib64]# ll |grep libc.so.6
lrwxrwxrwx  1 root root      13 Sep 29 11:38 libc.so.6 -> libc.so.6_bak
lrwxrwxrwx  1 root root      12 Jun 21 09:09 libc.so.6_bak -> libc-2.18.so

[root@tj-gongsi-quku lib64]# ll |grep libc-
-rwxr-xr-x  1 root root 1926800 Jun 21 11:56 libc-2.12.so
-rwxr-xr-x  1 root root 1926800 Jun 21 11:57 libc-2.18.so
lrwxrwxrwx  1 root root      12 Jun 21 09:09 libc.so.6_bak -> libc-2.18.so

此时的libc.so.6链接到了libc-2.18.so


正常情况下:

[root@tj-vm119-qa-webapp lib64]# ll |grep libc
-rwxr-xr-x. 1 root root 1924768 Jun 20 11:37 libc-2.12.so
lrwxrwxrwx. 1 root root      18 Jul  3 17:46 libcap-ng.so.0 -> libcap-ng.so.0.0.0
-rwxr-xr-x. 1 root root   18672 Jun 25  2011 libcap-ng.so.0.0.0
lrwxrwxrwx. 1 root root      14 Jul  3 17:45 libcap.so.2 -> libcap.so.2.16
-rwxr-xr-x. 1 root root   16600 Dec  8  2011 libcap.so.2.16
-rwxr-xr-x. 1 root root  201632 Jun 20 11:37 libcidn-2.12.so
lrwxrwxrwx. 1 root root      15 Jul  6 19:41 libcidn.so.1 -> libcidn-2.12.so
lrwxrwxrwx. 1 root root      17 Jul  6 19:42 libcom_err.so.2 -> libcom_err.so.2.1
-rwxr-xr-x. 1 root root   14664 Mar 23  2017 libcom_err.so.2.1
-rwxr-xr-x. 1 root root   40872 Jun 20 11:37 libcrypt-2.12.so
lrwxrwxrwx. 1 root root      22 Jul  3 17:46 libcryptsetup.so.1 -> libcryptsetup.so.1.1.0
-rwxr-xr-x. 1 root root   94312 Jun 22  2012 libcryptsetup.so.1.1.0
lrwxrwxrwx. 1 root root      16 Jul  6 19:41 libcrypt.so.1 -> libcrypt-2.12.so
lrwxrwxrwx. 1 root root      12 Jul  6 19:41 libc.so.6 -> libc-2.12.so

和默认版本不一样的

原因是因为之前安装教程修改了环境导致的,我现在把动态库软连接改回来;


第二步:还原libc.so.6

rm -rf libc.so.6 #删除软连接,这步执行完成后所有命令无法使用,不必惊慌这里删除的是软连接,原文件还在

LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so libc.so.6 #再用系统加载动态库执行软链接命令,链接到原来 /lib64/libc-2.12.so

此时确认动态库,发现已经还原了

[root@tj-gongsi-quku lib64]# ll |grep libc-
-rwxr-xr-x  1 root root 1926800 Jun 21 11:56 libc-2.12.so
-rwxr-xr-x  1 root root 1926800 Jun 21 11:57 libc-2.18.so
lrwxrwxrwx  1 root root      19 Sep 29 16:46 libc.so.6 -> /lib64/libc-2.12.so

再mysql一下 ,WTF??正常问题出在
required by /usr/lib64/libstdc++.so.6)

[work@tj-gongsi-quku lib64]$ mysql
mysql: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/lib64/libstdc++.so.6)
mysql: /lib64/libc.so.6: version `GLIBC_2.17' not found (required by /usr/lib64/libstdc++.so.6)

第三步:还原libstdc++.so.6
libstdc++.so.6

确认libstdc++.so.6链接的目标文件

[work@tj-gongsi-quku lib64]$ ll |grep libstdc++.so.6
lrwxrwxrwx   1 root         root       30 Sep 29 16:53 libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.bak

lrwxrwxrwx   1 root         root       19 Jun 21 09:09 libstdc++.so.6.bak -> libstdc++.so.6.0.19

正常情况

[work@tj-gongsi-quku lib64]$ ll |grep libstdc++.so.6
lrwxrwxrwx   1 root         root       30 Sep 29 16:53 libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.13

也就是说默认的c++动态库被改了,那么改回来

这里直接删除不用担心命令用了,因为linux是c写的~


rm -rf libstdc++.so.6 

ln -s /usr/lib64/libstdc++.so.6.0.13 libstdc++.so.6

再查看一下

[work@tj-gongsi-quku lib64]$ ll |grep libstdc++.so.6
lrwxrwxrwx   1 root         root       30 Sep 29 16:53 libstdc++.so.6 -> /usr/lib64/libstdc++.so.6.0.13
-rwxr-xr-x   1 root         root   987096 Mar 22  2017 libstdc++.so.6.0.13
-rwxr-xr-x   1 root         root  6431548 Dec 16  2016 libstdc++.so.6.0.19
lrwxrwxrwx   1 root         root       19 Jun 21 09:09 libstdc++.so.6.bak -> libstdc++.so.6.0.19

已经修改回来了,mysql一下

[work@tj-gongsi-quku lib64]$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
Done!