Featured image of post 人大金仓实战:国产数据库安装、迁移与 PG 兼容

人大金仓实战:国产数据库安装、迁移与 PG 兼容

本文整理人大金仓 KingbaseES V9R1C10 的 Docker 部署(DB_MODE 兼容 MySQL/PG/Oracle)、Navicat 通过 PG 协议连接、KDTS 异构数据库迁移工具的全流程实战。

为什么写这篇:人大金仓 KingbaseES 是国内市场份额第一的国产数据库,底层基于 PostgreSQL 但做了大量本地化改造(兼容 Oracle/MySQL 语法)。本文整理 Docker 部署 + 兼容模式选择 + KDTS 异构迁移的全流程实战——这是信创项目的标准动作。

适用读者:信创/国产化替代项目的 DBA / 后端。

前置知识:会用 PostgreSQL(人大金仓的兼容层基本是 PG)、懂 Linux 基础。

目录

  1. 人大金仓与 KingbaseES 简介
  2. 下载与安装许可文件
  3. Docker 部署:DB_MODE 三种兼容模式
  4. Navicat 连接人大金仓
  5. Schema 与多租户
  6. KDTS 异构数据库迁移工具
  7. 生产建议

1. 人大金仓与 KingbaseES 简介

维度说明
厂商北京人大金仓信息技术股份有限公司
产品KingbaseES(KES)
内核基于 PostgreSQL 9.6 深度改造
兼容模式MySQL / PostgreSQL / Oracle 三种
典型客户政府 / 央企 / 金融 / 能源
认证等保四级、CMMI 5、国密算法

关键认知:人大金仓 ≠ PostgreSQL。它有自己的一套工具链(KStudio、KDTS、KMonitor)、自己的驱动包(kingbase8 JDBC)、自己的安全机制(标签访问控制 LBAC)。

1.1 V9R1C10 新特性

  • 兼容 MySQL 8.0、Oracle 19c、PostgreSQL 14
  • 增强并行查询
  • 透明加密(TDE)
  • 行列混合存储(HTAP 场景)

2. 下载与安装许可文件

2.1 下载

官网:https://www.kingbase.com.cn/download.html

核心文件

文件用途
KingbaseES_V009R001C010B0004_x86_64_Docker.tarDocker 镜像 tar 包
license_V009R001C-开发版.dat开发版 license(30 天试用期
KingbaseES_V009R001C010B0004_x86_64_Install.tar完整安装包(包含 KDTS 工具)

2.2 传文件到服务器

1
2
3
4
5
6
# 从本机 126 传到目标 253
sshpass -p '{{REDACTED}}' \
  rsync -e 'ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null' \
  -avz --progress \
  /root/kingbase/KingbaseES_V009R001C010B0004_x86_64_Docker.tar \
  worker2:/data/

2.3 导入镜像

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# 登录目标服务器
sshpass -p '{{REDACTED}}' ssh -o StrictHostKeyChecking=no root@internal.example.com

# 导入
cd /data
docker load -i KingbaseES_V009R001C010B0004_x86_64_Docker.tar

# 验证
docker images | grep kingbase
# kingbase_v009r001c010b0004_single_x86:v1

3. Docker 部署:DB_MODE 三种兼容模式

3.1 启动容器

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
mkdir -p /data/docker/kingbase/data
chmod -R 755 /data/docker/kingbase/data

docker run -tid --privileged \
  --restart=always \
  -p 4321:54321 \
  -v /data/docker/kingbase/data:/home/kingbase/userdata/ \
  -e NEED_START=yes \
  -e DB_USER=kingbase \
  -e DB_PASSWORD='{{REDACTED}}' \
  -e DB_MODE=mysql \
  --name kingbase \
  kingbase_v009r001c010b0004_single_x86:v1 /usr/sbin/init

3.2 DB_MODE 三种模式

DB_MODE兼容语法端口默认适用
mysqlMySQL 5.7/8.03306 模拟MySQL 国产化替代
pgPostgreSQL 1454321 默认已有 PG 业务
oracleOracle 11g/19c1521 模拟Oracle 国产化替代

坑点enable_ci 仅支持 no(大小写敏感)——一旦 DB_MODE=mysql,表名是大小写敏感的,跟原生 MySQL 不一样。create_ci 也仅在 no 时支持。

3.3 验证启动

1
2
# 看日志
docker logs -f --tail=100 kingbase

输出:

1
2
3
4
5
6
Success. You can now start the database server using:
    /home/kingbase/install/kingbase/bin/sys_ctl -D /home/kingbase/userdata/data -l logfile start
[Mon 10 Nov 2025 05:48:21 AM UTC]start initdb...ok
waiting for server to start.... done
server started
* * * * * kingbase /home/kingbase/docker-entrypoint.sh check_and_run /home/kingbase/userdata/data >> /home/kingbase/cronlog

3.4 持久化的配置文件

容器跑起来后,配置随 data 目录一起持久化——下次启动会自动加载:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
/data/docker/kingbase/data/
├── data/                   # 数据库文件
│   ├── base/               # 表数据
│   ├── global/             # 全局元数据
│   ├── kingbase.conf       # 配置文件
│   ├── kingbase.auto.conf
│   ├── sys_hba.conf        # 客户端认证
│   ├── sys_log/
│   └── ...
└── etc/
    └── license.dat         # 许可证

重要:升级时只换镜像 + 挂载同一个 data 目录即可,数据不会丢

3.5 容器内进入数据库

1
2
3
# 用 KSQL(类似 psql)
docker exec -it kingbase ksql -U kingbase -d test
# 默认密码:环境变量 DB_PASSWORD
1
2
3
4
5
6
-- 查看版本
SELECT version();
-- KingbaseES V009R001C010B0004

-- 查所有库
\l

4. Navicat 连接人大金仓

关键:人大金仓对外提供的是 PostgreSQL 协议(即使 DB_MODE=mysql),所以用 Navicat 的 PostgreSQL 连接

字段
连接类型PostgreSQL
主机internal.example.com
端口4321(或你映射的)
数据库test(默认)
用户名kingbase
密码启动时设的 DB_PASSWORD
高级 → AuthenticationPassword(不要选 scram-sha-256)

4.1 验证连接

连上后能看到默认 schema publicsys_* 系统表。

4.2 创建业务 schema

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
-- 人大金仓有 schema 概念,跟 PG 一致
CREATE SCHEMA iot;

-- 切到 schema 创建表
SET search_path TO iot;
CREATE TABLE sensor_data (
    id BIGSERIAL PRIMARY KEY,
    time TIMESTAMP NOT NULL,
    sensor_id VARCHAR(50),
    value NUMERIC(10,2)
);

5. Schema 与多租户

人大金仓 = PG 内核 = 天然支持 schema 多租户

1
2
3
4
5
6
7
-- 给租户 A、B 各自建 schema
CREATE SCHEMA tenant_a;
CREATE SCHEMA tenant_b;

-- 业务代码根据登录用户动态切 schema
SET search_path TO tenant_a;
SELECT * FROM risk_task;  -- 查的是 tenant_a.risk_task

5.1 KStudio 图形化管理

人大金仓官方提供 KStudio(类似 Navicat):

  • 官网下载 KStudio 安装包
  • 用 KSQL 协议连接(同 PostgreSQL 12+ 兼容)
  • 自带存储过程调试、SQL 性能分析、AWR 报告

6. KDTS 异构数据库迁移工具

KDTS(Kingbase Data Transformation Service)是官方迁移工具——在完整安装包里才有

6.1 启动 KDTS

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
# 1. 完整安装包解压
tar -xf KingbaseES_V009R001C010B0004_x86_64_Install.tar
cd KingbaseES_V009R001C010B0004_x86_64_Install

# 2. 找到 KDTS(一般在 KDTS/ 子目录)
ls KDTS/
# bin/  conf/  lib/  logs/

# 3. 启动(默认端口 54523)
cd KDTS/bin
./startup.sh

Web 访问:http://localhost:54523/

6.2 登录

1
2
用户名:kingbase
密  码:<DEFAULT_PASSWORD>(默认密码)

首次登录后强制改密

6.3 完整迁移流程

6.3.1 添加源库

1
2
3
4
5
6
源库类型:MySQL 8.0
主机:internal.example.com
端口:3306
数据库:industry_iot_dev
用户名:root
密  码:{{REDACTED}}

6.3.2 添加目标库

1
2
3
4
5
6
目标类型:KingbaseES
主机:internal.example.com
端口:4321
数据库:test
用户名:kingbase
密  码:{{REDACTED}}

6.3.3 迁移策略配置

选项推荐值
表结构转换类型 + 建表
数据全量(千万级以下);分批(亿级以上)
索引全部迁移
存储过程需手改(PG/Oracle/MySQL 方言差异大)
触发器需手测
字符集UTF8

6.3.4 迁移执行

KDTS 会做:

  1. 类型转换(MySQL TINYINT → KES SMALLINT;MySQL DATETIME → KES TIMESTAMP
  2. 关键字加引号(MySQL ` → KES "
  3. AUTO_INCREMENT → BIGSERIAL
  4. 引擎转换(InnoDB → KES 内置引擎)

6.3.5 校验

迁移完成后必须做

1
2
3
4
5
6
7
8
9
-- 行数对比
SELECT COUNT(*) FROM source_db.risk_task;
SELECT COUNT(*) FROM target_db.risk_task;
-- 应该一致

-- 抽样对比
SELECT * FROM target_db.risk_task
WHERE id IN (1, 100, 1000, 10000)
ORDER BY id;

7. 生产建议

7.1 选型建议

场景推荐 DB_MODE
MySQL 业务系统国产化mysql
PG 业务系统国产化pg
Oracle 业务系统国产化oracle
全新项目pg(更接近 KES 原生能力)

7.2 性能调优

1
2
3
4
5
6
7
8
# kingbase.conf
shared_buffers = 8GB                # 物理内存 25%
effective_cache_size = 24GB         # 物理内存 70%
work_mem = 64MB
maintenance_work_mem = 1GB
max_connections = 500
random_page_cost = 1.1              # SSD 优化
effective_io_concurrency = 200      # SSD

7.3 高可用

KES 集群模式:

模式说明
主备一主一备,自动 failover
读写分离主写 + 多个只读副本
多主KES RWC(写集群,PG 内核没有)
共享存储RSH(类似 Oracle RAC)

7.4 监控

  • KMonitor(官方)— 实时性能监控
  • KWR / KSH — 性能报告快照(类似 Oracle AWR)
  • Prometheus 集成 — kingbase_exporter(社区)

7.5 国产化迁移清单

1
2
3
4
5
6
7
8
9
□ 业务系统选型(用 MySQL/PG/Oracle 兼容模式)
□ 评估存储过程、触发器、自定义函数数量
□ KDTS 跑通结构迁移 + 数据迁移
□ 准备 JDBC 驱动(kingbase8-8.x.x.jar)
□ Spring Boot 改 driver-class-name:com.kingbase8.Driver
□ Hibernate 方言:org.hibernate.dialect.KingbaseESDialect
□ 回归测试:分页、事务、布尔
□ 备份策略(KES 自带 sys_dump,类 pg_dump)
□ 监控告警:KMonitor + Prometheus

常见坑

坑 1:license 过期

启动报错 license expired修法:换新的 license_V*.dat 文件覆盖:

1
2
cp new_license.dat /data/docker/kingbase/data/etc/license.dat
docker restart kingbase

坑 2:DB_MODE=mysql 时表名大小写

KES 默认大小写敏感——SELECT * FROM UserSELECT * FROM user 走的是不同表。

修法

1
2
3
-- 改为大小写不敏感
ALTER DATABASE industry_iot_dev SET enable_ci = on;
-- 仅在 DB_MODE=oracle 时支持!

MySQL 兼容模式下需要 SQL 里自己加引号保证一致。

坑 3:Hibernate 方言不对

Spring Boot 项目报 Unknown database type: KINGBASE

修法

1
2
3
spring:
  jpa:
    database-platform: org.hibernate.dialect.KingbaseESDialect

Hibernate 6.4+ 才内置 KES 方言,之前的版本需自己写 Dialect 扩展类。

坑 4:KDTS 内存不够

KES 数据量 > 1 亿时,KDTS 默认 JVM 内存不够会 OOM。

1
2
vim KDTS/bin/startup.sh
# -Xms4g -Xmx8g

下一步

  • PostgreSQL 实战:见《PostgreSQL 实战:配置调优、扩展生态与 MySQL 迁移》
  • 多数据库适配架构:见《多数据库适配架构:MyBatis 方言 + JPA + Flyway》
  • MySQL 同步 Canal/Debezium:见编程/数据库/mysql 系列

2024+ 视角:KES V9R2 / KES V9R3 与国产化新格局

2024-2025 国产数据库格局

厂商产品2024+ 重点
人大金仓KES V9R2 / V9R3兼容 MySQL 8.0 完整、PG 16
达梦DM 8.4Oracle 兼容更深入
阿里 OceanBaseOB 4.x分布式 HTAP,云原生
TiDBTiDB 8.xMySQL 兼容 + HTAP + 国产化
openGauss6.x华为生态,PG 内核深度优化
神通Oscar金融、政务传统强项

人大金仓 KES V9R2 / V9R3 关键新特性

  • 透明加密 TDE 性能损耗从 30% 降至 8%
  • 行级 + 列级双存储引擎:HTAP 场景单库能跑
  • MySQL 8.0 兼容度提升:存储过程、触发器、窗口函数全部支持
  • KES RAC 集群(共享存储)GA——对标 Oracle RAC
  • KStudio Cloud 推出——云上管理 KES 实例

选型决策树(2024+ 视角)

1
2
3
4
5
6
新项目,需要国产化替代
├── 替代 MySQL → KES (DB_MODE=mysql) / TiDB / OceanBase
├── 替代 Oracle → KES (DB_MODE=oracle) / DM 8
├── 替代 PostgreSQL → KES (DB_MODE=pg) / openGauss
├── 海量数据 + HTAP → TiDB / OceanBase
└── 强一致金融场景 → OceanBase (Paxos 共识) / KES RAC

Hibernate 6.5+ 对 KES 的新支持

  • 官方 KES Dialect 完整:6.4 引入基础方言,6.5+ 补全了 SERIAL / BOOLEAN / JSONB 处理
  • 旧项目自定义 Dialect 扩展类可以删掉了
1
2
3
4
5
# Spring Boot 3.2+ + Hibernate 6.5+
spring:
  jpa:
    database-platform: org.hibernate.dialect.KingbaseESDialect
    # 不再需要 hibernate.dialect 自定义扩展

2024+ 实操变化

  • license 自动化:人大金仓现在支持"自动化 license 申请 + 激活",开发版 license 通过官网账号秒下
  • Docker 镜像瘦身:V9R2 后镜像从 2.5GB 降至 1.8GB,启动更快
  • KDTS-WEB GA:图形化迁移工具替代老的命令行版
  • KES Cloud:阿里云、华为云均提供 KES 托管实例,免自建

信创 vs 互联网业务的"双轨"选择

业务类型推荐
政府 / 央企 / 金融 / 军工KES / DM / openGauss(必须国产化)
互联网 ToCTiDB / OceanBase(性能优先)
出海 / 海外原生 PG / MySQL(生态优先)
中小私企KES(成本 + 国产化平衡)

2024+ 实战坑补充

  • KES V9R2 起的 MySQL 兼容度对视图、触发器、存储过程支持完整,但 SELECT ... FOR UPDATE SKIP LOCKED 行为与 MySQL 8 略有差异——并发扣减场景要压测
  • KES Cloud 在阿里云 RDS 上线后,与自建 KES 的 binlog 格式有差异——主从同步场景需要走 DTS 通道
  • 性能差距仍客观存在:同等硬件下,KES 大查询比 PG 16 慢 5-15%,需预留性能 buffer

经验补记(2024+)

  • KES 8.6+ 驱动兼容 JDK 17+——以前 KES JDBC 驱动强制 JDK 8,2024 起的驱动版本已支持
  • KStudio 4.0+ 增加 AI 助手:自然语言转 SQL、慢查询自动建议索引
  • KES Vector(向量检索)2024 内部测试中,2025 计划 GA——对标 pgvector
使用 Hugo 构建
主题 StackJimmy 设计