---
title: 如何使用 DataX 实现多库对多库的数据迁移-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于如何使用 DataX 实现多库对多库的数据迁移相关的常见问题和使用技巧，帮助您快速解决如何使用 DataX 实现多库对多库的数据迁移的难题。
---
切换语言

- 简体中文
- English

划线反馈

# 如何使用 DataX 实现多库对多库的数据迁移

更新时间：2026-05-29 09:46

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：How-to  

在某些业务场景下，需要按照固定的分片字段中获取分片信息，将对应的数据写入数据库。在迁移数据的过程中，需要进行单表导百库百表的迁移。DataX 提供分库分表的能力，本文主要介绍如何利用 DataX 的分库分表进行数据拆分。

## 适用版本

OceanBase 数据库 V3.x 及之前版本

## 配置说明

Datax 配置信息如下所示。

```unknow
"dbNamePattern":"dbname_{000}",
"dbRule":"#col1#",
"tableNamePattern":"table_{000}",
"tableRule":"#col1#",

```

- `dbNamePattern`：分库名的格式，例子中的配置是写入到 `dbname_<id>` 库中。其中，`<id>` 的值通过 `dbRule` 计算得出，例如 dbRule 计算出的值是 1，则 db name 为 `dbname_001`。
 - `dbRule`：分库计算规则，这是一个 groovy 表达式，通过该表达式计算出的值，最后得出数据要写入的分库名。
 - `tableNamePattern`：表名的格式，例子中的配置是写入到 `table_<id>` 表中。其中，`<id>` 的值通过 `tableRule` 计算得出，例如 `tableRule` 计算出来的值是 25，则数据写入的表名为 `table_025`。
 - `tableRule`：分表的计算规则，这也是一个 groovy 表达式，通过该表达式可以计算出分表的表名。

## DataX 配置文件生成工具

可以使用 `build_datax_json.py` 工具生成 DataX 配置文件，用法如下：

```unknow
usage: build_datax_json.py [-h] --reader_url READER_URL --reader_password
                           READER_PASSWORD --reader_user READER_USER
                           --reader_dbs READER_DBS --reader_tbs READER_TBS
                           [--reader_columns READER_COLUMNS]
                           [--reader_split READER_SPLIT] --writer_url
                           WRITER_URL --writer_password WRITER_PASSWORD
                           --writer_user WRITER_USER --writer_dbs WRITER_DBS
                           --writer_tbs WRITER_TBS --writer_columns
                           WRITER_COLUMNS [--db_rule DB_RULE]
                           [--tb_rule TB_RULE] [--channel CHANNEL]

optional arguments:
  -h, --help
  --reader_url READER_URL：reader配置的jdbc url信息
  --reader_password READER_PASSWORD：reader配置的数据库用户密码
  --reader_user READER_USER：reader配置的数据库用户名
  --reader_dbs READER_DBS：reader配置的连接的database信息，格式为"库名或库名前缀[,下标开始位置,总数,后缀宽度]"
  --reader_tbs READER_TBS： reader配置的需要导出的表名信息，格式为"表名或表名前缀[,下标开始位置,总数,后缀宽度]"
  --reader_columns READER_COLUMNS：reader配置的读取的表列，默认为"*"
  --reader_split READER_SPLIT：reader配置的读取表数据拆分字段，选择索引，主键列
  --writer_url WRITER_URL：writer配置的jdbc url信息
  --writer_password WRITER_PASSWORD：writer配置的数据库用户密码
  --writer_user WRITER_USER：writer配置的数据库用户名
  --writer_dbs WRITER_DBS：writer配置的连接的database信息，格式为"库名或库名前缀[,下标开始位置,总数,后缀宽度]"
  --writer_tbs WRITER_TBS：writer配置的需要导出的表名信息，格式为"表名或表名前缀[,下标开始位置,总数,后缀宽度]"
  --writer_columns WRITER_COLUMNS：reader配置的读取的表列
  --db_rule DB_RULE：分库分表拆分规则之库名规则
  --tb_rule TB_RULE：分库分表拆分规则之表名规则
  --channel CHANNEL：channel setting

```

## 使用 DataX 实现多库对多库的数据迁移

配置步骤如下所示：

1. 使用 `build_datax_json.py` 工具生成 json 格式的配置文件。

   ```unknow
   [admin@hostname datax]$ python ./build_datax_json.py --reader_user='root' --reader_password='root' --reader_url='jdbc:mysql://xxx.xxx.xxx.xxx:3306' --reader_dbs='ningyue,0,2,1' --reader_tbs='accl_r_fileinf_,0,2,1' --reader_columns='bat_id,pty_id,shard_id,acct_dt,file_type,file_path,file_name' --writer_user='test@mysql' --writer_password='test' --writer_url='jdbc:oceanbase://xxx.xxx.xxx.xxx:32637' --writer_dbs='test_,0,100,2' --writer_tbs='accl_r_fileinf_,0,100,2' --writer_columns='bat_id,pty_id,shard_id,acct_dt,file_type,file_path,file_name' --db_rule='#shard_id#[0,1]' --tb_rule='#shard_id#[0,1]' --channel=15 > transfer.json

   ```

   其中，各参数配置说明如下：

      - `--reader_dbs='ningyue,0,2,1'`：0 是后缀的起始位置；2 是库的个数；1 是后缀的长度，如起始位置是0，长度为 2，则第一个标识是 00。
      - `--reader_tbs='accl_r_fileinf_,0,2,1'`：0 是后缀的起始位置；2 是库的个数；1 是后缀的长度，如起始位置是 0，长度为 2，则第一个标识是 00。
      - `--reader_columns`：读取的列名，以逗号分隔。
      - `--writer_columns` 写入的列名，以逗号分隔。
      - `--db_rule='#shard_id#[0,1]'`：使用 `shard_id` 字段的第 1、2 位作为规则匹配。

       若要使用其他配置，可以使用 `#<字段名>#[a,b]` 的格式作为匹配规则，a 表示该字段的第 a+1 位，b 表示该字段的第 b+1 位。
      - `--tb_rule='#shard_id#[0,1]'`：使用 `shard_id` 字段的第 1、2 位作为规则匹配。

       若要使用其他配置，可以使用 `#<字段名>#[a,b]` 的格式作为匹配规则，a 表示该字段的第 a+1 位，b 表示该字段的第 b+1 位。
      - `--channel`：并行的通道个数。
 2. 使用 DataX 执行导入。

   ```unknow
   [admin@hostname datax]$ python ./bin/datax.json transfer.json

   ```

Previous

[旁路导入 LOAD DATA LOCAL 使用注意](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000006142763)

Next

[DataX 如何实现字段导入过程中进行字段清洗](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000069) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
