事情经过: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!