glibc升级失败及处理过程
centos 6.2 升级glibc , 想用新的包代替旧的包,rm /lib64/libc.so.6 之后,系统部分命令用不了,远程登录也不行【幸好原来旧的ssh 连接还没断】
[root@VM_2centos lib64]# /bin/ls
/bin/ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
解决:
OK了,原理:
LD_PRELOAD解决的原理是:linux调用so的库文件时,搜素路径为当前路径,再是系统lib目录。但是提供了一个LD_PRELOAD系统变量来改变这个顺序。设置LD_PRELOAD了后,库加载的顺序就改为:
搜素路径为: LD_PRELOAD ,当前路径,再是系统lib目录
又作死,新编译了glibc-2.14,把最新的libc.so 复制到/lib64和/lib下,做软连接
ln -sf /lib64/libc.so /lib64/libc.so.6
ln -sf /lib/libc.so /lib/libc.so.6
发现新源码编译安装的mysql启动不来,一堆内存错误
再次rm /lib/libc.so.6 , rm /lib64/libc.so.6 , rm /lib/libc.so rm /lib64/libc.so 【libc.so是新编译拷贝过来的包,原来的libc-2.12.so 还在,没删除】
再用上面的方法,没用了,报错:
[root@VM_2_centos lib64]# LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
ERROR: ld.so: object ‘/lib64/libc-2.12.so’ from LD_PRELOAD cannot be preloaded: ignored.
ln: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@VM_2_centos lib64]#
下面的方法也不行
[root@VM_2_centos lib64]# /sbin/sln /lib64/libc-2.12.so /lib64/libc.so.6
Invalid link from “/lib64/libc-2.12.so” to “/lib64/libc.so.6”: 符号连接的层数过多
各种百度谷歌就不扯了,经腾讯的技术支持提醒,用新编译的库试了一下,发现命令是可以正常用的:
[root@VM_2_centos software]# LD_PRELOAD=/usr/lib64/glibc-2.14/libc.so ls
MySQL-5.5.47-1.el7.x86_64.rpm-bundle.tar MySQL-server-5.5.47-1.el7.x86_64.rpm cmake-2.8.5 mysql-5.5.25-linux2.6-x86_64
用下面的方法,问题解决:
LD_PRELOAD=/usr/lib64/glibc-2.14/libc.so cp /usr/lib64/glibc-2.14/libc.so* /lib64/
从下午2点折腾到晚上9点,记住这次教训,以后遇到问题脑筋转一下弯,怎么不早想到用新编译的库呢



