首批通过分布式安全可靠测评,为关键业务系统打造
MySQL 数据库至 OceanBase 社区版的数据迁移
更新时间:2026-04-14 15:40:46
支持范围总览
支持的范围总览
创建表
CREATE TABLE修改表
ALTER TABLE清空表
TRUNCATE TABLE表重命名
RENAME TABLE删除表
DROP TABLE创建索引
CREATE INDEX删除索引
DROP INDEX
不支持的范围总览
CREATE / DROP / ALTER DATABASE
CREATE / DROP / ALTER FUNCTION
CREATE / DROP / ALTER PROCEDURE
CREATE / DROP / ALTER EVENT
CREATE_/ DROP / ALTER VIEW
CREATE / DROP / ALTER ROLE
CREATE_/ DROP / ALTER TRIGGER
CREATE / DROP / ALTER USER
CREATE / DROP / ALTER SERVER
CREATE / DROP / ALTER TABLESPACE
创建表 CREATE TABLE
创建表时,支持
IF NOT EXISTS关键字和LIKE选项。示例如下:CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name { LIKE old_tbl_name | (LIKE old_tbl_name) }创建表时,不支持创建临时表(
TEMPORARY关键字会被忽略)。说明:
OceanBase 社区版 3.2.3 版本支持创建临时表。
创建表时,不支持创建基于查询的表:
create table as select,会输出空字符串。
创建表的语法总览如下:
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
(create_definition,...)
[table_options]
[partition_options]
| 分类 | 描述 |
|---|---|
| create_definition | create_definition 支持创建列、创建索引或约束,详情请参见表格后《创建列》和《创建索引或约束》的内容。 |
| table_options |
|
| partition_options |
|
注意:
OceanBase 社区版支持的字符集有限,详情请参见 字符集。
请勿使用 latin1 等不支持的字符集。如果强行指定 OceanBase 社区版不支持的字符集,DDL 同步时不会将该字符集进行转换,导致执行至目标数据库时报错。
create_definition 支持创建列、创建索引或约束:
创建列
创建列时,支持的范围如下:
支持指定 NULL / NOT NULL 属性
支持指定 DEFAULT 值,支持 DEFAULT 值为常量/函数
支持指定 VISIBLE / INVISIBLE 属性
支持指定 AUTO_INCREMENT
支持指定 COMMENT
支持指定 COLLATE
支持指定生成列,支持生成列指定 VIRTUAL | STORED 属性
支持指定 UNIQUE KEY / PRIMARY KEY / KEY,详情请参见下文的《创建索引或约束》
支持指定 check 约束(仅 OceanBase 社区版 3.2.3 版本支持),详情请参见下文的《创建索引或约束》
支持指定外键,详情请参见下文的《创建索引或约束》
数据类型的支持详情如下:
分类 MySQL 数据库 OceanBase 社区版 数据类型 整型 INT INT TINYINT TINYINT SMALLINT SMALLINT MEDIUMINT MEDIUMINT BIGINT BIGINT BOOL / BOOLEAN BOOLEAN 定点类型 DECIMAL DECIMAL NUMERIC NUMERIC 浮点类型 REAL FLOAT DOUBLE DOUBLE FLOAT FLOAT BIT 类型 BIT BIT 字符类型 CHAR CHAR NCHAR CHAR VARCHAR VARCHAR BINARY BINARY VARBINARY VARBINARY LONG VARBINARY BLOB 时间类型 YEAR YEAR DATE DATE TIME TIME TIMESTAMP TIMESTAMP DATETIME DATETIME 大对象和文本类型 TINYBLOB TINYBLOB MEDIUMBLOB MEDIUMBLOB BLOB BLOB LONGBLOB LONGBLOB TINYTEXT TINYTEXT MEDIUMTEXT MEDIUMTEXT TEXT TEXT LONGTEXT LONGTEXT 枚举和集合类型 ENUM ENUM SET SET JSON 类型 JSON 依赖于 OceanBase 社区版的版本:3.2.3 以下版本会转换为 TEXT,3.2.3 及以上版本会转换为 JSON。 不支持转换的数据类型包括 SERIAL 和 GEOMETRY(例如,GEOMETRY、GEOMETRYCOLLECTION、POINT、MULTIPOINT、LINESTRING、MULTILINESTRING、POLYGON、MULTIPOLYGON)。
注意:
如果出现不支持转换的数据类型,会导致输出空的 DDL 语句。
如果增量 DDL 中包含以下属性的定义,则这些属性将不会被解析和转换,最终会被忽略。
指定 COLUMN_FORMAT 属性
指定 ENGINE_ATTRIBUTE 属性
指定 SECONDARY_ENGINE_ATTRIBUTE 属性
指定 STORAGE 属性
由于 OceanBase 社区版本身的限制,如果存在以下场景,增量 DDL 被成功转换后,执行到 OceanBase 社区版可能会报错。
OceanBase 社区版不支持在 DEFAULT 中指定某些函数/表达式。
OceanBase 社区版不支持在生成列中指定某些函数/表达式。
OceanBase 社区版不支持某些字段类型被指定 UNIQUE KEY / PRIMARY KEY / KEY。
OceanBase 社区版不支持某些 COLLATE,详情请参见 字符序。
创建索引或约束
创建索引或约束时,支持的范围如下:
支持创建 PRIMARY KEY
支持创建 UNIQUE KEY
支持创建 INDEX / KEY
支持创建 FOREIGN KEY,支持 FOREIGN KEY 创建在字段/函数/表达式上
支持指定 ON [DELETE | UPDATE] RESTRICT | CASCADE | NO ACTION | SET DEFAULT 属性
支持创建 FULLTEXT INDEX
OceanBase 社区版 3.2.3 及以上版本,支持创建 CHECK 约束
支持前缀索引
支持指定 ASC / DESC
创建索引或约束时,不支持的范围如下:
PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 不支持函数索引,仅支持索引建在字段上
注意:
如果增量 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。
不支持 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 定义中包含函数或表达式,示例如下:
CREATE TABLE functional_index_t1 (col1 INT, PRIMARY KEY (col1, (ABS(col1)))); CREATE TABLE functional_index_t1(x VARCHAR(30), INDEX idx ((CAST(x->>'$.name' AS CHAR(30)))));不支持创建 SPATIAL INDEX
不支持 FOREIGN KEY 指定 ON [DELETE | UPDATE] SET NULL 属性
如果增量 DDL 中包含以下属性的定义,则这些属性将不会被解析和转换,最终会被忽略。
指定 USING BTREE 或 USING HASH
index option 中指定 KEY_BLOCK_SIZE、index_type、WITH PARSER、COMMENT、VISIBLE | INVISIBLE、ENGINE_ATTRIBUTE、SECONDARY_ENGINE_ATTRIBUTE 属性
CHECK 约束中指定 [NOT] ENFORCED 属性
FOREIGN KEY 指定 MATCH FULL | MATCH PARTIAL | MATCH SIMPLE 属性
由于 OceanBase 社区版本身的限制,如果存在以下场景,增量 DDL 被成功转换后,执行到 OceanBase 社区版可能会报错。
OceanBase 社区版不支持 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX、FOREIGN KEY 创建在某些类型的字段上。
OceanBase 社区版不支持 CHECK 约束中的某些函数/表达式。
OceanBase 社区版不支持 FOREIGN KEY 约束中的某些函数/表达式。
OceanBase 社区版不支持某些 COLLATE,详情请参见 字符序。
创建分区
创建分区时,支持的范围如下:
支持创建一级分区:RANGE 分区、LIST 分区、HASH 分区 和 KEY 分区。
支持创建二级分区:HASH 分区 和 KEY 分区。
RANGE 分区、LIST 分区、HASH 分区支持函数分区键(分区键为表达式或函数)和列分区键(分区键是字段),KEY 分区仅支持列分区键。
支持指定 PARTITIONS number 和 SUBPARTITIONS number。
创建分区时,不支持创建 LINEAR HASH 和 LINEAR KEY 分区。
注意:
如果创建分区的 DDL 包含不支持的定义,则分区定义输出空,但是表结构会保留(分区定义被抛弃)。
如果增量 DDL 中包含以下属性的定义,则这些属性将不会被解析和转换,最终会被忽略。
分区定义中指定 ENGINE
分区定义中指定 COMMENT
分区定义中指定 DATA DIRECTORY
分区定义中指定 INDEX DIRECTORY
分区定义中指定 MAX_ROWS
分区定义中指定 MIN_ROWS
分区定义中指定 TABLESPACE
指定 KEY 分区中的 ALGORITHM 算法
PARTITION BY KEY ALGORITHM={1 | 2} (column_list) -> PARTITION BY KEY (column_list)
由于 OceanBase 社区版本身的限制,如果存在以下场景,增量 DDL 被成功转换后,执行到 OceanBase 社区版可能会报错。
OceanBase 社区版不支持某些字段类型作为分区键。
OceanBase 社区版不支持某些函数或表达式作为分区键。
修改表 ALTER TABLE
修改表时,包括操作列、操作约束和索引、操作分区,以及修改表的属性等操作。
操作列
操作列包括添加字段、删除字段和修改字段等。
支持 ADD COLUMN 来添加列(多列),支持指定 FIRST | AFTER 关键字。
支持修改字段的默认值
ALTER COLUMN SET DEFAULT。支持删除字段的默认值
ALTER COLUMN DROP DEFAULT。支持修改列
CHANGE COLUMN和MODIFY COLUMN。支持删除列
DROP COLUMN。
如果增量 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。
不支持修改列的可见性
ALTER COLUMN SET VISIBLE | INVISIBLE。不支持
ORDER BY col_name。不支持重命名列
RENAME COLUMN。ALTER TABLE t RENAME COLUMN d TO g;
如果增量 DDL 中包含
MODIFY COLUMN或CHANGE COLUMN,会忽略 FIRST | AFTER 关键字。由于 OceanBase 社区版本身的限制,如果存在以下场景,增量 DDL 被成功转换后,执行到 OceanBase 社区版可能会报错。
通过
MODIFY COLUMN或CHANGE COLUMN修改字段类型可能会失败:OceanBase 社区版不支持修改为某些字段类型。通过
MODIFY COLUMN或CHANGE COLUMN修改字段长度可能会失败。通过
ALTER COLUMN SET DEFAULT设置默认值可能会失败:OceanBase 社区版不支持某些函数/表达式。不支持删除主键、唯一键、普通索引、相关的列,以及包含外键约束的列。
操作约束和索引
操作约束和索引包括添加约束和索引、删除约束和索引等。
支持创建普通索引 ADD INDEX / KEY
支持删除索引 DROP INDEX
支持创建全文索引 ADD FULLTEXT INDEX / KEY
支持创建唯一索引 ADD UNIQUE INDEX / KEY
支持创建外键 ADD FOREIGN KEY
操作约束和索引时,不支持的范围如下:
注意:
如果增量 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。
UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX 不支持函数索引,仅支持索引建在字段上
不支持
ADD SPATIAL INDEX不支持
ADD PRIMARY KEY不支持
DROP PRIMARY KEY不支持
ALTER TABLE DISABLE | ENABLE KEYS不支持
FOREIGN KEY指定ON [DELETE | UPDATE] SET NULL属性OceanBase 社区版 3.2.3 以下版本,不支持如下操作:
不支持
ADD CHECK不支持
DROP CHECK不支持
ALTER CHECK [NOT] ENFORCED不支持
ALTER INDEX VISIBLE | INVISIBLE不支持
RENAME INDEX / KEYalter table t rename key k to kk; ALTER TABLE T RENAME INDEX b TO w;
不支持
ALTER TABLE DISABLE | ENABLE KEYS不支持
FOREIGN KEY指定ON [DELETE | UPDATE] SET NULL属性
如果增量 DDL 中包含以下特性的定义,则这些特性不会被解析和转换,最终会被忽略掉。
指定
USING BTREE或USING HASH。index option中指定KEY_BLOCK_SIZE、index_type、WITH PARSER、COMMENT、VISIBLE | INVISIBLE、ENGINE_ATTRIBUTE和SECONDARY_ENGINE_ATTRIBUTE属性。CHECK 约束中指定
[NOT] ENFORCED属性。FOREIGN KEY指定MATCH FULL | MATCH PARTIAL | MATCH SIMPLE属性。
由于 OceanBase 社区版本身的限制,如果存在以下场景,增量 DDL 被成功转换后,执行到 OceanBase 社区版可能会报错。
OceanBase 社区版不支持 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX、FOREIGN KEY 创建在某些类型的字段上。
OceanBase 社区版不支持 CHECK 约束中的某些函数/表达式。
OceanBase 社区版不支持 FOREIGN KEY 约束中的某些函数/表达式。
操作分区
操作分区时,支持的范围如下:
支持
ADD PARTITION添加 RANGE 分区支持
ADD PARTITION添加 LIST 分区支持删除分区
DROP PARTITION
操作分区时,不支持的范围如下:
注意:
如果增量 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。
不支持
ADD PARTITION不支持
TRUNCATE PARTITION不支持
DISCARD PARTITION不支持
IMPORT PARTITION不支持
COALESCE PARTITION不支持
REORGANIZE PARTITION不支持
EXCHANGE PARTITION不支持
ANALYZE PARTITION不支持
CHECK PARTITION不支持
OPTIMIZE PARTITION不支持
REBUILD PARTITION不支持
REPAIR PARTITION不支持
REMOVE PARTITIONING
修改表的属性
修改表的属性时,支持的范围如下:
支持表重命名
alter table tablename rename to new_tablename支持修改表的 comment
ALTER TABLE t comment = 'table comment'
修改表的属性时,不支持的范围如下:
不支持修改 ALGORITHM 属性
ALTER TABLE t ALGORITHM = COPY不支持 CONVERT TO CHARACTER SET
ALTER TABLE t CONVERT TO CHARACTER SET utf16;不支持修改 CHARACTER SET 和 COLLATE
ALTER TABLE T DEFAULT CHARACTER SET utf8不支持 DISCARD | IMPORT TABLESPACE
不支持 ALTER TABLE FORCE
不支持修改 LOCK 属性:LOCK = DEFAULT | NONE | SHARED | EXCLUSIVE
不支持 ALTER TABLE WITHOUT | WITH VALIDATION
不支持修改 table_option 中除 comment 以外的属性
清空表 TRUNCATE TABLE
TRUNCATE [TABLE] tbl_name
表重命名 RENAME TABLE
迁移 MySQL 数据库的数据至 OceanBase 社区版时,RENAME TABLE 支持重命名单表或多表。
删除表 DROP TABLE
迁移 MySQL 数据库的数据至 OceanBase 社区版时,DROP TABLE 支持删除单表或多表。
如果增量 DDL 中包含以下特性的定义,则这些特性不会被解析和转换,最终会被忽略掉。
OceanBase 社区版 3.2.3 以下版本不支持 TEMPORARY 关键字
不支持 IF EXISTS 关键字
不支持 RESTRICT / CASCADE 关键字
创建索引 CREATE INDEX
创建索引时,支持的范围如下:
支持创建普通索引
支持创建 UNIQUE 索引
支持创建前缀索引
create index i on t(c1(2))index_option中仅支持指定 comment
创建索引时,不支持的范围如下:
注意:
如果增量 DDL 包含以下不支持的定义,则整个建表语句会转换失败(输出空)。
不支持创建 SPATIAL INDEX
不支持创建函数索引
如果增量 DDL 中包含以下特性的定义,则这些特性不会被解析和转换,最终会被忽略掉。
不支持指定 ASC / DESC 关键字
不支持指定
KEY_BLOCK_SIZE不支持指定
WITH PARSER不支持指定
VISIBLE | INVISIBLE不支持指定
ENGINE_ATTRIBUTE不支持指定
SECONDARY_ENGINE_ATTRIBUTE不支持指定
ALGORITHM = DEFAULT | INPLACE | COPY不支持指定
LOCK = DEFAULT | NONE | SHARED | EXCLUSIVE
由于 OceanBase 社区版本身的限制,不支持将索引创建在某些特定字段类型上。否则增量 DDL 被成功转换后,执行到 OceanBase 社区版可能会报错。
删除索引 DROP INDEX
迁移 MySQL 数据库的数据至 OceanBase 社区版时,支持删除索引。
如果增量 DDL 中包含以下特性的定义,则这些特性不会被解析和转换,最终会被忽略掉。
不支持指定 ALGORITHM = DEFAULT | INPLACE | COPY
不支持指定 LOCK = DEFAULT | NONE | SHARED | EXCLUSIVE
增量 DDL 的使用限制
如果需要同步的表涉及支持范围外的 DDL,数据迁移项目可能会中断并造成数据问题,且无法恢复。
不能频繁对一张表进行 DDL 操作。当 Store 处理完当前 DDL 后(根据位点判断),再进行下一个 DDL。否则 Store 可能异常退出或造成数据问题,且无法恢复。
新建 Store 前的一段时间和启动过程中,需要确保无 DDL。如果是回拉,回拉点至当前时间保证无 DDL。否则 Store 可能异常退出或造成数据问题,且无法恢复。
RENAME TABLE前后的表名,必须全在需要同步的表中。增量 DDL 中,对于主键为 FLOAT 或 DOUBLE 类型的表,数据的最终结果可能会不一致。
如果使用 gh-ost 将 MySQL 数据库的增量 DDL 同步至 OceanBase 社区版,则:
选择 指定对象 的方式进行迁移时,请勿勾选表名为
*_ghc的表。选择 匹配规则 的方式进行迁移时,请务必配置 排除对象规则 为
{database_name}.*_ghc。