|
| 1 | +--- |
| 2 | +title: db-archiver |
| 3 | +--- |
| 4 | + |
| 5 | +import FunctionDescription from '@site/src/components/FunctionDescription'; |
| 6 | + |
| 7 | +<FunctionDescription description="Introduced: v1.1.70"/> |
| 8 | + |
| 9 | +[db-archiver](https://github.com/databendcloud/db-archiver) 是一个 Databend 自研的开箱即用的归档工具,用于将数据库或者其他数据源的数据归档到 Databend。 |
| 10 | + |
| 11 | +## 支持的数据源 |
| 12 | + |
| 13 | +| 数据源 | 支持状态 | |
| 14 | +| :--------- | :------: | |
| 15 | +| MySQL | 支持 | |
| 16 | +| PostgreSQL | 支持 | |
| 17 | +| TiDB | 支持 | |
| 18 | +| Oracle | 支持 | |
| 19 | +| CSV | 即将支持 | |
| 20 | +| NDJSON | 即将支持 | |
| 21 | + |
| 22 | +## 安装 |
| 23 | + |
| 24 | +```bash |
| 25 | +go install github.com/databend/db-archiver@latest |
| 26 | +``` |
| 27 | + |
| 28 | +或者从 [release](https://github.com/databendcloud/db-archiver/releases) 下载对应的可执行文件。 |
| 29 | + |
| 30 | +## 使用方法 |
| 31 | + |
| 32 | +在 `config/conf.json` 中配置数据源信息和 Databend 连接: |
| 33 | + |
| 34 | +```json |
| 35 | +{ |
| 36 | + "sourceHost": "127.0.0.1", |
| 37 | + "sourcePort": 3306, |
| 38 | + "sourceUser": "root", |
| 39 | + "sourcePass": "123456", |
| 40 | + "sourceDB": "mydb", |
| 41 | + "sourceTable": "my_table", |
| 42 | + "sourceDbTables": ["mydb.*@table.*"], |
| 43 | + "sourceQuery": "select * from mydb.my_table", |
| 44 | + "sourceWhereCondition": "id < 100", |
| 45 | + "sourceSplitKey": "id", |
| 46 | + "databendDSN": "https://cloudapp:[email protected]:443", |
| 47 | + "databendTable": "testSync.my_table", |
| 48 | + "batchSize": 2, |
| 49 | + "batchMaxInterval": 30, |
| 50 | + "workers": 1, |
| 51 | + "copyPurge": false, |
| 52 | + "copyForce": false, |
| 53 | + "disableVariantCheck": false, |
| 54 | + "userStage": "~", |
| 55 | + "deleteAfterSync": false |
| 56 | +} |
| 57 | +``` |
| 58 | + |
| 59 | +运行工具并开始同步: |
| 60 | + |
| 61 | +```bash |
| 62 | +./db-archiver -f config/conf.json |
| 63 | +``` |
| 64 | + |
| 65 | +日志输出: |
| 66 | + |
| 67 | +```shell |
| 68 | +INFO[0000] Starting worker |
| 69 | +2024/06/25 11:35:37 ingest 2 rows (0.565646 rows/s), 64 bytes (18.100678 bytes/s) |
| 70 | +2024/06/25 11:35:38 ingest 1 rows (0.556652 rows/s), 33 bytes (17.812853 bytes/s) |
| 71 | +2024/06/25 11:35:38 ingest 2 rows (0.551906 rows/s), 65 bytes (17.660995 bytes/s) |
| 72 | +2024/06/25 11:35:38 ingest 2 rows (0.531644 rows/s), 64 bytes (17.012600 bytes/s) |
| 73 | +2024/06/25 11:35:38 ingest 2 rows (0.531768 rows/s), 64 bytes (17.016584 bytes/s) |
| 74 | +``` |
| 75 | + |
| 76 | +## 参数参考 |
| 77 | + |
| 78 | +| 参数 | 描述 | 默认值 | 示例 | 必填 | |
| 79 | +| -------------------- | ------------------------------ | ------ | ----------------------------- | ---- | |
| 80 | +| sourceHost | 源主机 | | | 是 | |
| 81 | +| sourcePort | 源端口 | 3306 | 3306 | 是 | |
| 82 | +| sourceUser | 源用户 | | | 是 | |
| 83 | +| sourcePass | 源密码 | | | 是 | |
| 84 | +| sourceDB | 源数据库 | | | 是 | |
| 85 | +| sourceTable | 源表 | | | 是 | |
| 86 | +| sourceDbTables | 源数据库表(支持正则表达式匹配) | [] | [db.*@table.*,mydb.*.table.*] | 否 | |
| 87 | +| sourceQuery | 源查询 | | | 是 | |
| 88 | +| sourceWhereCondition | 源条件 | | | 否 | |
| 89 | +| sourceSplitKey | 源分割键 | 无 | "id" | 否 | |
| 90 | +| sourceSplitTimeKey | 源分割时间键 | 无 | "t1" | 否 | |
| 91 | +| timeSplitUnit | 时间分割单位 | "分钟" | "天" | 否 | |
| 92 | +| databendDSN | Databend 数据源名称 | 无 | "http://localhost:8000" | 是 | |
| 93 | +| databendTable | Databend 表 | 无 | "db1.tbl" | 是 | |
| 94 | +| batchSize | 批量大小 | 1000 | 1000 | 否 | |
| 95 | +| copyPurge | 复制清除 | false | false | 否 | |
| 96 | +| copyForce | 强制复制 | false | false | 否 | |
| 97 | +| DisableVariantCheck | 禁用变体检查 | false | false | 否 | |
| 98 | +| userStage | 用户外部 stage | ~ | ~ | 否 | |
| 99 | +| deleteAfterSync | 同步成功后删除源数据 | false | false | 否 | |
| 100 | + |
| 101 | +注意: |
| 102 | + |
| 103 | +1. 为了减少服务器负载,我们设置了 `sourceSplitKey`,它是源表的主键。工具将根据 `sourceSplitKey` 分割数据,并并行同步数据到 Databend。 |
| 104 | + `sourceSplitTimeKey` 用于按时间列分割数据。`sourceSplitTimeKey` 和 `sourceSplitKey` 至少必须设置一个。 |
| 105 | +2. `sourceDbTables` 用于从多个表同步数据。格式为 `db.*@table.*` 或 `db.table.*`。`.*` 是正则表达式模式。`db.*@table.*` 表示匹配数据库中所有匹配正则表达式 `db.*` 的表和匹配正则表达式 `table.*` 的表。 |
| 106 | +3. `sourceDbTables` 的优先级高于 `sourceTable` 和 `sourceDB`。如果设置了 `sourceDbTables`,则会忽略 `sourceTable`。 |
| 107 | +4. `database` 和 `table` 都支持正则表达式模式。 |
| 108 | + |
| 109 | +## 两种模式 |
| 110 | + |
| 111 | +### 根据 `sourceSplitKey` 同步数据 |
| 112 | + |
| 113 | +如果您的源表有一个主键,您可以设置 `sourceSplitKey` 来并行同步数据。工具将根据 `sourceSplitKey` 分割数据,并并行同步数据到 Databend。 |
| 114 | +这是性能最高的模式。 |
| 115 | +`conf.json` 的示例: |
| 116 | + |
| 117 | +```json |
| 118 | +{ |
| 119 | + "sourceHost": "0.0.0.0", |
| 120 | + "sourcePort": 3306, |
| 121 | + "sourceUser": "root", |
| 122 | + "sourcePass": "123456", |
| 123 | + "sourceDB": "mydb", |
| 124 | + "sourceTable": "my_table", |
| 125 | + "sourceQuery": "select * from mydb.my_table", |
| 126 | + "sourceWhereCondition": "id < 100", |
| 127 | + "sourceSplitKey": "id", |
| 128 | + "databendDSN": "https://cloudapp:[email protected]:443", |
| 129 | + "databendTable": "testSync.my_table", |
| 130 | + "batchSize": 2, |
| 131 | + "batchMaxInterval": 30, |
| 132 | + "workers": 1, |
| 133 | + "copyPurge": false, |
| 134 | + "copyForce": false, |
| 135 | + "disableVariantCheck": false, |
| 136 | + "userStage": "~", |
| 137 | + "deleteAfterSync": false, |
| 138 | + "maxThread": 10 |
| 139 | +} |
| 140 | +``` |
| 141 | + |
| 142 | +### 根据 `sourceSplitTimeKey` 同步数据 |
| 143 | + |
| 144 | +如果您的源表有一个时间列,您可以设置 `sourceSplitTimeKey` 来并行同步数据。工具将根据 `sourceSplitTimeKey` 分割数据,并并行同步数据到 Databend。 |
| 145 | +`sourceSplitTimeKey` 必须与 `timeSplitUnit` 一起设置。`timeSplitUnit` 可以是 `minute`、`hour`、`day`。`timeSplitUnit` 用于按时间列分割数据。 |
| 146 | +`conf.json` 的示例: |
| 147 | + |
| 148 | +```json |
| 149 | +{ |
| 150 | + "sourceHost": "127.0.0.1", |
| 151 | + "sourcePort": 3306, |
| 152 | + "sourceUser": "root", |
| 153 | + "sourcePass": "12345678", |
| 154 | + "sourceDB": "mydb", |
| 155 | + "sourceTable": "test_table1", |
| 156 | + "sourceQuery": "select * from mydb.test_table1", |
| 157 | + "sourceWhereCondition": "t1 >= '2024-06-01' and t1 < '2024-07-01'", |
| 158 | + "sourceSplitKey": "", |
| 159 | + "sourceSplitTimeKey": "t1", |
| 160 | + "timeSplitUnit": "hour", |
| 161 | + "databendDSN": "https://cloudapp:password@tn3ftqihs--medium-p8at.gw.aws-us-east-2.default.databend.com:443", |
| 162 | + "databendTable": "default.test_table1", |
| 163 | + "batchSize": 2, |
| 164 | +``` |
0 commit comments