磁盘坏道、机房断电、服务器遭遇病毒、运维人员误操作等,会造成数据库文件缺失;环境变量设置有误、版本不适配 , 也会导致库文件丢失 。这些情况一旦遇上就是“惊心动魄”的大事,直接影响业务系统的正常运转 。
作为保存和管理数据的IT系统软件 , 数据库在实际应用中会遇到库文件缺失问题,那如何快速解决并保证系统稳定运行呢?
先了解一个重要的专业术语—-动态链接库(Dynamic Link Library,简称DLL),它是可以被其他应用程序共享的文件,其中封装了一些能被共享的例程和资源 。
在Linux系统下,DLL文件的扩展名是so 。对于DLL,由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库 。相对于动态链接,静态链接是指把要调用的函数或过程在编译时链接到可执行文件中,成为可执行文件的一部分 。如果DLL编译时没有被编译进目标文件中,当程序执行到对应的函数时smartupload路径对的下载出现问题,会调用该函数库里的相应函数 。如果缺少相应的动态库文件 , 程序运行失败 。
注:以上问题都是由于so文件无法找到或缺失导致 。
TIPS:我们通常把一些公用函数制作成函数库,供其他程序使用 。函数库分为静态库和动态库两种 。两者对比:
KingbaseES如何找so文件?
金仓KingbaseES 在编译中使用 -r path 参数告诉编译器,编译生成可执行文件时记住库的位置,运行时不需要再设置这个动态库的位置 。但工作中经常会遇到找不到so文件的问题 , 这就需要设置LD_LIBRARY_PATH环境变量 。LD_LIBRARY_PATH:动态库的查找路径
方法一:
export LD_LIBRARY_PATH=LD_LIBRARY_PATH:/XXX 注意:退出当前终端后就失效
方法二:
修改~/.bashrc或~/.bash_profile或系统级别的/etc/profile在其中添加例如exportLD_LIBRARY_PATH=/opt/ActiveP/lib:$LD_LIBRARY_PATH source .bashrc (Source命令也称为“点命令” , 也就是一个点符号(.) 。source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录)
方法三:
没有修改LD_LIBRARY_PATH,但效果是一样的实现动态库的查找 。
1)/etc/ld.so.conf下面加一行,如: /usr/local/mysql/lib
2)保存后执行 ldconfig 生效 。ldconfig 命令的用途,主要是在默认搜寻目录(/lib和/usr/lib)以及动态库配置文件/etc/ld.so.conf内所列的目录下,搜索出可共享的动态链接库(格式如前介绍,lib*.so*),进而创建出动态装入程序(ld.so)所需的连接和缓存文件 。缓存文件默认为/etc/ld.so.cache,此文件保存已排好序的动态链接库名字列表 。
库文件缺失的解决思路有哪些?
敲黑板!KingbaseES库文件缺失,操作思路有以下重要的三点:
01)如果执行命令 , 如 ksql , 报“error while loading shared libraries”,可以先执行:ldd path/ksql ,确认丢失的库文件名;
02)先到 Server/lib 路径下寻找 , 如果有对应的库文件,那可能是 LD_LIBRARY_PATH 环境变量问题,需要设置该环境变量;
01)如果Server/lib 路径下没有 , 再找 /lib64 , /lib 目录 。注意:即使 /lib64 或 /lib 目录下有同样的库文件名,也未必可用 , 因为这些文件可能是PG的 。
真实场景应用

文章插图
实例1:
动态库版本不兼容如在initdb时,提示libstdc++版本不兼容 。
确认kingbase所链接的库的位置:
验证操作系统 libstdc++.so.6 文件,确认确实不包含kingbase程序所需要的 CXXABI_1.3.8 版本 。
问题分析:这种情况通常由于软件在编译时smartupload路径对的下载出现问题,libc版本较高,而用户现场的版本较低,导致版本不兼容的情况 。需要用户现场升级操作系统版本 。实例2:错误设置LD_LIBRARY_PATH
ksql 连接数据库时 , 报错如下:
从这个错误信息看,ksql 去连接5432端口,而5432 端口是PostgreSQL默认运行的端口 , 怀疑用户使用了错误lib库文件 。
果然,ksql 使用了/lib64 下的libpq文件 , 而这个文件是操作系统安装时带入的PostgreSQL文件 。修改LD_LIBRARY_PATH环境变量,指向 /opt/kb86/ES/V8/Server/lib目录 。
确认已链接到正确的libpq文件 。验证ksql连接正常:
总结:针对数据库可执行程序启动时缺少动态库的问题,可按照以下步骤可解决
首先通过ldd命令查看可执行程序需要加载的动态库;
检查LD_LIBRARY_PATH变量配置是否正确;
通过find命令查找缺失的so动态库文件;
建立查找到的动态库文件到数据库系统lib目录下的软链接;
重新启动应用程序;
如果不能找到缺失的动态库 , 需要安装相应的软件包 。
【如何解决库文件缺失问题?】本文到此结束,希望对大家有所帮助!
猜你喜欢
- 顺产从开始到最后需要多长时间?经产妇和初产妇分娩时间区别大
- 文字秒变语音软件安装包免费下载附安装教程
- Loadrunner基础介绍-第二弹-用户录制行为
- 【砺剑行动】银行电话说公司账户要年检?假的!
- 世界最大的十大铁塔 东方明珠上榜,第一太高难以超越
- 你是几类银行卡?
- 当一个人总说”没问题”的时候,其实最有问题
- 果园生草的好出及注意事项
- 甲亢妈妈,怀孕和喂奶期间药物怎么选?
