ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

麒麟V10 SP3安装金仓数据库KingbaseES完整实操指南

麒麟V10 SP3安装金仓数据库KingbaseES完整实操指南 最近在麒麟V10 SP3上装了一回金仓数据库前前后后折腾了大半天总算把流程理顺了。这个事看着简单实际上一路都是细节目录权限、依赖库、安装模式、数据库初始化哪一步卡住都够你喝一壶的。这篇把我这次在麒麟V10 SP3环境安装金仓的完整过程、关键报错和排查思路都梳理出来给正在做同样工作的朋友一个可参考的实操记录。不管是准备部署生产库还是第一次在国产操作系统上搭数据库环境下面这些内容应该都能帮上忙。1. 环境说明与安装前准备工作1.1 先搞清楚你的系统版本和安装包选型麒麟V10 SP3这个版本全称是银河麒麟高级服务器操作系统V10 SP3它是麒麟V10系列里的一个更新维护版本底层基于Linux生态x86_64和ARM架构都有对应镜像。金仓数据库对应的是人大金仓KingbaseES我这次用的是KingbaseES V8版本安装包后缀一般类似KingbaseES_V008R006C008B0020 ... x86_64.tar.gz。选安装包之前一定先用uname -m看一眼机器架构x86和ARM的包不通用。比如uname -m输出aarch64就得找ARM版输出x86_64才用x86包。这一步错了后面装到一半才发现很浪费时间。金仓数据库安装包官方一般提供图形化安装程序和命令行安装模式。在服务器上我强烈建议用命令行安装也就是执行setup.sh -i console来走交互式安装。图形界面还得依赖X11很多服务器环境根本没有装桌面远程连过去还得搞X forwarding麻烦。命令行安装虽然看起来没有图形界面那么直观但每一步都有明确的提示选项实际用下来反而更稳也方便记录日志排查问题。获取安装包后最好先校验一下MD5尤其是用U盘拷到麒麟系统上的文件中间传输容易损坏。校验命令如下md5sum KingbaseES_V008R006C008B0020_x86_64.tar.gz把官网上给出的MD5比对一下一致了再继续。我遇到过解压到一半报“gzip: invalid compressed data”重传一遍文件就正常了所以这一步别省。1.2 系统层面提前处理防火墙和依赖库麒麟V10 SP3默认是否开启防火墙要看安装时怎么选的但检查一下总没错。数据库安装完成后需要对外提供服务端口得放行。金仓的默认端口是54321不是PostgreSQL的5432也不是MySQL的3306这个后面配置和连接时特别容易记错。如果环境允许关闭防火墙可以临时关掉测试但生产环境不建议这么做。更规范的方式是直接放行端口firewall-cmd --zonepublic --add-port54321/tcp --permanent firewall-cmd --reload如果使用的是无firewalld的轻量化服务器可以用systemctl status firewalld确认服务状态。另外麒麟系统上如果开启了SELinux建议先临时关闭避免金仓的数据文件被SELinux策略挡住。临时关闭命令是setenforce 0不过这只是当前会话生效要永久关闭还得改/etc/selinux/config把SELINUXenforcing改成SELINUXdisabled。我见过不少装到一半失败最后发现是SELinux拦截了数据库进程访问数据目录的案例所以提前处理掉别让权限问题干扰后续排查。依赖库方面我自己在干净系统上装金仓遇到过缺少libicu的情况导致安装器或数据库引擎起不来。可以先装好常用依赖yum install -y libicu lsof glibc麒麟V10 SP3通常自带yum源直接install就行。另外lsof和ss命令后面排查数据库端口时要用提前装好。1.3 创建专用用户和数据目录金仓数据库和Oracle、PostgreSQL类似强烈建议不要用root直接跑。生产环境必须创建一个专用的系统用户来运行数据库服务这里我创建的是kingbase用户。groupadd kingbase useradd -g kingbase -m -d /home/kingbase kingbase passwd kingbase目录规划也很重要。推荐把软件目录和数据目录分开。软件目录通常放在/opt/Kingbase/ES/V8数据目录可以单独放在/data/Kingbase/data这样以后重装系统或扩容磁盘更灵活。如果机器上只有一块盘至少把数据目录独立成一个分区或者至少是独立逻辑卷方便后续备份和扩容。创建目录并授权mkdir -p /opt/Kingbase/ES/V8 mkdir -p /data/Kingbase/data chown -R kingbase:kingbase /opt/Kingbase /data/Kingbase这里还有个容易被忽略的点/opt和/data挂载点的权限。如果/data本身被root设置了700权限光把子目录授权给kingbase还是进不去。所以需要确认路径上的每一级目录都有执行权限至少/data要是755。我一般会把/data设置成755子目录再单独给kingbase用户所有权限。2. 安装过程的实际步骤2.1 解压安装包并启动安装程序安装包一般是以tar.gz格式发布的。先切到kingbase用户或者用root解压后再把属主改回来。我习惯先解压到临时目录再以kingbase用户运行安装程序避免安装包内文件权限丢失。tar -xzvf KingbaseES_V008R006C008B0020_x86_64.tar.gz -C /tmp/kingbase_install chown -R kingbase:kingbase /tmp/kingbase_install su - kingbase cd /tmp/kingbase_install/setup ./setup.sh -i console执行后安装程序会进入文本交互界面。第一次跑的时候不要急一步步看提示。如果之前系统里装过金仓旧版本安装器会检测到残留的安装信息最好先清理干净再装不然容易遇到版本冲突。这里说下为什么推荐-i console而不是直接-i silent。静默安装需要提前把配置参数写在配置文件里第一次装的人容易漏掉某些参数出了问题反而更难排查。而console模式每一步都有默认值可以即时看到安装器在做什么适合记录整个流程。等到你已经完整装过一遍、参数都摸熟了再改用silent模式批量部署才是正路。2.2 安装过程中的关键选项怎么选进入console模式后会依次询问安装类型、安装目录、数据目录、端口、字符集、超级用户密码等。以我这次安装为例主要选项如下安装类型选“完全安装”包含服务器、客户端和常用接口工具。如果你只需要客户端连接远程数据库可以选“客户端安装”但自己机器上跑服务还是直接全装省心。安装目录默认可能是/opt/Kingbase/ES/V8我直接保留默认。这个目录后续所有二进制文件都会放在里面。数据目录默认可能是安装目录下的data但我改成了/data/Kingbase/data因为数据目录要和软件目录分离。端口默认54321没有特殊需求不要改。字符集根据实际业务选。国内系统一般选UTF8或GBK。如果业务要和Oracle存量库做兼容可能需要用GBK否则UTF8更通用。这个后期虽然也能改但牵涉到已有数据的存储编码建议第一次就选对。超级用户金仓数据库默认超级用户名是system不是root密码必须设置而且尽量复杂一点后面初始化数据库实例会用到。License安装到一定步骤会要求指定License文件。官方安装包通常自带一个试用License路径在解压目录下比如license_standalone.dat。如果没有就得去厂商门户申请正式License。这里不要直接跳过否则数据库引擎会因为缺少授权而拒绝启动。安装过程会显示进度条复制文件大概几分钟。这段时间可以去检查/opt/Kingbase/ES/V8目录空间是否够大避免写到一般磁盘满了报错。安装完成后最后会输出总结信息告诉你安装目录、数据目录和日志位置。2.3 安装后的目录结构说明金仓安装完成后关键目录一般是这样/opt/Kingbase/ES/V8/Server/bin: 二进制和命令行工具像sys_ctl、ksql、initdb等都在这里。/opt/Kingbase/ES/V8/Server/lib: 动态库文件。/opt/Kingbase/ES/V8/data: 数据库数据目录如果之前修改过就在自定义路径下。/opt/Kingbase/ES/V8/log: 安装日志和服务器日志目录。/opt/Kingbase/ES/V8/licence.dat: License文件。弄清楚目录结构以后后面启动服务和排查问题时就知道去哪里找东西。特别提醒日志目录和一些人容易忽视。数据库启动失败时第一件事就是去看日志金仓的日志文件命名一般是kingbase.log或者带日期的.log信息非常详细。3. 启动服务与初始化配置3.1 配置kingbase用户的环境变量安装完成后先用kingbase用户登录设置环境变量。安装程序可能会在/home/kingbase/.bashrc里自动写入一部分但没写的话就需要手动加。编辑~/.bashrc添加如下内容export KDB_HOME/opt/Kingbase/ES/V8 export KDB_DATA/data/Kingbase/data export PATH$KDB_HOME/Server/bin:$PATH export LD_LIBRARY_PATH$KDB_HOME/Server/lib:$LD_LIBRARY_PATH然后执行source ~/.bashrc使其生效。这里的LD_LIBRARY_PATH务必加上否则启动时可能找不到动态库报libkingbase.so: cannot open shared object file之类的错。我自己就在这一步踩过坑当时以为是安装不完整结果只是环境变量没设对。3.2 首次启动和连接验证金仓数据库引擎的启动命令和PostgreSQL类似用的是sys_ctl工具。启动之前先确认数据目录已经初始化完成。安装程序一般会自动初始化实例如果没初始化需要手动执行初始化命令。手动初始化时用initdb工具数据目录属主必须是kingbase用户。启动命令sys_ctl -D /data/Kingbase/data -l /opt/Kingbase/ES/V8/log/kingbase.log start运行后先看有没有报错。如果屏幕没有明显错误再用端口监听确认一下ss -lntp | grep 54321如果看到监听端口说明数据库已经起来了。这时用金仓自带客户端ksql连接ksql -U system -d testtest是安装时默认创建的一个测试数据库也可以换成自己建的库。输入密码后进入SQL命令行运行select version();能看到金仓的版本信息就算OK了。首次连接可能会遇到“数据库test不存在”的报错这个一般发生在自定义安装后没创建测试库或者安装包的默认库名不一样。可以先连到默认维护库postgres或者template1再手动创建测试库。不过在验证环境里很多时候直接连接安装时创建的sample或test就够了。3.3 注册systemd服务实现开机自启命令行启动只对当前会话有效机器重启后数据库不会自己起来。生产环境建议把金仓配置成systemd服务这样开机自动启动失败也容易状态管理。在/etc/systemd/system/kingbase.service写入以下内容[Unit] DescriptionKingbaseES database server Afternetwork.target [Service] Typeforking Userkingbase Groupkingbase EnvironmentKDB_HOME/opt/Kingbase/ES/V8 EnvironmentKDB_DATA/data/Kingbase/data ExecStart/opt/Kingbase/ES/V8/Server/bin/sys_ctl -D /data/Kingbase/data -l /opt/Kingbase/ES/V8/log/kingbase.log start ExecStop/opt/Kingbase/ES/V8/Server/bin/sys_ctl -D /data/Kingbase/data stop ExecReload/opt/Kingbase/ES/V8/Server/bin/sys_ctl -D /data/Kingbase/data restart PIDFile/data/Kingbase/data/postmaster.pid TimeoutSec300 Restarton-failure [Install] WantedBymulti-user.target然后重新加载systemd并启动systemctl daemon-reload systemctl enable kingbase systemctl start kingbase systemctl status kingbase这里有个细节Typeforking意味着sys_ctl start会在后台fork出数据库进程所以systemd需要等pid文件生成。如果PID文件路径不对或者启动太快systemd可能认为服务启动失败但数据库实际已经是起来的。这时要去看kingbase.log和systemd日志来确认。如果PID文件位置和数据目录不对服务状态会显示activating (start)很久最终超时需要调整Unit文件里的PID路径。4. 常见问题与排查思路4.1 权限报错permission should be urwx这个报错是金仓安装和数据目录初始化时很典型的一个坑很多网友搜金仓时也会带上这个关键词。意思是目录权限应该至少有属主读、写、执行权限。常见发生场景是安装程序在复制文件或者初始化数据目录时发现目录属主不是当前运行的kingbase用户或者权限位设置成了700以下甚至目录没有执行权限。解决方式很简单先确认目录属主ls -ld /data/Kingbase /data/Kingbase/data chown -R kingbase:kingbase /data/Kingbase chmod 750 /data/Kingbase/data注意这里的urwx不是让你随便给777。金仓出于安全考虑会检测数据目录权限是否过于宽松或者不足。最佳权限是700或750属主是kingbase属组也是kingbase。不要给到777否则某些版本的安装器同样会因为“group/world可写”而拒绝继续。我习惯先把目录创建好再chmod 750之后所有操作都用kingbase用户执行就不会触发这个报错。4.2 动态库缺失或找不到启动数据库时如果看到类似error while loading shared libraries: libicui18n.so.65: cannot open shared object file说明系统缺少ICU相关库。此时用yum装上即可yum install -y libicu装完以后再次尝试启动。如果库文件存在但金仓的Server/lib里也带了同名库可能是版本冲突。这时可以用ldd命令查看金仓主进程到底依赖哪个库ldd /opt/Kingbase/ES/V8/Server/bin/kingbase根据显示路径来确认。我遇到过系统里有两套ICU库一套新一套旧金仓默认找错路径最后的解决办法是在环境变量里显式指定LD_LIBRARY_PATH让系统优先加载金仓自带库。4.3 端口被占用导致启动失败金仓默认54321端口但系统里如果装过别的数据库或者中间件有可能占用这个端口。启动时报错常见的表现是“Address already in use”。排查方法ss -lntp | grep 54321 lsof -i:54321如果确认被占用要么停掉那个进程要么修改金仓的监听端口。修改端口在数据目录下的kingbase.conf里搜port参数改成比如54329然后重启数据库。端口一改后面所有连接串都要跟着改所以要提前规划好。4.4 启动失败后的日志排查顺序数据库起不来不要瞎猜按照顺序做这几步查看/opt/Kingbase/ES/V8/log/kingbase.log最后几十行。查看/data/Kingbase/data/log目录下有没有更详细的后端错误。查看systemd服务状态systemctl status kingbase如果用systemd管理的话。用sys_ctl -D /data/Kingbase/data status确认进程状态。日志里最常见的启动失败原因是数据目录权限不对、PID文件残留、磁盘空间不足、以及配置参数错误。比如异常断电后可能残留postmaster.pid文件需要手动确认没有进程后删除否则数据库会认为实例还在运行。删PID文件前一定要先确认进程确实不存在不然会造成两个实例同时操作数据目录后果很严重。4.5 超级用户密码忘记了怎么办很多时候测试环境装完就扔一边再登录时密码忘了。金仓的机制和PostgreSQL接近可以通过修改认证配置来重置。大概思路是把数据目录下的pg_hba.conf金仓里可能是kingbase_hba.conf临时改成trust认证方式然后重启数据库直接不带密码连接再执行alter user system password 新密码;。改完密码后把配置改回md5或scram-sha-256并再次重启。具体操作如下vi /data/Kingbase/data/kingbase_hba.conf # 把 host 那条 local 的认证方式改成 trust sys_ctl -D /data/Kingbase/data restart ksql -U system -d postgres ALTER USER system WITH PASSWORD NewPassword123;这个操作有风险改配置后数据库会短暂对本地连接不设密码保护所以只适合在本地控制台上临时处理不要在网络上暴露端口的情况下这么搞。改完务必改回原认证方式。这种事我在UAT环境干过一次后来提醒自己生产数据库的密码一定交接到位。5. 日常使用与维护调优5.1 备份恢复的基本做法金仓的备份工具用得最多的是sys_backup.sh它支持全量备份、增量备份和归档备份。搭建备份策略前先确认数据目录和备份目录不在同一个物理盘上否则磁盘故障时备份也一并没了。最简单的全量备份命令大致是sys_backup.sh -b full -D /data/Kingbase/data -B /backup/kingbase恢复时用恢复工具或者手动把备份文件拷到新数据目录。我在项目里的习惯是每天凌晨做一次增量备份每周日做一次全量备份备份保留30天。相比逻辑导出物理备份在恢复速度上快得多适合数据量大、恢复时间要求高的场景。5.2 几个关键参数和调整方法金仓数据库的参数文件是数据目录下的kingbase.conf。刚安装完裸系统默认参数比较保守需要根据机器内存调整。常见需要改的参数有shared_buffers数据库共享缓冲区大小一般设置物理内存的25%。如果机器有32G内存可以设置8GB。work_mem排序和哈希操作的内存不宜设置过大一般32MB到64MB即可设置太大会导致并发场景内存耗尽。max_connections最大连接数默认说100按实际应用评估。修改参数用SQL比较方便ALTER SYSTEM SET shared_buffers 8GB;然后重启数据库生效。注意ALTER SYSTEM会生成kingbase.auto.conf它优先于kingbase.conf所以别两边同时改了冲突。调整参数时可以先show shared_buffers;查看当前值改完再确认新值。5.3 日志清理和磁盘空间监控数据库运行久了最怕的事就是磁盘被日志和归档文件撑满。金仓的日志目录在/opt/Kingbase/ES/V8/log数据目录下还有数据库运行日志。麒麟V10系统自身的日志比如/var/log/journal也可能膨胀但数据库场景更要关注金仓自己的日志。我的经验是数据库日志重定向到kingbase.log定期轮转或清理。如果有归档日志目录根据归档策略保留最近N份防止无限增长。每天检查一次磁盘使用量df -h特别关注/data挂载点。金仓的sys_log目录里可能有很多按日期滚动的日志文件如果突然暴增说明有异常错误信息比如大量连接失败。碰到这种情况先看日志内容而不是直接删日志因为日志本身就是排错的第一现场。5.4 客户端连接和常见连接字符串示例开发同事问得比较多的是连接字符串怎么写。金仓的驱动兼容PostgreSQL协议所以JDBC连接串跟PostgreSQL很像只是端口默认是54321。例如jdbc:kingbase8://192.168.1.10:54321/database客户端工具除了ksql之外如果是图形化工具DBeaver、Navicat Premium都可以通过PostgreSQL驱动来连金仓前提是端口、用户名和密码填对。我给项目同事推荐过直接用DBeaver选PostgreSQL模式连上后基本功能都能用。不过如果金仓有特定的扩展类型或函数原生金仓驱动兼容性更好。6. 最后再分享一点个人体会金仓数据库装到这里基本能交差了但真正让我头疼的从来不是安装本身而是那些看起来无关紧要的系统和权限细节。像权限报错permission should be urwx根源就一句话——运行数据库的用户无法安全读写数据目录。但查出这一句话要翻日志、排目录、看属主链条很长。这个项目中我最大的经验是一开始就把用户、目录、端口、防火墙这些基础规划好后面能省下一大半功夫。我记得第一次装的时候因为没把/data上级目录授权导致kingbase用户进不去装到一半报错。当时还以为是安装包坏了反复解压重跑了好几遍浪费了两个多小时。后来看到urwx这条日志才意识到是权限设计的问题。从那之后每台机器上部署金仓之前我都会先检查目录权限和环境变量把准备工作当成流程规范来做。如果正在读这篇文档的你正准备在麒麟V10 SP3上装金仓我的建议是不要跳过环境准备也不要在第一次安装时就追求静默自动化耐心走一遍console模式把每一步的默认值记录下来之后再根据实际情况微调。装完之后及时注册systemd服务把备份策略和日志轮转也一并安排上。数据库这东西跑起来只是开始运维才是长跑。希望这篇实操记录能帮你避开我踩过的这些坑。
返回列表