为什么写这篇:人大金仓 KingbaseES 是国内市场份额第一的国产数据库,底层基于 PostgreSQL 但做了大量本地化改造(兼容 Oracle/MySQL 语法)。本文整理 Docker 部署 + 兼容模式选择 + KDTS 异构迁移的全流程实战——这是信创项目的标准动作。
适用读者:信创/国产化替代项目的 DBA / 后端。
前置知识:会用 PostgreSQL(人大金仓的兼容层基本是 PG)、懂 Linux 基础。
目录
- 人大金仓与 KingbaseES 简介
- 下载与安装许可文件
- Docker 部署:DB_MODE 三种兼容模式
- Navicat 连接人大金仓
- Schema 与多租户
- KDTS 异构数据库迁移工具
- 生产建议
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.tar | Docker 镜像 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 | 兼容语法 | 端口默认 | 适用 |
|---|
mysql | MySQL 5.7/8.0 | 3306 模拟 | MySQL 国产化替代 |
pg | PostgreSQL 14 | 54321 默认 | 已有 PG 业务 |
oracle | Oracle 11g/19c | 1521 模拟 | 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 |
| 高级 → Authentication | Password(不要选 scram-sha-256) |
4.1 验证连接
连上后能看到默认 schema public 和 sys_* 系统表。
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 会做:
- 类型转换(MySQL
TINYINT → KES SMALLINT;MySQL DATETIME → KES TIMESTAMP) - 关键字加引号(MySQL
` → KES ") - AUTO_INCREMENT → BIGSERIAL
- 引擎转换(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 User 跟 SELECT * 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.4 | Oracle 兼容更深入 |
| 阿里 OceanBase | OB 4.x | 分布式 HTAP,云原生 |
| TiDB | TiDB 8.x | MySQL 兼容 + HTAP + 国产化 |
| openGauss | 6.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(必须国产化) |
| 互联网 ToC | TiDB / 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