跳到主要内容

db-archiver

Introduced: v1.1.70

db-archiver 是一个 Databend 自研的开箱即用的归档工具,用于将数据库或者其他数据源的数据归档到 Databend。

支持的数据源

数据源支持状态
MySQL支持
PostgreSQL支持
TiDB支持
Oracle支持
CSV即将支持
NDJSON即将支持

安装

go install github.com/databend/db-archiver@latest

或者从 release 下载对应的可执行文件。

使用方法

config/conf.json 中配置数据源信息和 Databend 连接:

{
"sourceHost": "127.0.0.1",
"sourcePort": 3306,
"sourceUser": "root",
"sourcePass": "123456",
"sourceDB": "mydb",
"sourceTable": "my_table",
"sourceDbTables": ["mydb.*@table.*"],
"sourceQuery": "select * from mydb.my_table",
"sourceWhereCondition": "id < 100",
"sourceSplitKey": "id",
"databendDSN": "https://cloudapp:password@host.databend.com:443",
"databendTable": "testSync.my_table",
"batchSize": 2,
"batchMaxInterval": 30,
"workers": 1,
"copyPurge": false,
"copyForce": false,
"disableVariantCheck": false,
"userStage": "~",
"deleteAfterSync": false
}

运行工具并开始同步:

./db-archiver -f config/conf.json

日志输出:

INFO[0000] Starting worker              
2024/06/25 11:35:37 ingest 2 rows (0.565646 rows/s), 64 bytes (18.100678 bytes/s)
2024/06/25 11:35:38 ingest 1 rows (0.556652 rows/s), 33 bytes (17.812853 bytes/s)
2024/06/25 11:35:38 ingest 2 rows (0.551906 rows/s), 65 bytes (17.660995 bytes/s)
2024/06/25 11:35:38 ingest 2 rows (0.531644 rows/s), 64 bytes (17.012600 bytes/s)
2024/06/25 11:35:38 ingest 2 rows (0.531768 rows/s), 64 bytes (17.016584 bytes/s)

参数参考

参数描述默认值示例必填
sourceHost源主机
sourcePort源端口33063306
sourceUser源用户
sourcePass源密码
sourceDB源数据库
sourceTable源表
sourceDbTables源数据库表(支持正则表达式匹配)[][db.@table.,mydb..table.]
sourceQuery源查询
sourceWhereCondition源条件
sourceSplitKey源分割键"id"
sourceSplitTimeKey源分割时间键"t1"
timeSplitUnit时间分割单位"分钟""天"
databendDSNDatabend 数据源名称"http://localhost:8000"
databendTableDatabend 表"db1.tbl"
batchSize批量大小10001000
copyPurge复制清除falsefalse
copyForce强制复制falsefalse
DisableVariantCheck禁用变体检查falsefalse
userStage用户外部 stage~~
deleteAfterSync同步成功后删除源数据falsefalse

注意:

  1. 为了减少服务器负载,我们设置了 sourceSplitKey,它是源表的主键。工具将根据 sourceSplitKey 分割数据,并并行同步数据到 Databend。 sourceSplitTimeKey 用于按时间列分割数据。sourceSplitTimeKeysourceSplitKey 至少必须设置一个。
  2. sourceDbTables 用于从多个表同步数据。格式为 db.*@table.*db.table.*.* 是正则表达式模式。db.*@table.* 表示匹配数据库中所有匹配正则表达式 db.* 的表和匹配正则表达式 table.* 的表。
  3. sourceDbTables 的优先级高于 sourceTablesourceDB。如果设置了 sourceDbTables,则会忽略 sourceTable
  4. databasetable 都支持正则表达式模式。

两种模式

根据 sourceSplitKey 同步数据

如果您的源表有一个主键,您可以设置 sourceSplitKey 来并行同步数据。工具将根据 sourceSplitKey 分割数据,并并行同步数据到 Databend。 这是性能最高的模式。 conf.json 的示例:

{
"sourceHost": "0.0.0.0",
"sourcePort": 3306,
"sourceUser": "root",
"sourcePass": "123456",
"sourceDB": "mydb",
"sourceTable": "my_table",
"sourceQuery": "select * from mydb.my_table",
"sourceWhereCondition": "id < 100",
"sourceSplitKey": "id",
"databendDSN": "https://cloudapp:password@host.databend.com:443",
"databendTable": "testSync.my_table",
"batchSize": 2,
"batchMaxInterval": 30,
"workers": 1,
"copyPurge": false,
"copyForce": false,
"disableVariantCheck": false,
"userStage": "~",
"deleteAfterSync": false,
"maxThread": 10
}

根据 sourceSplitTimeKey 同步数据

如果您的源表有一个时间列,您可以设置 sourceSplitTimeKey 来并行同步数据。工具将根据 sourceSplitTimeKey 分割数据,并并行同步数据到 Databend。 sourceSplitTimeKey 必须与 timeSplitUnit 一起设置。timeSplitUnit 可以是 minutehourdaytimeSplitUnit 用于按时间列分割数据。 conf.json 的示例:

{
"sourceHost": "127.0.0.1",
"sourcePort": 3306,
"sourceUser": "root",
"sourcePass": "12345678",
"sourceDB": "mydb",
"sourceTable": "test_table1",
"sourceQuery": "select * from mydb.test_table1",
"sourceWhereCondition": "t1 >= '2024-06-01' and t1 < '2024-07-01'",
"sourceSplitKey": "",
"sourceSplitTimeKey": "t1",
"timeSplitUnit": "hour",
"databendDSN": "https://cloudapp:password@tn3ftqihs--medium-p8at.gw.aws-us-east-2.default.databend.com:443",
"databendTable": "default.test_table1",
"batchSize": 2,