目录

1.简介

​2.核心功能与特点      

3.安装与基本使用

4.高级特性

5.常见问题解决

6.适用场景

7.与同类工具对比

8.总结


1.简介

        dbswitch 是一个专注于 跨数据库数据迁移与同步 的开源工具库,旨在简化不同数据库之间的结构迁移(Schema Migration)和数据同步(Data Synchronization)流程。支持数据的全量、增量、变化量方式同步。它支持多种主流关系型数据库(如 MySQL、PostgreSQL、Oracle、SQL Server 等)和部分非关系型数据库,提供灵活的配置和高性能的迁移能力,广泛用于数据中台建设、多数据源整合、数据库升级迁移等场景。

2.核心功能与特点      

1.多数据库支持

覆盖主流关系型数据库及部分特殊数据库,包括:

  • 关系型数据库:MySQL、PostgreSQL、Oracle、SQL Server、DB2、MariaDB、TiDB、达梦(DM)、人大金仓(Kingbase)等;
  • 数据仓库 / 分析型数据库:ClickHouse、Greenplum、Hive 等;
  • 其他:SQLite、MongoDB(部分支持)。

支持不同数据库之间的 双向迁移(如 MySQL → PostgreSQL、Oracle → TiDB 等)。

2.全量 + 增量迁移能力

  • 全量迁移:一次性迁移目标表的所有历史数据,适合初始化场景;
  • 增量迁移:基于时间戳(Timestamp)、自增 ID、数据库日志(如 MySQL 的 binlog)等方式捕获增量数据,支持实时或定时同步,满足业务连续性需求。

3.结构与数据双迁移

  • 结构迁移(Schema Conversion):自动转换不同数据库的表结构(如数据类型映射:MySQL 的VARCHAR→PostgreSQL 的VARCHAR,Oracle 的NUMBER→MySQL 的DECIMAL)、索引、约束(主键、外键)等,减少手动调整成本;
  • 数据迁移(Data Transfer):高效迁移表数据,支持大字段(BLOB、CLOB)、分区表、视图等特殊对象的迁移。

4.高性能与可扩展性

  • 并行迁移:支持多表并行迁移、单表分片并行读取,提升大规模数据迁移效率;
  • 流式处理:采用流式读取 / 写入模式,避免全量加载数据到内存,降低内存占用;
  • 可扩展架构:通过插件化设计支持新增数据库类型,用户可自定义数据类型映射规则或迁移逻辑。

5.易用性与灵活性

  • 提供 命令行工具Java APISpring Boot Starter 等多种使用方式,适配不同场景(如脚本自动化、集成到应用系统);
  • 支持配置文件(YAML/JSON)定义迁移任务,可指定迁移对象(表、字段过滤)、迁移策略(全量 / 增量)、错误重试机制等;
  • 内置数据校验功能,迁移后可自动比对源表与目标表的数据一致性(行数、校验和等)。

3.安装与基本使用

1.环境依赖

  • JDK 8+(核心为 Java 开发);
  • maven:>=3.6, Maven 仓库默认在国外, 国内使用难免很慢,可以更换为阿里云的仓库。 参考教程: 配置阿里云的仓库教程
  • 源数据库和目标数据库的驱动(需手动添加对应 JDBC 驱动包,如mysql-connector-javapostgresql等)。

2.安装方式

   (1) windows下:    

 双击build.cmd脚本文件即可编译打包

   (2) Linux下:

git clone https://gitee.com/dromara/dbswitch.git
cd dbswitch/
sh ./build.sh

   (3) Docker下:

git clone https://gitee.com/dromara/dbswitch.git
cd dbswitch/
sh ./docker-maven-build.sh
  • 直接下载发行包:从 GitHub Releases 页面下载最新版本的二进制包,解压后即可运行。

3.快速使用示例(命令行方式)

以 “MySQL → PostgreSQL 全量迁移” 为例:

(1) 配置迁移任务:创建application.yml配置文件,定义源库、目标库及迁移对象:

source:
  type: mysql
  jdbc-url: jdbc:mysql://127.0.0.1:3306/source_db?useSSL=false
  username: root
  password: 123456
  driver-class-name: com.mysql.cj.jdbc.Driver

target:
  type: postgresql
  jdbc-url: jdbc:postgresql://127.0.0.1:5432/target_db
  username: postgres
  password: 123456
  driver-class-name: org.postgresql.Driver

migration:
  mode: full  # 全量迁移
  tables:  # 需迁移的表(支持通配符,如"user_*")
    - source-table: "user_info"
      target-table: "user_info_copy"  # 可选,默认与源表名相同
      columns:  # 可选,指定迁移的字段,默认全字段
        - id
        - name
        - create_time

(2) 执行迁移任务

# 进入解压后的bin目录
cd dbswitch-cli-${version}/bin
# 执行迁移(Linux/Mac)
./dbswitch --config /path/to/application.yml
# Windows系统
dbswitch.bat --config C:\path\to\application.yml

(3) 查看迁移日志:日志默认输出到控制台,包含迁移进度(如 “迁移表 user_info:已迁移 1000/5000 行”)、错误信息等。

4.高级特性

1.增量同步配置

通过migration.mode: incremental开启增量迁移,需指定增量字段(如时间戳):

migration:
  mode: incremental
  incremental-column: create_time  # 增量字段(时间戳或自增ID)
  last-sync-time: 2023-01-01 00:00:00  # 首次同步的起始时间
  sync-interval: 60  # 增量同步间隔(秒)

2.数据转换规则自定义

对于内置规则不支持的特殊数据类型(如 Oracle 的INTERVAL→MySQL 的BIGINT),可通过自定义转换器实现:

// 实现自定义类型转换器
public class OracleIntervalToMysqlBigintConverter implements TypeConverter {
    @Override
    public Object convert(Object value) {
        // 自定义转换逻辑:将Oracle INTERVAL转换为毫秒数(BIGINT)
        if (value instanceof OracleIntervalDS) {
            return ((OracleIntervalDS) value).totalMilliseconds();
        }
        return value;
    }
}

在配置文件中指定转换器:

migration:
  type-converters:
    - source-type: oracle_interval_ds
      target-type: bigint
      converter-class: com.example.OracleIntervalToMysqlBigintConverter

3.集成支持新的关系型数据库产品

参考教程: 接入自定义关系型数据库的开发说明文档

4.集成dbswitch模块进行二次开发(API方式)

pom.xml中引入dbswitch模块依赖

<dependency>
    <groupId>com.longtai.dbswitch</groupId>
    <artifactId>dbswitch-core</artifactId>
    <version>${dbswitch.version}</version>
</dependency>
// 代码示例:全量迁移
public class MigrationExample {
    public static void main(String[] args) {
        // 配置源库和目标库
        DataSourceConfig sourceConfig = new DataSourceConfig();
        sourceConfig.setType("mysql");
        sourceConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/source_db");
        // ... 设置用户名、密码等

        DataSourceConfig targetConfig = new DataSourceConfig();
        targetConfig.setType("postgresql");
        // ... 设置目标库配置

        // 创建迁移任务
        MigrationTask task = new MigrationTask();
        task.setSourceConfig(sourceConfig);
        task.setTargetConfig(targetConfig);
        task.setMode(MigrationMode.FULL);
        task.setTables(Collections.singletonList(
            new TableMigrationConfig("user_info", "user_info_copy")
        ));

        // 执行迁移
        MigrationEngine engine = new MigrationEngine();
        engine.execute(task);
    }
}

5.常见问题解决

1.在Windows下,执行startup.cmd或datasync.cmd脚本报错

解决办法:将脚本的内容复制后,删除原脚本文件,然后再创建一个同名脚本文件后,将原内容粘贴进去后,再执行脚本。

2.在Linux下,执行startup.sh或datasync.sh脚本报错

解决办法:用vi/vim工具打开脚本,然后命令模式下设置 set ff=unix后,然后保存退出,再执行脚本。

6.适用场景

  • 数据库升级 / 迁移:如从 MySQL 5.7 迁移到 MySQL 8.0,或从 Oracle 迁移到 TiDB(国产化替代);
  • 多数据源同步:将业务库(MySQL)的数据同步到数据仓库(ClickHouse)用于分析;
  • 灾备与备份:定时将生产库数据同步到备用库,确保数据安全;
  • 数据中台建设:整合分散在不同数据库中的数据,统一存储到数据湖或数据仓库。

7.与同类工具对比

工具 特点 优势场景 dbswitch 优势
Sqoop 基于 Hadoop,适合 HDFS 与关系库的迁移 大数据量离线迁移 更轻量(无需 Hadoop),支持更多数据库
Debezium 基于 CDC(变更数据捕获),实时同步 高实时性的增量同步 支持全量 + 增量,配置更简单
DataX 阿里开源,支持多数据源,插件化架构 通用数据迁移 更专注于数据库结构 + 数据迁移,支持国产库

8.总结

        dbswitch 是一款轻量、高效的跨数据库迁移工具,通过简化结构转换和数据同步流程,降低了多数据库环境下的数据整合成本。其支持全量 + 增量迁移、多数据库兼容、自定义转换规则等特性,使其适用于从简单数据迁移到复杂数据中台建设的多种场景。对于需要在不同数据库间进行数据迁移或同步的开发 / 运维人员,dbswitch 是一个值得尝试的开源方案。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐