ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Windows 安装人大金仓 KingbaseES:环境自检、初始化与故障排查

Windows 安装人大金仓 KingbaseES:环境自检、初始化与故障排查 1. 先想清楚Windows 上跑人大金仓数据库到底适合什么场景聊 Windows 安装人大金仓数据库这件事得先把定位摆正。人大金仓KingbaseES作为国产数据库里装机量比较靠前的一款绝大多数生产环境是跑在 Linux 上的但 Windows 版本的需求量其实一直不小主要集中在几类场景一是本地开发人员在 Windows 笔记本上做 SQL 调试和迁移适配不想专门开虚拟机二是做信创改造的项目需要先在 Windows 上验证应用兼容性再往服务器上迁三是教学演示和 PoC 验证临时搭一套跑通业务就行。如果你属于上面任意一类Windows 版本完全够用而且装起来比 Linux 省事不少。我自己第一次在 Windows 上装金仓是因为一个老系统要从 MySQL 迁过去开发同事的机器清一色是 Windows谁都不想为了调几条 SQL 去装双系统。那次踩的坑不算少从安装包选错版本、License 没放对位置到端口被占、服务启动失败、中文乱码基本把一个新手能遇上的问题都碰了一遍。所以这篇东西我打算按“装之前该想什么、装的时候注意什么、装完之后怎么修”这条线来写把 Windows 环境里那些特有的坑讲透而不是照搬官方安装手册从头念一遍。官方文档解决的是“按钮点哪里”我这边解决的是“为什么点这里”和“点了报错怎么办”。内容会覆盖版本选择、License 机制、环境自检、图形化和静默两种安装方式、实例初始化参数、配置文件调优以及一堆真实遇过的报错。适合完全没接触过金仓的新手也适合装过一次但被某个报错卡住半天的人。下面进入正题。1.1 场景判断决定你该装哪个版本人大金仓的 Windows 安装包版本号一般长这样KingbaseES_V008R006B0023_Win64_install.exe这是 V8R6 系列也有 V9 系列的包。名字里V008R006代表主版本 V8、小版本 R6后面的 B0023 是内部构建号。挑版本的核心原则不是越新越好而是跟你的目标环境对齐。如果你线上服务器已经定了 V8R6本地开发机也老老实实装 V8R6跨版本之间虽然大体兼容但个别函数、语法、参数默认值会有差异用 R6 写的 SQL 拿到 R3 上跑出幺蛾子的概率不低。再就是发行版类型金仓大致分企业版、标准版、安全版和开发版。企业版功能最全但要授权License标准版砍掉一些高级特性开发版通常是免费下载的但一般有限制比如最大连接数受限、不能用于商业生产。本地做开发调试开发版足够省去搞授权文件的麻烦要做完整功能验证就得让项目方提供企业版的 License。另外安装时还能选兼容模式分别向 Oracle、MySQL、PostgreSQL 靠拢这个选择非常关键——它会直接影响到内置函数、系统视图名和语法解析行为。举个例子你要迁的是一套 MySQL 应用那就在安装时选 MySQL 兼容模式很多IFNULL、LIMIT之类的写法不用改就能跑选错了后面得靠修改 SQL 来硬扛工作量翻几倍。注意兼容模式在初始化实例的时候就定下来了后续想改代价很大基本等于重建库。所以装之前一定要跟应用侧的同事确认清楚源库是什么。1.2 硬件门槛和系统版本要求Windows 版金仓对硬件的要求并不高但它对内存的胃口跟它开出来的参数直接挂钩。官方最低配一般写 2GB 内存、5GB 磁盘这个数字只能让你把库装起来、连上去真跑业务会很难受。我自己的建议是纯本地调试给 8GB 内存、20GB 空闲磁盘如果要在本地跑大数据量的迁移测试内存往 16GB 走磁盘最好留 SSD。原因是金仓初始化时会根据当前机器内存自动推算shared_buffers、work_mem这类参数机器内存太小它推出来的值也很保守稍微复杂点的查询就得反复读写磁盘。系统版本方面Windows 7 SP1、Windows Server 2008 R2 以上都能装实测 Windows 10、Windows 11、Windows Server 2016/2019 都正常。有一点特别容易忽略安装包分 32 位和 64 位现在基本只维护 64 位版本如果你的机器是 32 位系统趁早放弃换台机器。另外安装目录千万避开中文和空格像D:\KingbaseES\V8这种路径最省心。我用D:\我的软件\人大金仓这种带中文的路径装过一次安装向导能过但后面初始化数据库那一步直接报错退出日志里全是编码相关的提示换成纯英文路径就没事了。这个坑在 Linux 上不明显Windows 上因为路径编码处理确实会出问题。还有一个隐性门槛是权限。金仓安装时会注册 Windows 服务、写注册表、往安装目录塞文件必须用管理员身份运行安装程序。普通用户双击安装走到一半弹“无权限写入”装完的实例也是残缺的。2. 安装包、License 与装之前的六项环境体检安装包拿到手别急着双击先花十分钟做环境体检。我在项目上见过太多“装到 90% 失败然后从头来”的情况十有八九是体检没做。这一节把安装包来源、License 机制和六项自检讲清楚做完这些再动手成功率能高一大截。2.1 安装包形态与 License 文件的正确放置金仓 Windows 安装包一般有两种形态一种是.exe图形化安装包双击就是向导另一种是.zip免安装包解压完手动初始化实例。前者适合单机、新手后者适合要复制多份环境或者塞进自动化流程的场景。企业版安装过程中会让你指定 License 文件通常是license.dat或license_xxx.dat向导里有一个单独的“选择授权文件”界面。这里有个非常容易踩的坑License 是跟机器绑定的很多授权文件在生成时会绑定网卡 MAC 地址或者主机名你从同事那拷一份过来装到自己机器上大概率提示“授权无效”或“授权已过期”。开发版一般不需要单独 License安装包自带但也别指望它能当生产用。如果装的时候跳过了 License 界面或者在免安装包里手动初始化License 就得放到特定目录。我的经验是放到安装根目录或者data同级目录下具体以版本说明为准放错位置的表现是服务能起但一连库就提示授权问题。真遇到这种情况先别怀疑安装先确认 License 是不是过期、是不是绑定了别的机器。提示把安装包、License、安装路径、端口、密码这些信息记在一个文本文件里跟安装目录放一起。下次重装或者换机器能省掉大量回忆成本。2.2 六项环境自检缺一项都可能翻车下面这六项是我每次装环境都会过的清单用表格列出来逐项对着做就行。检查项检查方式不通过的后果处理办法管理员权限右键安装程序看有没有“以管理员身份运行”装到中途失败、服务注册不上用管理员账户登录右键以管理员运行安装路径路径里有没有中文、空格初始化实例报错、乱码改成纯英文无空格路径端口占用netstat -ano | findstr 54321服务启动失败、连不上换端口或结束占用进程杀毒软件看是否装了第三方安全软件安装慢、文件被隔离临时关闭或给安装目录加白名单磁盘空间看目标分区剩余空间安装中断、初始化失败至少留 10GB 以上系统编码查看区域设置是否为中文数据乱码、排序异常确认使用中文区域或用 UTF8端口这一项值得多说两句。金仓默认端口是54321这个端口不算常见但仍然可能被别的程序占。判断方法是在命令行敲netstat -ano | findstr 54321如果输出里有一行LISTENING说明已经被占了记住行尾的 PID用tasklist | findstr PID看是哪个进程。我之前遇到过一个同事的机器 54321 被某个测试工具占了装完服务怎么都起不来查了半天才发现。解决方式要么杀掉那个进程要么安装时把端口改成别的比如 54322但改端口之后所有客户端连接都得跟着改不如一开始就避开。杀毒软件这块也别轻视。Windows 上某些安全软件会拦截数据库进程创建子进程、写内存映射文件表现是安装进度条卡死或者服务反复重启。稳妥的做法是安装前把安装目录和data目录加进白名单而不是简单粗暴地整个关掉——关掉忘了开风险更大。3. 图形化安装的每一步从向导到实例初始化环境体检过了就可以动手装了。图形化向导虽然看着简单但几个关键界面选错了后面就得重来。这一节把向导每一步拆开讲顺便把静默安装的做法也带上方便需要批量部署的人。3.1 向导逐屏拆解与关键选项的含义双击安装包第一屏通常是语言选择和欢迎页选中文、点下一步。接下来是许可协议同意即可。然后是安装类型典型安装、完整安装、自定义安装。典型安装会装数据库服务器、客户端工具和开发管理工具完整安装还会多装一些管理组件自定义安装让你勾选组件。我第一次图省事选了典型后面发现没有 ksql 命令行工具又回头补装。如果你确定要用命令行调试直接选完整安装省得补。再往下是安装目录前面强调过的纯英文路径就在这设。接着是端口设置默认 54321前面查过没占用就别改。然后是超级用户密码金仓默认超级用户是system密码在这一步设置。密码策略比 MySQL 严格一般要求 8 位以上、包含大小写字母、数字和特殊字符纯数字或者纯字母会被拒绝。这个密码一定要记牢system用户相当于 PostgreSQL 的postgres权限最高。接下来是数据库初始化相关设置包括数据库字符集、Locale、兼容模式。字符集建议选 UTF8除非你的应用明确要求 GBK。Locale 这块Windows 上中文环境一般提供Chinese_China.936这种选项选它能让排序规则符合中文习惯如果选C排序是按字节序来的中文排序会乱。兼容模式按前面说的跟源库对齐。最后是预安装摘要把要装的东西列一遍确认无误点安装。安装过程大概几分钟到十几分钟取决于磁盘速度。装完向导会自动调用initdb初始化数据库实例这一步日志里能看到类似 “initializing database cluster” 的字样。如果这里报错多半是路径编码、权限或内存参数的问题去看安装目录下data/log里的日志。3.2 静默安装批量铺环境时的省事做法如果你要给十几台机器装同一套环境图形化一屏屏点太费时间这时候用静默安装。金仓的安装包支持通过响应文件response file来做无人值守安装大致思路是先在一台机器上正常装一遍把安装过程中填的信息导出成.ini或.properties响应文件然后在其他机器上用命令行调用安装程序并指定这个文件。命令大概长这样# 以静默方式安装指定响应文件 KingbaseES_V008R006B0023_Win64_install.exe -i silent -f install_response.ini响应文件里大致包含这些键值# install_response.ini 示例字段以实际版本为准 USER_INSTALL_DIRD:\\KingbaseES\\V8 PORT54321 SUPERUSER_PASSWORDYourPssw0rd DB_COMPAT_MODEmysql DB_ENCODINGUTF8 LICENSE_FILED:\\KingbaseES\\license.dat用静默安装有两个要注意的地方第一响应文件里的路径要用双反斜杠转义否则解析会出问题第二静默安装不会弹错误提示失败了只能靠退出码和日志判断所以装完必须手工验证服务和连接。我一般会在批处理里加一段校验装完自动跑一条SELECT 1跑通才算成功。注意静默安装最适合标准化程度高的场景如果你的机器配置五花八门反而图形化更靠谱。别为了省事把坑埋进自动化脚本里。4. 实例初始化与参数调优把库调成能干活的状态安装向导跑完实例其实已经初始化了但默认参数是“能跑”级别不是“能干活”级别。这一节讲两件事一是手动和自动初始化的细节尤其是编码和 Locale二是两个核心配置文件kingbase.conf和sys_hba.conf里必须改的项。4.1 initdb 初始化与编码、Locale 的坑金仓的初始化命令是initdb位于安装目录的bin下。图形化安装时向导替你调用了它如果你用的是免安装包就得自己动手# 进到 bin 目录初始化一个实例到 data 目录 cd D:\KingbaseES\V8\bin initdb -D D:\KingbaseES\V8\data -U system -W --encodingUTF8 --localeChinese_China.936-U指定超级用户名-W表示初始化过程中交互式输入密码--encoding是数据库字符集--locale是区域设置。编码和 Locale 一旦初始化完就不能改除非重做实例因为它们是写在data目录的模板库里的。这里最常见的坑是乱码。你初始化时用了 UTF8但 Windows 命令行窗口默认是 GBK 编码用ksql一进去中文就是一堆问号。这其实是客户端显示问题不是数据库存储问题。解决办法是在 ksql 里执行\encoding查看当前客户端编码用SET client_encoding TO UTF8;临时改或者设置环境变量PGCLIENTENCODINGGBK让客户端按 GBK 解析。如果数据本身存进去就是乱码那才是初始化的锅。另一个坑是 Locale 选C之后ORDER BY排中文会按 Unicode 码点排跟拼音顺序完全不同业务侧如果依赖排序结果会被投诉。所以中文环境务必选中文 Locale。4.2 kingbase.conf 与 sys_hba.conf 的必改项金仓的核心配置文件放在data目录下kingbase.conf控制服务器行为sys_hba.conf控制客户端访问权限。这两个文件长得跟 PostgreSQL 的postgresql.conf、pg_hba.conf几乎一样有 PG 经验的人上手很快。kingbase.conf里我建议至少关注这几个参数# 监听地址* 表示监听所有网卡 listen_addresses * # 端口改了这里所有连接都得跟着改 port 54321 # 最大连接数按业务并发估 max_connections 200 # 共享缓冲区内存的 25% 左右Windows 下别超过 4GB shared_buffers 2GB # 单条查询可用的排序/哈希内存 work_mem 16MB # 维护操作建索引、VACUUM可用内存 maintenance_work_mem 256MB关于shared_buffers有个 Windows 特有的经验这个值别设太大。Linux 上可以给到物理内存的 40% 甚至更多但 Windows 下 Windows 的内存管理机制跟 Linux 不一样shared_buffers设得过大比如 8GB 以上可能导致服务启动时报内存映射相关的错误。我一般把它控制在 2GB 到 4GB 之间剩下的内存交给操作系统做文件缓存整体性能反而更稳。sys_hba.conf是访问控制默认可能只允许本机连接。要让别的机器连进来得加一行# 允许 192.168.1.0/24 网段用密码方式连接所有库 host all all 192.168.1.0/24 scram-sha-256 # 全放开仅限内网测试环境生产别这么干 host all all 0.0.0.0/0 scram-sha-256改完配置要重启服务才生效sys_ctl restart -D D:\KingbaseES\V8\datasys_ctl是金仓的服务控制命令参数跟 PostgreSQL 的pg_ctl一致。常用的还有start、stop、status。注意在 Windows 上如果你是用安装向导装的服务也可以用 Windows 的net start、net stop加上服务名来控制效果一样。提示每次改kingbase.conf之前先备份一份改坏了能立刻还原。数据库参数不像代码改错一个数字可能导致服务起不来有备份心里踏实。5. 问题排查实录从安装到连接的高频故障这一节是全文最实用的部分我把这几年在 Windows 上装金仓碰到的典型问题按阶段列出来附上排查思路和解决办法。你可以当成一张排障速查表遇到对得上的直接跳过去看。5.1 安装阶段的高频报错报错一安装程序启动后闪退或者进度条走到一半消失。这种情况九成是权限不够或者杀毒软件拦截。先确认是不是右键以管理员身份运行的再看杀毒软件日志有没有把安装过程中的临时文件隔离掉。我遇到过一次是安全软件把initdb生成的临时可执行文件当成威胁拦了加白名单后一次通过。报错二提示“安装目录包含非法字符”或初始化实例失败。就是路径问题检查有没有中文、空格、特殊符号。改成D:\KingbaseES\V8这种最保险。顺便说一句路径不要太长Windows 对路径长度有历史限制嵌套太深也可能出问题。报错三License 无效或已过期。先看授权文件是不是跟机器绑定再确认系统时间对不对。有些授权是按时间授权的系统时间被改到未来授权直接就废了。这种情况把系统时间调回正确值再试。5.2 服务启动与运行阶段的故障故障一Windows 服务 KingbaseES 启动失败错误码 1067 或者服务无响应。这是最最常见的一个。排查顺序是这样的先看data/log目录下最新的日志文件Windows 上金仓的日志文件名一般带日期内容能直接告诉你哪一步挂了。如果日志里提示端口被占按前面说的方法处理如果提示内存映射失败把shared_buffers调小如果日志根本没生成可能是data目录权限不对给安装目录和data目录加上当前用户的完全控制权限试试。故障二服务能启动但连不上。分两种本机连不上和远程连不上。本机连不上先看kingbase.conf里listen_addresses是不是localhost如果是改成*远程连不上看sys_hba.conf有没有放行对应网段以及 Windows 防火墙有没有放行 54321 端口。Windows 防火墙这块很容易漏尤其服务器版系统默认策略比较严得手动加一条入站规则。故障三数据库运行一段时间后服务自动停止。大概率是内存不足或者触发了系统的资源限制。看 Windows 事件查看器里“应用程序”日志有没有跟数据库进程相关的错误。也可能是max_connections设得太大每个连接都占内存把系统内存耗尽。计算方式是max_connections × (work_mem 连接开销)粗估下来200 个连接、每个 work_mem 16MB光这一项就可能吃掉好几 GB。5.3 连接层与客户端工具的问题问题一客户端工具连不上提示“no pg_hba.conf entry”或者认证失败。这个信息很明确就是sys_hba.conf里没有匹配的规则。注意金仓的认证方式有trust、md5、scram-sha-256、password几种版本不同默认值不同。V8R6 之后默认倾向scram-sha-256老客户端可能不支持可以临时改成md5但生产环境建议保持较强的认证方式。问题二用 Navicat、DBeaver 这类工具连接时表看不见、字段类型识别错。这是驱动和兼容模式的问题。金仓提供 JDBC/ODBC 驱动Navicat 里如果直接用 PostgreSQL 驱动多数情况能连但系统表、函数识别可能不全。建议用金仓官方提供的驱动配置连接时选对驱动类型。另外如果实例是 Oracle 兼容模式部分系统视图名跟 PG 不一样工具可能读不到元数据。问题三ksql 里中文显示成问号。前面提过是客户端编码问题用SET client_encoding TO GBK;或者UTF8试一下哪个能正常显示用哪个。问题四密码修改后连不上。金仓的密码策略比较严ALTER USER改密码时如果不满足复杂度要求会报错。另外改完密码如果没生效检查是不是改到了错误的用户或者连接时用了缓存的旧密码。篇幅有限把最典型的先列这些。真遇到没头绪的报错第一件事永远是去看日志data/log和金仓自带的日志目录日志里的报错原文直接拿去搜效率比瞎猜高得多。现象最可能的根因快速验证方式服务启动失败 1067端口占用 / 内存参数过大 / 目录权限看 data 日志、查端口远程连不上sys_hba.conf 未放行 / 防火墙本机先测再查防火墙规则中文乱码客户端编码不匹配SET client_encoding 试探连接数报错max_connections 到顶查系统视图看当前连接数认证失败hba 规则或密码策略看日志里的具体认证错误6. 卸载、重装与升级时容易忽略的几件事装得多了免不了要卸载重来。金仓在 Windows 上的卸载有个坑用控制面板卸载之后服务可能还残留着data目录也可能没删干净。残留的服务会导致重装时新服务注册不上或者端口还占着。彻底清理得手动来# 查看是否还有残留服务 sc query KingbaseES # 删除残留服务 sc delete KingbaseES再手工删掉安装目录和data目录删之前确认里面的数据确实不要了。data目录是数据库实例的全部家当配置文件、数据文件、日志都在里面删掉就等于库没了。如果只是想重装软件、保留数据可以把data目录整个拷出来重装时指向这个已存在的数据目录理论上能直接挂上去用但版本不一致时会有兼容性问题跨大版本升级千万别这么干。升级的话金仓跨小版本比如 V8R6 的 B0023 到 B00xx一般可以用替换二进制加重启服务的方式跨大版本就得用逻辑备份导出再导入或者官方提供的升级工具。升级前一定做全量备份sys_dump导出一份逻辑备份再把data目录冷备一份双保险。我见过有人升级失败又没备份只能从业务侧重新导数据折腾了一整天。还有一点是数据目录的迁移。Windows 上想把库从 C 盘搬到 D 盘不能直接剪切粘贴。正确做法是停服务把整个data目录复制到新位置然后修改服务启动参数或者重新注册服务指向新路径。安装向导装的服务启动参数在注册表里改起来麻烦更省事的做法是干脆不用服务直接用sys_ctl命令行启动注册一个自定义的批处理放启动项里。这种方式灵活但要注意用户会话注销后进程可能被杀得用计划任务以“不管用户是否登录都运行”的方式挂起来。我个人在 Windows 上折腾金仓这些年的体会是安装本身不难难的是环境的不确定性。同一套安装包在这台机器上一次通过换台机器可能因为一个杀软、一个端口、一个中文路径就卡住。所以比起记步骤更重要的是记住排查的路径——先看权限再看路径再看端口最后看日志。这四步走下来九成问题都能定位。最后再分享一个小习惯每次装完环境我会把版本号、端口、安装路径、超级用户密码、兼容模式这几个信息写进一个readme.txt跟安装目录放一块。过几个月回来维护不用靠猜打开文件一目了然。这个习惯帮我省了不少返工的时间尤其是同时维护好几套环境的时候。
返回列表