---
title: "使用 DBCAT 迁移 MySQL 表结构到 OceanBase 数据库 | OceanBase 文档中心"
description: "使用 DBCAT 迁移 MySQL 表结构到 OceanBase 数据库 DBCAT 是一款轻量级的命令行工具，可用于提供源数据库到 OceanBase 数据库的 DDL 转换和 Schema 比对等功能。工具文件名为 dbcat-[版本号]-SNAPSHOT.tar.gz ，下载后解压缩即可使用，可执行文件名为 d…"
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 4.0.0 社区版

# 使用 DBCAT 迁移 MySQL 表结构到 OceanBase 数据库

更新时间：2026-06-24 18:50:51

[编辑](https://github.com/oceanbase/oceanbase-doc/edit/V4.0.0/zh-CN/600.data-migration/200.migrate-data-from-MySQL-database-to-OceanBase-database/1000.use-DBCAT-to-migrate-MySQL-table-structure-to-OceanBase-database.md)  

DBCAT 是一款轻量级的命令行工具，可用于提供源数据库到 OceanBase 数据库的 DDL 转换和 `Schema` 比对等功能。工具文件名为 `dbcat-[版本号]-SNAPSHOT.tar.gz`，下载后解压缩即可使用，可执行文件名为 `dbcat`。OceanBase 社区版只兼容 MySQL，所以这里只演示 MySQL 表结构转换。

> **注意**
>
>  
>
> DBCAT 是 OMS 的一个组件，OceanBase 社区版目前没有独立的包。

## 环境准备

DBCAT 能运行在 CentOS、macOS 和 Windows 下。需要安装 `JDK 1.8` 以上（含）版本。可以使用 `OpenJDK`，安装好后配置环境变量 `JAVA_HOME`。

CentOS 安装 `OpenJDK` 示例：

```bash
$sudo yum -y install java-1.8.0-openjdk.x86_64

$which java
/usr/local/java/jdk1.8.0_261/bin/java

echo 'export JAVA_HOME=/usr/local/java/jdk1.8.0_261/' >> ~/.bash_profile
. ~/.bash_profile

```

解压安装文件：

```bash
tar zxvf dbcat-1.8.0-SNAPSHOT.tar.gz
cd dbcat-1.8.0-SNAPSHOT/
chmod +x bin/dbcat

$tree -L 3 --filelimit 30
.
├── bin
│   ├── dbcat
│   ├── dbcat.bat
│   └── dbcat-debug
├── conf
│   ├── dbcat.properties
│   └── logback.xml
├── docs
│   ├── README.docx
│   ├── README.md
│   └── README.txt
├── LEGAL.md
├── lib [45 entries exceeds filelimit, not opening dir]
├── LICENSE
├── meta
│   └── README
└── NOTICE

5 directories, 12 files

```

安装文件中有以下几个目录需要了解：

| 目录名 | 说明 |
| --- | --- |
| bin | 可执行文件目录。 |
| conf | 日志文件配置目录。 |
| lib | 运行时期依赖的包。 |
| meta | 离线转换场景下，导出字典表数据。 |
| ~/output | SQL 文件与报告文件，运行时生成。 |

## 在线转换

在线转换是指 DBCAT 能直连源端数据库，将数据库中的对象导出。当对象非常多时（如超过 1 万），导出过程可能会有点慢。

您可运行命令 `bin/dbcat help convert` 查看转换命令帮助。

```bash
bin/dbcat convert -H<host> -P<port> -u<user> -p<password>  -D <database> --from <from> --to <to> --all

bin/dbcat convert -H 127.1 -P 3306 -ur*** -p123456 -D tpccdb --from mysql56 --to obmysql2230 --all

```

特别说明：

- 目前源端 MySQL 版本只支持 MySQL 5.5/5.6/5.7。`--from` 只支持 `mysql56` 和 `mysql57`。
 - 目标端 OceanBase 版本的参数 `--to` 只支持 `obmysql2230` 和 `obmysql2250`。即使是 OceanBase 2.2.7 和 OceanBase 3.1 版本，也可以写成 `obmysql2250`。因为在 MySQL 兼容性方面，这些版本的 MySQL 语法是一样的。

运行后的输出文件在用户 `home` 目录的 `output` 下。

```bash
$tree ~/output/dbcat-2021-09-19-164533/
/home/qing.meiq/output/dbcat-2021-09-19-164533/
├── tpccdb
│   └── TABLE-schema.sql
└── tpccdb-conversion.html

1 directory, 2 files

```

示例：查看一个表结构在原生 MySQL 里的书写方式 和 OceanBase 数据库里的书写方式。

```sql
MariaDB [tpccdb]> show create table bmsql_customer \G
*************************** 1. row ***************************
       Table: bmsql_customer
Create Table: CREATE TABLE `bmsql_customer` (
  `c_w_id` bigint(20) NOT NULL,
  `c_d_id` bigint(20) NOT NULL,
  `c_id` bigint(20) NOT NULL,
  `c_discount` decimal(4,4) DEFAULT NULL,
  `c_credit` char(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_last` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_first` varchar(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_credit_lim` decimal(12,2) DEFAULT NULL,
  `c_balance` decimal(12,2) DEFAULT NULL,
  `c_ytd_payment` decimal(12,2) DEFAULT NULL,
  `c_payment_cnt` bigint(20) DEFAULT NULL,
  `c_delivery_cnt` bigint(20) DEFAULT NULL,
  `c_street_1` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_street_2` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_city` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_state` char(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_zip` char(9) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_phone` char(16) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_since` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `c_middle` char(2) COLLATE utf8_unicode_ci DEFAULT NULL,
  `c_data` varchar(500) COLLATE utf8_unicode_ci DEFAULT NULL,
  PRIMARY KEY (`c_w_id`,`c_d_id`,`c_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
1 row in set (0.01 sec)

vim ~/output/dbcat-2021-09-19-164533/tpccdb/TABLE-schema.sql

create table if not exists tpccdb.bmsql_customer (
        c_w_id bigint(20) not null,
        c_d_id bigint(20) not null,
        c_id bigint(20) not null,
        c_discount decimal(4,4),
        c_credit char(2),
        c_last varchar(16),
        c_first varchar(16),
        c_credit_lim decimal(12,2),
        c_balance decimal(12,2),
        c_ytd_payment decimal(12,2),
        c_payment_cnt bigint(20),
        c_delivery_cnt bigint(20),
        c_street_1 varchar(20),
        c_street_2 varchar(20),
        c_city varchar(20),
        c_state char(2),
        c_zip char(9),
        c_phone char(16),
        c_since timestamp not null default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
        c_middle char(2),
        c_data varchar(500),
        primary key (c_w_id, c_d_id, c_id)
)
default charset=utf8mb4
default collate=utf8mb4_unicode_ci;

```

 上一篇 下一篇 ![有帮助](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) 咨询热线
