跳到主要内容

MySQL 多表导入

概述

支持通过 Job 将 MySQL 数据库的多张表的全量和增量数据,通过 Stream Load 的方式持续同步到 Doris 中。适用于需要实时同步多表数据到 Doris 的场景。

通过集成 Flink CDC 能力,Doris 支持从 MySQL 数据库读取变更日志,实现多表的全量和增量数据同步。首次同步时会自动创建 Doris 下游表(主键表),并保持主键与上游一致。

注意事项:

  1. 目前只能保证 at-least-once 语义。
  2. 目前只支持主键表同步。
  3. 需要 Load 权限,若下游表不存在还需有 Create 权限。
  4. 自动创建表阶段,如果目标表已存在则会跳过,用户可以根据不同的场景自定义表。

前提条件

需要在 MySQL 端开启 Binlog,即 my.cnf 配置文件中增加:

log-bin=mysql-bin
binlog_format=ROW
server-id=1

如果您使用的是云服务,请参考配置指南

快速上手

创建导入作业

使用 CREATE STREAMING JOB 创建持续导入作业:

CREATE JOB multi_table_sync
ON STREAMING
FROM MYSQL (
"jdbc_url" = "jdbc:mysql://127.0.0.1:3306",
"driver_url" = "mysql-connector-j-8.0.31.jar",
"driver_class" = "com.mysql.cj.jdbc.Driver",
"user" = "root",
"password" = "123456",
"database" = "test",
"include_tables" = "user_info,order_info",
"offset" = "initial"
)
TO DATABASE target_test_db (
"table.create.properties.replication_num" = "1" -- 单BE部署时需要设置为1
)

查看导入状态

select * from jobs("type"="insert") where ExecuteType = "STREAMING"
Id: 1765332859199
Name: mysql_db_sync
Definer: root
ExecuteType: STREAMING
RecurringStrategy: \N
Status: RUNNING
ExecuteSql: FROM MYSQL('include_tables'='user_info','database'='test','driver_class'='com.mysql.cj.jdbc.Driver','driver_url'='mysql-connector-j-8.0.31.jar','offset'='initial','jdbc_url'='jdbc:mysql://127.0.0.1:3306','user'='root' ) TO DATABASE target_test_db ('table.create.properties.replication_num'='1')
CreateTime: 2025-12-10 10:19:35
SucceedTaskCount: 1
FailedTaskCount: 0
CanceledTaskCount: 0
Comment:
Properties: \N
CurrentOffset: {"ts_sec":"1765284495","file":"binlog.000002","pos":"9350","kind":"SPECIFIC","splitId":"binlog-split","row":"1","event":"2","server_id":"1"}
EndOffset: \N
LoadStatistic: {"scannedRows":24,"loadBytes":1146,"fileNumber":0,"fileSize":0}
ErrorMsg: \N

修改导入作业

ALTER JOB <job_name>
FROM MYSQL (
"user" = "root",
"password" = "123456"
)
TO DATABASE target_test_db

更多通用操作(暂停、恢复、删除、查看 Task 等)请参考持续导入概览

数据源参数

参数默认值说明
jdbc_url-MySQL JDBC 连接串
driver_url-JDBC 驱动 jar 包路径
driver_class-JDBC 驱动类名
user-数据库用户名
password-数据库密码
database-数据库名
include_tables-需要同步的表名,多个表用逗号分隔,不填默认所有的表
offsetinitialinitial: 全量 + 增量同步,latest: 仅增量同步
snapshot_split_size8096split 的大小(行数),全量同步时,表会被切分成多个 split 进行同步
snapshot_parallelism1全量阶段同步的并行度,即单次 Task 最多调度的 split 数量

参考手册

导入命令

创建多表同步作业语法如下:

CREATE JOB <job_name>
ON STREAMING
[job_properties]
[ COMMENT <comment> ]
FROM MYSQL (
[source_properties]
)
TO DATABASE <target_db> (
[target_properties]
)
模块说明
job_name任务名
job_properties用于指定 Job 的通用导入参数
comment用于描述 Job 作业的备注信息
source_propertiesMySQL 源端相关参数
target_propertiesDoris 目标库相关参数

Doris 目标库端配置参数

参数默认值说明
table.create.properties.*-支持创建表的时候指定 table 的 properties,比如 replication_num
load.strict_mode-是否开启严格模式,默认为关闭
load.max_filter_ratio-采样窗口内,允许的最大过滤率。必须在大于等于 0 到小于等于 1 之间。默认值是 0,表示零容忍。采样窗口为 max_interval * 10。即如果在采样窗口内,错误行数/总行数大于 max_filter_ratio,则会导致例行作业被暂停,需要人工介入检查数据质量问题。