网站首页 > 博客文章 正文
磁盘坏道、机房断电、服务器遭遇病毒、运维人员误操作等,会造成数据库文件缺失;环境变量设置有误、版本不适配,也会导致库文件丢失。这些情况一旦遇上就是“惊心动魄”的大事,直接影响业务系统的正常运转。
作为保存和管理数据的IT系统软件,数据库在实际应用中会遇到库文件缺失问题,那如何快速解决并保证系统稳定运行呢?
先了解一个重要的专业术语----动态链接库(Dynamic Link Library,简称DLL),它是可以被其他应用程序共享的文件,其中封装了一些能被共享的例程和资源。
在Linux系统下,DLL文件的扩展名是so。对于DLL,由于函数库没有被整合进你的程序,而是程序运行时动态的申请并调用,所以程序的运行环境中必须提供相应的库。相对于动态链接,静态链接是指把要调用的函数或过程在编译时链接到可执行文件中,成为可执行文件的一部分。如果DLL编译时没有被编译进目标文件中,当程序执行到对应的函数时,会调用该函数库里的相应函数。如果缺少相应的动态库文件,程序运行失败。
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 版本。
问题分析:这种情况通常由于软件在编译时,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目录下的软链接;
重新启动应用程序;
如果不能找到缺失的动态库,需要安装相应的软件包。
猜你喜欢
- 2024-10-18 给你一个反悔的机会(给你一个反悔的机会英语)
- 2024-10-18 Bash技巧:一个在不同目录之间直接来回快速 cd 的Shell脚本
- 2024-10-18 linux下推荐的开发环境的安装和配置
- 2024-10-18 Hadoop系列-集群搭建(hadoop集群搭建步骤简述)
- 2024-10-18 Redis单机安装以及集群搭建(单机redis和集群redis区别)
- 2024-10-18 如何自定义终端显示配置(如何自定义终端显示配置文件)
- 2024-10-18 (安全防范)分析Linux常见后门驻留方式
- 2024-10-18 大白话 golang 教程-01-安装和配置
- 2024-10-18 阿里开源那个牛哄哄问题排查工具竟然不会用?最佳实践来了
- 2024-10-18 Go下载安装及切换不同版本的方法(go语言安装 window)
你 发表评论:
欢迎- 367℃用AI Agent治理微服务的复杂性问题|QCon
- 361℃手把手教程「JavaWeb」优雅的SpringMvc+Mybatis整合之路
- 358℃初次使用IntelliJ IDEA新建Maven项目
- 351℃Maven技术方案最全手册(mavena)
- 348℃安利Touch Bar 专属应用,让闲置的Touch Bar活跃起来!
- 346℃InfoQ 2024 年趋势报告:架构篇(infoq+2024+年趋势报告:架构篇分析)
- 345℃IntelliJ IDEA 2018版本和2022版本创建 Maven 项目对比
- 342℃从头搭建 IntelliJ IDEA 环境(intellij idea建包)
- 最近发表
- 标签列表
-
- powershellfor (55)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)