https://www.cnblogs.com/xibuhaohao/articles/19068912 - seatunnel-安装部署测试
https://www.cnblogs.com/xibuhaohao/articles/19068914 - seatunnel-MySQL to MySQL JDBC 测试
版本:apache-seatunnel-2.3.8
1. SeaTunnel MySQL-CDC 单表迁移 Job 配置(全量 + 增量同步)
基于你的需求,将原 JDBC 批处理单表同步 改造为 MySQL-CDC 整库迁移(全量快照 + 增量 binlog 同步),核心实现:
- 源端用 
MySQL-CDC Source 捕获 db50000000.ods_goods_goods_store_info_da 库表的全量数据 + 增量变更(支持整库多表自动匹配); 
- 目标端用 
Jdbc Sink 动态写入 db_all 库的对应表 ods_goods_goods_store_info_da ; 
- 保留 Exactly-Once 语义,确保整库数据一致性。
 
[root@zb-yunweitest-mysql-204-201 apache-seatunnel-2.3.8]# cat job/mysql-to-mysql-cdc.conf 
env {
  # You can set engine configuration here
  parallelism = 2
  job.mode = "STREAMING"
  checkpoint.interval = 5000
  read_limit.bytes_per_second=7000000
  read_limit.rows_per_second=400
}
source {
  MySQL-CDC {
    server-id = 5652-5653
    username = "root"
    password = "HkZiWdDba159+-*%"
    table-names = ["db50000000.ods_goods_goods_store_info_da"]
    base-url = "jdbc:mysql://172.21.204.200:3306/db50000000"
    # 4. 明确启动模式:优先用initial(全量+增量),确认全量是否有数据
    scan.startup.mode = "initial"
    debezium = {
      include.schema.changes = true
    }
  }
}
sink {
  jdbc {
    url = "jdbc:mysql://172.21.204.201:3306/db_all"
    driver = "com.mysql.cj.jdbc.Driver"
    user = "root"
    password = "HkZiWdDba159+-*%"
    generate_sink_sql = true
    database = db_all
    table = ods_goods_goods_store_info_da
    primary_keys = ["id"]
    is_exactly_once = true                                                  # 开启事务,确保全量+增量数据不重复、不丢失
    xa_data_source_class_name = "com.mysql.cj.jdbc.MysqlXADataSource"       # MySQL 专属 XA 数据源(必配)
  }
}
 
 
 
 
 
- 原配置是 批处理(仅同步一次全量数据),整库迁移需 持续捕获增量变更(如源表新增 / 更新数据),因此必须改为 
STREAMING 模式; 
- 新增 
checkpoint.interval:流处理通过 checkpoint 保存 CDC 增量位点(binlog 文件名 + 位置),即使任务重启,也能从上次断点继续同步,避免重复消费。 
你的 connectors 目录中已包含 connector-cdc-mysql-2.3.8.jar(关键),无需额外下载;若缺失,需从 SeaTunnel 官网下载对应版本的 CDC 连接器。
MySQL 源库(172.21.204.200)必须开启 binlog,且配置符合要求,否则 CDC 无法捕获变更:
- 登录源库执行以下命令,检查 binlog 状态:
show variables like 'log_bin';         
 
 
 
 
 
- 若未开启,需修改 MySQL 配置文件(如 
my.cnf),重启数据库:
log_bin = mysql-bin          # 开启 binlog
binlog_format = ROW          # 必须为 ROW 格式
server_id = 100              # 源库 server-id(不可与 CDC 的 server-id 重复)
binlog_row_image = FULL      # 捕获全量行数据(避免字段缺失)
expire_logs_days = 7         # binlog 保留 7 天(确保全量快照期间 binlog 不被删除)
 
 
 
 
 
- 全量同步验证:任务启动后,查看目标库 
db_all,会自动创建 ods_goods_goods_sku_rt/ods_goods_goods_spu_rt/ods_goods_goods_store_info_da 三张表,且数据与源库一致; 
- 增量同步验证:在源库 
db50000000 的任意表中插入 / 更新一条数据,观察目标库对应表是否实时同步; 
- 日志监控:若任务中断,查看日志中关键词 
CDC/binlog/XA transaction,定位问题(如 binlog 格式错误、主键缺失)。 
- 
CDC 连接失败:server-id already in use
- 原因:
server-id = 1001 与其他 CDC 客户端(如 Canal、Debezium)重复; 
- 解决:修改 
server-id 为 1-65535 之间的未使用值(如 1002)。 
 
- 
目标库表未创建:Table not found
- 原因:
schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST" 未生效,或源表无主键; 
- 解决:确保目标库用户有 
CREATE TABLE 权限,且源表均有主键(CDC 同步 UPDATE/DELETE 依赖主键)。 
 
- 
全量快照缓慢:snapshot chunk size too small
- 原因:
scan.incremental.snapshot.chunk.size 过小,分块过多; 
- 解决:调大该参数(如 200000),但需确保 SeaTunnel 内存充足(建议 JVM 堆内存 ≥ 4G)。