SeaTunnel操作MySQL数据同步需要用到 connector-jdbc 这个插件,如果没有,需要先安装

编写任务配置文件:mysql_to_mysql.conf

env {
    "parallelism"=5
    "job.mode"=BATCH
}
source {
    source000 {
        "connection_check_timeout_sec"=100
        driver="com.mysql.cj.jdbc.Driver"
        "fetch_size"=0
        password="123456"
        "plugin_name"=Jdbc
        query="select id,y,X0,X1,X2,X3,X4,X5,X6,X7 from `test`.`test_row200009_coum30`"
        "result_table_name"="t.a__tran_source_1721782563326"
        url="jdbc:mysql://192.168.1.10:3308/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8"
        user=root
        partition_column="id"
    }
}
sink {
    jdbc {
        password="123456"
        driver = "com.mysql.cj.jdbc.Driver"
        url = "jdbc:mysql://192.168.1.20:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8&rewriteBatchedStatements=true"
        generate_sink_sql=true
        database="test"
        table="test_002"
        user="root"
        schema_save_mode = "CREATE_SCHEMA_WHEN_NOT_EXIST"
        batch_size=5000
        #primary_keys=["id"]
        #enable_upsert=false
    }
}

命令行单机运行

./bin/seatunnel.sh --config ./mysql_to_mysql.conf -e local

实测单机限制4核2g内存的情况下运行可以跑到 5w+/s 的速度

提升速度的主要参数:

  • sink 中的 jdbcurl 中加了 rewriteBatchedStatements=true 参数

  • source 中设置了 partition_column ,以及 env.parallelism 设置了并发度 5

参考 datax 自动拼接的 jdbc 参数:

jdbc:mysql://192.168.1.20:3306/test?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false&yearIsDateType=false&zeroDateTimeBehavior=convertToNull&rewriteBatchedStatements=true&tinyInt1isBit=false