DBCAT 是一款轻量级的命令行工具。主要用途是提供源数据库到 OceanBase MYSQL/ORACLE 的 DDL 转换、Schema
比对等功能。文件名是:dbcat-[版本号]-SNAPSHOT.tar.gz
,下载后解压缩即可使用,可执行文件名是:dbcat
。OceanBase 社区版只支持 MySQL 兼容性,所以这里只演示 MySQL 表结构转换。
环境准备
DBCAT 能运行在 CentOS
、MacXOS
、Windows
下。需要安装 JDK 1.8
以上(含)版本。可以使用 OpenJDK
,安装好后配置环境变量 JAVA_HOME
。
下面是 CentOS 里安装 OpenJDK
示例:
$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
解压缩安装文件
tar zxvf dbcat-1.3.0-SNAPSHOT.tar.gz cd dbcat-1.3.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
在线转换
在线转换是指 DBCAT 能直连源端数据库,将数据库中对象导出。当对象非常多的时候(如超过 1万),这个可能有点慢。
转换命令帮助:bin/dbcat help convert
,参数很多,具体请查看使用文档。
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 -u root -p 123456 -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
下。
$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 里写法。
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;
附录:
- 4.1 OceanBase 的 MySQL 兼容性简介
- 4.2 如何使用 mysqldump 迁移 MySQL 表 OceanBase
- 4.3 如何使用 dbcat 迁移 MySQL 表结构到 OceanBase
- 4.4 如何把 MySQL 表数据导出到 CSV 文件
- 4.5 如何使用 OceanBase 的 LOAD 命令加载 csv 数据文件 OceanBase
- 4.6 如何使用 DataX 加载 CSV 数据文件到 OceanBase
- 4.7 如何使用 DATAX 迁移 MySQL数据到 OceanBase
- 4.8 如何使用 OBDUMPER / OBLOADER 工具导出/导入 OceanBase 数据
- 4.9 如何使用 DATAX 迁移 OceanBase 数据到 MySQL/ORACLE
- 4.10 如何使用 CANAL 将 MySQL 数据实时同步到 OceanBase
结束语
加入教程直播群方式一:钉钉群号3255 4020
加入教程直播群方式二:扫码下方二维码加入