ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

人大金仓KingbaseES数据库彻底卸载与重装实操指南

人大金仓KingbaseES数据库彻底卸载与重装实操指南 1. 卸载前的准备工作1.1 数据备份先给自己的数据上把锁Kingbase说到底是企业级数据库里面跑的往往是核心业务数据。我见过太多人上来就停服务、跑卸载脚本卸到一半才想起来有张关键表没导出来那种感觉比加班还难受。所以无论是测试环境还是生产环境卸载前第一件事永远是备份。备份有两种思路按场景选就行逻辑备份适合数据结构复杂、需要跨版本或跨平台恢复的场景。用自带的sys_dump工具导出成SQL文件恢复时用sys_restore导入。命令很简单# 在Kingbase安装目录的bin下执行 ./sys_dump -h 127.0.0.1 -p 54321 -U system -d testdb -F c -f /backup/testdb.dmp-F c是自定义格式压缩率高、恢复灵活强烈建议用这个而不是纯SQL格式。物理备份直接拷贝数据目录。这种方式在相同版本、相同平台下恢复最省事但要求卸载前数据库是正常关闭状态。操作思路是# 确认当前数据目录位置默认通常在 /opt/Kingbase/ES/V8/data # 数据库停止后直接用cp或rsync整体拷贝 cp -rp /opt/Kingbase/ES/V8/data /backup/data_bak_$(date %Y%m%d)提示-p参数保留属主和权限信息restore时不用额外纠正权限这个细节能省不少事。我个人的习惯是两者都做逻辑备份保证数据层面的可恢复性物理备份兜底防止工具版本不一致导致恢复失败。1.2 记录现场信息卸载前先留个“案底”备份完数据下一步是把当前环境的配置信息记录下来。这一步很多人嫌麻烦跳过结果重装时想照原样配回去才发现当时没记一个字符集就折腾一下午。我列了一张清单每次操作前照着抄一遍信息项查看方式为什么要记安装目录echo $KINGBASE_HOME或which ksql卸载后需要手工清残留没记录就变成大海捞针数据目录show data_directory;用ksql查这个目录是残留重灾区重装失败大多因为它端口号配置文件kingbase.conf中的port默认54321重装前要确认端口没被占用字符集编码show server_encoding;新实例尽量保持一致否则数据乱码license文件路径一般在安装目录下卸载会删掉重装要重新申请或找回服务启动方式systemctl list-unit-files | grep kingbase或/etc/init.d/下看查询当前注册的系统服务卸载后要同步清理把这张表填完再动手做任何操作。别嫌麻烦记录的过程也是梳理环境的过程后面排查问题时这些信息就是路标。2. 彻底卸载从服务到文件的完整清理2.1 正确停止数据库服务卸载前必须确保数据库进程完全停止。这个环节看着简单实际踩坑的人不少。直接kill -9是不行的数据文件可能没落盘重装后初始化实例时大概率报错。正确的停止姿势取决于当初的启动方式systemd方式新版本常用systemctl stop kingbase8d systemctl status kingbase8d # 确认是inactive状态sys_ctl方式手工启动常见/opt/Kingbase/ES/V8/bin/sys_ctl -D /opt/Kingbase/ES/V8/data stop旧版本服务脚本/etc/init.d/kingbase8d stop停止之后用下面的命令确认没有残留进程ps -ef | grep kingbase | grep -v grep ss -ltnp | grep 54321有输出就说明没停干净先排查为什么还有进程再继续下一步千万别在这种状态下直接卸载。2.2 运行官方卸载脚本以官方工具为主力Kingbase在Linux环境下提供了一个uninstall.sh脚本位置一般在安装目录的根下。Windows版本则通过控制面板的卸载程序或者安装目录里的uninstall.exe走。这个脚本会执行标准的卸载流程停止服务、删除程序文件、尝试清理部分系统记录。运行方式cd /opt/Kingbase/ES/V8 ./uninstall.sh执行过程中会问几个确认比如“是否确认卸载”“是否删除数据目录”这里务必看清楚再选。如果选删除数据目录前面备份没做就真的翻车了如果不删后面残留清理就要自己多走一步。我自己的建议是既然已经备份过就选彻底删除数据目录省得残留文件导致重装时目录非空的初始化错误。2.3 手工清理残留文件卸载脚本没干完的活跑完官方脚本不要天真地以为就干净了。脚本设计和实现的原因多少会残留一些文件尤其是数据目录、日志文件、配置备份这老三样。按我的经验按优先级排查和清理主安装目录即使脚本删过也去/opt/Kingbase下看一眼有残留就rm -rf掉。data目录如果刚才没选删除这里肯定还在。确认备份完毕后直接删除这一步对重装至关重要。日志目录/var/log/kingbase或安装目录下的log目录。临时文件/tmp下偶发的Kingbase相关临时目录。数据库用户如果是专用kingbase账号顺手确认是否需要清理注意影响面。执行删除前再三确认路径rm -rf没有后悔药。我的习惯是改文件名而不是直接删mv /opt/Kingbase/ES/V8 /opt/Kingbase/ES/V8_bak_20240101重装确认跑通后再回头删备份目录稳妥得多。2.4 清理环境变量与系统服务记录这一节是很多人忽略的重灾区。环境变量残留会导致重装后命令指向错误路径系统服务记录残留会导致服务启动时调用不存在的脚本直接报错。先看环境变量检查位置echo $KINGBASE_HOME echo $PATH | grep kingbase找到配置来源通常在以下文件中/etc/profile全局配置/etc/profile.d/kingbase.sh独立脚本/home/kingbase/.bash_profile用户配置把相关的export语句删掉或注释掉。这里有个容易翻车的地方有的安装脚本会把LD_LIBRARY_PATH也加进去这东西一旦残留重装后可能搅乱整个动态库加载顺序导致连别的工具都启动异常。所以环境变量清理要彻底不要只盯着PATH。再看系统服务记录systemctl list-unit-files | grep -i kingbase有输出就执行systemctl disable kingbase8d systemctl daemon-reload rm -f /etc/systemd/system/kingbase8d.service旧版本可能注册在/etc/init.d/下对应也清理掉。3. 残留检查卸载干不干净三条命令说了算3.1 进程与端口双重确认清理完所有东西重启一下系统是最保险的验证方式没错我建议这一步直接重启很多顽固环境问题重启后现出原形。如果条件不允许重启那就执行以下检查# 进程检查 ps -ef | grep -i kingbase | grep -v grep # 端口检查 ss -anpt | grep 54321两条命令都没有输出说明进程和端口层面的清理是到位的。有输出就顺着PID找进程的启动路径多半是上面清理时遗漏的目录或脚本导致的逐一排除。3.2 文件与服务记录检查再看文件层面是否还有遗骸# 常见的安装路径 ls -ld /opt/Kingbase /home/kingbase/ES 2/dev/null # 全盘找关键词文件 find / -name *kingbase* -o -name *Kingbase* 2/dev/null | head -50系统层面# 服务注册情况 systemctl list-unit-files | grep -i kingbase # 动态库链接 ldconfig -p | grep kingbase # 环境变量 env | grep -i kingbase全部没有输出这台机器才算真正“不认识”Kingbase了。到此卸载环节完整收工可以放心进入重装阶段。4. 重装全流程从安装包到新实例4.1 安装前检查清单五个必查项重新安装前有几项检查是雷打不动的。每缺一项后面都可能浪费半小时起步的排查时间检查项检查命令失败时的对策端口占用情况ss -lntp | grep 54321清理占用端口的进程或换端口磁盘空间df -h /opt至少预留20GB以上具体按业务量评估依赖库完整性ldd /opt/Kingbase/ES/V8/bin/ksql | grep not found缺什么补什么常见如libsslJDK版本特定版本需要java -version按安装文档要求安装对应JDKlicense文件cat license.dat确认有效期从原厂商重新申请上面的磁盘空间是关键指标。Kingbase安装包本身几个GB初始化数据目录又是几个GB加上日常膨胀的日志空间不够会引发连锁报错。4.2 安装过程实录关键选择与操作细节安装包准备好后Linux环境下一般是kingbase8_v008r006***_installer.iso或者tar.gz包。以ISO方式举例# 挂载安装介质 mkdir -p /mnt/kingbase_install mount -o loop kingbase8_v008r006.iso /mnt/kingbase_install # 运行安装程序 cd /mnt/kingbase_install ./setup.sh安装界面会依次让你确认几个关键项安装目录建议沿用/opt/Kingbase/ES/V8路径清爽且和文档、脚本的默认预期一致。数据目录一般跟随安装目录放在data下。也可以单独放独立磁盘分区生产环境这样有利于IO隔离和备份管理。数据库类型测试环境选“试用版”或开发版生产用正式授权版本注意勾选对应的初始化类型。字符集UTF-8是省心选项。除非有老业务用GBK历史包袱否则无脑选UTF-8兼容性和扩展性都好。安装过程中会有一个环节要求填SYSTEM超级用户口令和KINGBASE安全用户口令。这个地方注意口令复杂度和记忆方式忘了口令重置绕一大圈。装完后建议顺手把口令记录下来放到密码管理工具里别裸存桌面。整个安装过程通常会持续10到20分钟。等待期间顺便确认license.dat要放到安装目录的正确位置等初始化实例的时候要用。4.3 初始化实例与启动验证安装程序跑到最后会问你是否立即创建初始数据库实例选“是”。这个操作等同于执行了/opt/Kingbase/ES/V8/bin/sys_initdb -D /opt/Kingbase/ES/V8/data -U system --encodingUTF8 /opt/Kingbase/ES/V8/bin/sys_ctl -D /opt/Kingbase/ES/V8/data start这里有个关键点如果前面卸载时没删干净data目录sys_initdb会直接提示“数据目录非空”而中止。遇到这个不要尝试强行加减参数绕过回去把残留目录处理掉重新跑一遍initdb才是正道。实例启动后验证连接/opt/Kingbase/ES/V8/bin/ksql -U system -d testdb -p 54321如果端口做过变更记得把下面两个文件里的端口号同步改掉kingbase.conf中的port参数sys_hba.conf中的连接策略一般不用改端口但IP访问控制要确认顺利看到SQL提示符说明重装成功。这时候可以创建业务库、导入之前的备份数据把环境恢复原样。5. 常见问题与排查技巧实录5.1 重装后连接报错一个排查矩阵重装后最容易遇到的一个现象就是“连不上数据库”。我按经验列了个排查路径遇到问题照着走现象排查方向解决办法connection refused积极拒绝服务没起来查sys_ctl status看日志文件尾行报错connection timed out超时网络或防火墙拦了检查本机防火墙和远端白名单配置密码认证失败密码输错或sys_hba.conf配置过严确认口令检查sys_hba.conf的认证方式all server processes terminated初始化时有异常查看data目录下的postgresql日志定位崩溃原因这里要特别提一个隐蔽的坑重装后的sys_hba.conf默认可能只放行本地连接如果之前业务是通过内网IP连数据库重装完必须手动加对应网段的访问规则否则应用侧报错会误导向“是不是安装失败了”。5.2 重装后服务起不来的完整排查思路服务起不来是另一个高频问题。我一个典型的处理流程分享出来先看服务状态和日志systemctl status kingbase8d tail -100 /opt/Kingbase/ES/V8/data/log/startup.log日志里的常见报错和应对方式“FATAL: data directory ... has invalid permissions”数据目录属主不是kingbase用户执行chown -R kingbase:kingbase /opt/Kingbase/ES/V8/data修复。“could not bind IPv4 address: Address already in use”端口被占用ss -lntp查占用进程或改kingbase.conf里port参数。“could not open shared memory file”内核参数kernel.shm或kernel.shmmax不满足要求按文档调大后sysctl -p生效。“unrecognized configuration parameter”旧的postgresql.conf或kingbase.conf残留了不兼容参数对比文档清理。遇到日志里看不明白的内容直接把整行错误信息复制出来去搜大部分问题都不是只有你一个遇到。能快速定位问题的正确思路是先看日志再动手重启反复盲启只会让问题更难排查。5.3 几个容易被忽略的坑来自真实操作的教训最后分享几个我自己和身边同事踩过的坑特别容易在卸载重装中出现坑一重装前忘了停旧服务端口一直占着我之前见过同事卸载到一半发现uninstall.sh报错说服务停止失败原因是有一个kingbase进程挂在后台无法正常终止。这种时候先手动把进程处理掉再重新跑卸载脚本不要和它硬碰硬。查进程时用ps -ef | grep kingbase | grep -v grep逐条确认每个PID来源是什么确认安全再处理。坑二环境变量叠加导致ksql执行报错重装后执行ksql时报“找不到库”之类的错误多半是旧的LD_LIBRARY_PATH还指向旧目录或者新增了多个路径动态库加载顺序被搞乱。写代码常说“环境是最大的隐性依赖”Linux程序也一样。把环境变量理干净保证只有一条指向新安装目录的记录问题立刻消失。坑三新实例的字符集和老的业务库不一致重装时选了UTF-8但备份是从老库的GBK库导出的恢复后中文乱码。这类问题在备份恢复环节就要注意到。卸前记录字符集恢复时先建同字符集库再导数据。坑四license文件位置不对实例初始化报license错误安装程序创建实例时会校验license文件放错目录会让初始化直接失败。拿到license先确认文件内容和到期时间放到安装目录指定位置一般就是安装根目录或bin同级再执行初始化。另外提醒一句正式环境用试用license能应付一时但到期后服务会拒绝启动别拿试用license掉以轻心。6. 写在最后的几点个人体会卸载重装这件事单看每一步都不难难的是把每一步做到位、把坑都避开。数据备份永远在最前面服务清理和残留文件检查是标准流程重装时数据和配置的记录则是防止返工的关键。我个人的经验是把上述操作在测试环境完整跑一遍再用同样手法到生产环境执行心理上踏实很多。这个流程本身也是给自己积累一套标准操作手册下次再遇到环境要重建照着走就是一条成熟路径。另外顺手把关键的配置参数、服务启动方式、日常备份策略记录在一个独立的运维笔记里环境维护起来会轻松很多。希望这篇内容对你有实在的参考价值。
返回列表