---
title: "MySQL 数据库至 OceanBase 社区版的数据迁移 | OceanBase 文档中心"
description: MySQL 数据库至 OceanBase 社区版的数据迁移 支持范围总览 支持的范围总览 创建表 CREATE TABLE 修改表 ALTER TABLE 清空表 TRUNCATE TABLE 表重命名 RENAME TABLE 删除表 DROP TABLE 创建索引 CREATE INDEX 删除索引 DROP I…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*L03BS6f-o40AAAAAAAAAAAAADiGDAQ/original) 迁移服务 OMSV 4.0.0 社区版

# MySQL 数据库至 OceanBase 社区版的数据迁移

更新时间：2026-04-14 15:40:46

[编辑](https://github.com/oceanbase/oms-doc/edit/V4.0.0/zh-CN/600.data-migration/1700.supported-ddl-operations-for-incremental-migration-and-limits/100.mysql-to-obmysql.md)  

## 支持范围总览

- 支持的范围总览

     - 创建表 `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` 选项。示例如下：

  ```sql
  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`，会输出空字符串。

创建表的语法总览如下：

```sql
CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
    (create_definition,...)
    [table_options]
    [partition_options]

```

| 分类 | 描述 |
| --- | --- |
| create_definition | `create_definition` 支持创建列、创建索引或约束，详情请参见表格后《创建列》和《创建索引或约束》的内容。 |
| table_options | - 支持指定表级别 COMMENT - 支持指定 `CHARACTER SET` - 其它 table option 均不支持解析，会被忽略。 |
| partition_options | - 支持一级分区：List、Range、Hash 和 Key      List 分区支持指定函数分区键 \| 列分区键      Range 分区支持指定函数分区键 \| 列分区键      Hash 分区支持指定函数分区键 \| 列分区键，支持 LINEAR Hash 定义       Key 分区支持指定列分区键、LINEAR Key 定义 - 支持指定二级分区：Hash 和 Key - 支持指定 PARTITIONS number 和 SUBPARTITIONS number |

> **注意：**
>
>  
>
> OceanBase 社区版支持的字符集有限，详情请参见 [字符集](https://www.oceanbase.com/docs/community/10000000000902050)。
>
>  
>
> 请勿使用 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，详情请参见 [字符序](https://www.oceanbase.com/docs/community-observer-cn-10000000000902051)。
 - 创建索引或约束

  创建索引或约束时，支持的范围如下：

     - 支持创建 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 定义中包含函数或表达式，示例如下：

      ```sql
      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 属性

     - 指定 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 社区版不支持 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX、FOREIGN KEY 创建在某些类型的字段上。
     - OceanBase 社区版不支持 CHECK 约束中的某些函数/表达式。
     - OceanBase 社区版不支持 FOREIGN KEY 约束中的某些函数/表达式。
     - OceanBase 社区版不支持某些 COLLATE，详情请参见 [字符序](https://www.oceanbase.com/docs/community-observer-cn-10000000000902051)。
 - 创建分区

  创建分区时，支持的范围如下：

     - 支持创建一级分区：RANGE 分区、LIST 分区、HASH 分区 和 KEY 分区。
     - 支持创建二级分区：HASH 分区 和 KEY 分区。
     - RANGE 分区、LIST 分区、HASH 分区支持函数分区键（分区键为表达式或函数）和列分区键（分区键是字段），KEY 分区仅支持列分区键。
     - 支持指定 PARTITIONS number 和 SUBPARTITIONS number。

  创建分区时，不支持创建 LINEAR HASH 和 LINEAR KEY 分区。

  > 注意：
  >
  >  
  >
  > 如果创建分区的 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 社区版不支持某些字段类型作为分区键。
     - 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`。

      ```sql
      ALTER TABLE t RENAME COLUMN d TO g;

      ```

  如果增量 DDL 中包含 `MODIFY COLUMN` 或 `CHANGE COLUMN`，会忽略 FIRST | AFTER 关键字。

     - 通过 `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 / KEY`

            ```sql
            alter 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 社区版不支持 PRIMARY KEY、UNIQUE KEY、INDEX / KEY、FULLTEXT INDEX、FOREIGN KEY 创建在某些类型的字段上。
     - OceanBase 社区版不支持 CHECK 约束中的某些函数/表达式。
     - OceanBase 社区版不支持 FOREIGN KEY 约束中的某些函数/表达式。
 - 操作分区

  操作分区时，支持的范围如下：

     - 支持 `ADD PARTITION` 添加 RANGE 分区
     - 支持 `ADD PARTITION` 添加 LIST 分区
     - 支持删除分区 `DROP PARTITION`

  操作分区时，不支持的范围如下：

     - 不支持 `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`
 - 修改表的属性

  修改表的属性时，支持的范围如下：

     - 支持表重命名

      ```sql
      alter table tablename rename to new_tablename

      ```
     - 支持修改表的 comment

      ```sql
      ALTER TABLE t comment = 'table comment'

      ```

  修改表的属性时，不支持的范围如下：

     - 不支持修改 ALGORITHM 属性

      ```sql
      ALTER TABLE t ALGORITHM = COPY

      ```
     - 不支持 CONVERT TO CHARACTER SET

      ```sql
      ALTER TABLE t CONVERT TO CHARACTER SET utf16;

      ```
     - 不支持修改 CHARACTER SET 和 COLLATE

      ```sql
      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`

```sql
  TRUNCATE [TABLE] tbl_name

```

## 表重命名 `RENAME TABLE`

迁移 MySQL 数据库的数据至 OceanBase 社区版时，`RENAME TABLE` 支持重命名单表或多表。

## 删除表 `DROP TABLE`

迁移 MySQL 数据库的数据至 OceanBase 社区版时，`DROP TABLE` 支持删除单表或多表。

- OceanBase 社区版 3.2.3 以下版本不支持 TEMPORARY 关键字
 - 不支持 IF EXISTS 关键字
 - 不支持 RESTRICT / CASCADE 关键字

## 创建索引 `CREATE INDEX`

创建索引时，支持的范围如下：

- 支持创建普通索引
 - 支持创建 UNIQUE 索引
 - 支持创建前缀索引

  ```sql
  create index i on t(c1(2))

  ```
 - `index_option` 中仅支持指定 comment

创建索引时，不支持的范围如下：

- 不支持创建 SPATIAL INDEX
 - 不支持创建函数索引

- 不支持指定 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 社区版时，支持删除索引。

- 不支持指定 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`。

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
