从 MySQL 到 KingbaseES:Database、Schema、User 一次讲透 📅 2026/7/9 5:36:10 从 MySQL 到 KingbaseES核心概念迁移指南前言1. 概念对比MySQL vs KingbaseES2. Database独立的王国2.1 核心特性2.2 操作示例3. Schema数据库内的命名空间3.1 核心特性3.2 操作示例4. User/Role统一的权限主体4.1 核心特性4.2 操作示例5. 最佳实践与迁移建议5.1 命名规范5.2 权限设计四步法5.3 连接与搜索路径配置5.4 迁移检查清单6. 总结前言对于长期使用 MySQL 的开发者或 DBA 来说初次接触 KingbaseES金仓数据库时可能会对其中的Database、Schema、User等核心概念感到困惑。这些概念在 KingbaseES 中的层级关系、权限模型与 MySQL 存在显著差异理解这些差异是顺利迁移和运维的关键。本文将从 MySQL 使用者的视角出发系统性地对比和讲解 KingbaseES 中Database、Schema、User的概念、关系及最佳实践帮助你一次理清思路平滑过渡。1. 概念对比MySQL vs KingbaseES在深入细节之前我们先从宏观上对比两者在这些核心概念上的不同。概念MySQLKingbaseES核心差异实例 (Instance)一个mysqld进程服务一个数据目录通常包含多个数据库。一个kingbase进程服务一个集群 (Cluster)一个集群包含多个数据库 (Database)。KingbaseES 的“实例”通常指整个数据库集群。数据库 (Database)数据库是顶层对象用于逻辑隔离数据。用户直接连接到某个数据库。数据库是集群内的一个独立命名空间是最高级别的逻辑隔离单元。用户连接时必须指定一个数据库。关键差异在 KingbaseES 中Database之间完全隔离不能跨库查询。模式 (Schema)在 MySQL 中Schema是Database的同义词。CREATE DATABASE和CREATE SCHEMA是等价的。Schema是Database内部的命名空间用于组织表、视图、函数等对象。一个数据库可以有多个 Schema。关键差异KingbaseES 的Schema提供了第二层的逻辑分组类似于文件系统的目录。用户 (User)用户账号拥有全局或数据库级别的权限。用户身份与主机名绑定 (userhost)。用户是集群级别的登录角色 (ROLE)拥有LOGIN属性。权限可以授予到数据库、Schema 或具体对象。KingbaseES 的用户/角色系统更强大支持角色继承和更细粒度的权限控制。权限体系权限主要在全局、数据库、表级别进行授予。权限可以在集群、数据库、Schema、表等多个层级进行授予更加灵活。简单来说可以这样理解层级关系MySQL:实例 (Instance)-数据库/模式 (Database/Schema)-表 (Table)KingbaseES:集群 (Cluster)-数据库 (Database)-模式 (Schema)-表 (Table)KingbaseES 在Database和Table之间多了一层Schema这带来了更好的组织性和灵活性。2. Database独立的王国在 KingbaseES 中Database 是最高级别的逻辑隔离单位。这与你熟悉的 MySQL 数据库概念有本质区别。2.1 核心特性完全隔离不同的 Database 之间无法直接进行 SQL 查询如JOIN,UNION。它们拥有独立的系统目录、用户定义对象甚至连接也是独立的。独立连接客户端连接 KingbaseES 时必须指定一个 Database类似于 MySQL 的USE database但是在连接时就确定。常见的连接字符串格式为jdbc:kingbase8://host:port/database_name。专属属主每个 Database 都有一个属主Owner通常是创建它的用户。属主自动拥有该数据库的所有权限。2.2 操作示例-- 1. 创建数据库 (需要 CREATEDB 权限)CREATEDATABASEsales_db ENCODINGUTF8LC_COLLATEzh_CN.UTF-8LC_CTYPEzh_CN.UTF-8TEMPLATE template0 OWNER sales_admin;-- 2. 查看所有数据库\l-- 或SELECTdatnameFROMpg_database;-- 3. 修改数据库属主ALTERDATABASEsales_db OWNERTOnew_admin;-- 4. 删除数据库 (需要权限且不能有活跃连接)DROPDATABASEIFEXISTSsales_db;迁移提示在 MySQL 中你可能习惯将不同业务的数据放在同一个实例的不同 Database 中并且可以方便地跨库查询。迁移到 KingbaseES 时需要重新评估如果业务模块间确实需要频繁跨库关联查询应考虑将它们合并到同一个 KingbaseES Database中利用Schema进行逻辑分离。如果业务模块完全独立无需联合查询则可以保持为不同的 Database享受物理隔离带来的安全性和管理便利。3. Schema数据库内的命名空间Schema 是 KingbaseES 中一个非常强大的特性它解决了“一个数据库内如何优雅地组织大量对象”的问题。3.1 核心特性逻辑分组可以将表、视图、索引、函数、类型等数据库对象分组到不同的 Schema 下。例如可以为hr人力资源、finance财务、report报表分别创建 Schema。权限控制可以针对整个 Schema 授予权限如USAGE,CREATE简化权限管理。搜索路径 (search_path)这是一个关键概念。当你执行SELECT * FROM my_table;时KingbaseES 会按照search_path中定义的 Schema 顺序去查找my_table。默认的search_path通常是$user, public意味着它会先找与当前用户同名的 Schema再找publicSchema。3.2 操作示例-- 1. 创建 SchemaCREATESCHEMAhr;CREATESCHEMAfinanceAUTHORIZATIONfinance_user;-- 指定属主-- 2. 在指定 Schema 中创建表CREATETABLEhr.employees(idSERIALPRIMARYKEY,nameVARCHAR(100)NOTNULL,department_idINT);CREATETABLEfinance.invoices(invoice_id BIGSERIALPRIMARYKEY,amountDECIMAL(15,2),issue_dateDATE);-- 3. 查看当前搜索路径SHOWsearch_path;-- 默认可能是: $user, public-- 4. 修改当前会话的搜索路径 (方便查询)SETsearch_pathTOhr,public;-- 现在可以直接查询 employees而无需加 hr. 前缀SELECT*FROMemployees;-- 5. 为用户设置默认搜索路径ALTERUSERapp_userSETsearch_pathhr,public;-- 6. 删除 Schema (CASCADE 会删除其下所有对象)DROPSCHEMAIFEXISTSold_schemaCASCADE;迁移提示对于从 MySQL 迁移过来的应用最常见的做法是将所有表都放在publicSchema 中这可以快速兼容。但从长远看合理规划和使用 Schema 能让数据库结构更清晰、更易于管理。4. User/Role统一的权限主体KingbaseES 遵循 PostgreSQL 的模型使用Role角色来统一管理用户和组。一个拥有LOGIN属性的 Role 就是一个 User。4.1 核心特性角色继承角色可以继承其他角色的权限实现权限的复用和层级管理。灵活的权限权限可以授予给角色角色可以再被授予给其他角色或用户。权限粒度可以细到具体某张表、某个列。集群级别用户/角色是在集群级别创建的但他们的权限作用范围可以是具体的 Database、Schema 或对象。4.2 操作示例-- 1. 创建具有登录权限的用户等同于 MySQL 的 CREATE USERCREATEUSERapp_userWITHPASSWORDStrongPass123!;-- 或者使用 ROLE加上 LOGIN 属性CREATEROLE app_userWITHLOGIN PASSWORDStrongPass123!;-- 2. 创建角色组用于权限分组CREATEROLE read_only;CREATEROLE data_writer;-- 3. 授予角色权限-- 授予 read_only 角色对 hr Schema 下所有现有表的 SELECT 权限GRANTUSAGEONSCHEMAhrTOread_only;GRANTSELECTONALLTABLESINSCHEMAhrTOread_only;-- 让 data_writer 角色可以在 finance Schema 中创建表并插入数据GRANTCREATE,USAGEONSCHEMAfinanceTOdata_writer;GRANTINSERT,UPDATEONALLTABLESINSCHEMAfinanceTOdata_writer;-- 4. 将角色权限授予用户GRANTread_onlyTOapp_user;GRANTdata_writerTOapp_user;-- 5. 查看用户权限\du app_user-- 命令行查看-- 或通过系统视图查询SELECTr.rolname,array_agg(b.rolname)asmember_ofFROMpg_roles rLEFTJOINpg_auth_members mONr.oidm.memberLEFTJOINpg_roles bONm.roleidb.oidWHEREr.rolnameapp_userGROUPBYr.rolname;-- 6. 修改用户密码ALTERUSERapp_userWITHPASSWORDNewStrongPass456!;-- 7. 删除用户DROPUSERIFEXISTSapp_user;迁移提示MySQL 的权限管理通常更直接GRANT ALL ON db.* TO userhost。迁移到 KingbaseES 后需要花时间设计角色体系。一个好的实践是先创建功能角色如read_only,read_write再创建业务用户并将功能角色授予业务用户。5. 最佳实践与迁移建议5.1 命名规范Database: 使用小写、下划线代表一个完整的业务系统或完全独立的应用如order_center,crm_system。Schema: 使用小写代表一个业务模块或功能域如inventory,billing,analytics。User/Role: 使用小写用户以_user结尾如report_user角色以_role结尾或描述权限如dev_readwrite_role。5.2 权限设计四步法创建业务数据库CREATE DATABASE myapp OWNER admin_user;创建业务 Schema在数据库内CREATE SCHEMA module1 AUTHORIZATION admin_user;创建功能角色CREATE ROLE module1_read_only;然后授予该 Schema 的USAGE和表SELECT权限。创建应用用户CREATE USER app1 WITH PASSWORD xxx;然后GRANT module1_read_only TO app1;5.3 连接与搜索路径配置在应用连接配置如 JDBC URL或用户属性中设置好默认的search_path可以避免在 SQL 中写冗长的 Schema 前缀。# JDBC 连接示例 jdbc:kingbase8://localhost:54321/myapp_db?currentSchemahruserapp_userpasswordxxx5.4 迁移检查清单分析现有 MySQL 实例中 Database 间的关联关系决定在 KingbaseES 中是合并为一个 Database用 Schema 分隔还是保持为多个 Database。为新的 KingbaseES 数据库设计清晰的 Schema 结构。将 MySQL 的用户权限映射为 KingbaseES 的角色体系。修改应用程序的连接字符串指定正确的 Database 和可选的currentSchema。测试应用的查询、事务和权限控制是否正常工作。6. 总结从 MySQL 到 KingbaseES 的迁移在Database、Schema、User这三个核心概念上需要完成一次思维转换Database从“可互联的仓库”变成了“隔离的王国”规划时需慎重。Schema从“Database 的同义词”变成了“王国内的行政区划”是组织代码和权限的利器。User/Role从“用户账号”融入了更强大的“角色系统”让权限管理更加灵活和精细。理解并善用这些概念不仅能帮助你顺利完成迁移更能为你的 KingbaseES 数据库奠定一个清晰、安全、易于维护的架构基础。希望这篇讲解能帮助你一次理清这些关键概念在迁移之路上更加从容。