传输对象范围
更新时间:2025-02-11
在配置数据迁移任务时,DTS 支持迁移选择传输对象范围。您可以选择整个实例或指定对象进行迁移。本文将介绍在配置数据迁移任务过程中,如何选择传输对象。
使用限制
- 目前仅 MySQL、GaiaDB、PostgreSQL、Oracle、MongoDB 支持手动选择
- 目前仅 MySQL、GaiaDB、PostgreSQL、Oracle、MongoDB 支持模式匹配
- PostgreSQL 的模式匹配仅支持表模式匹配,不支持库模式匹配
- Oracle 不支持带 % 的模式匹配
手动选择
配置 DTS 任务传输对象为 手动选择 后,在源端对象区域中勾选需要迁移的对象。同时,您可以在已选择对象区域中实现以下操作:
说明
- 迁移对象非整库时,仅 MySQL、GaiaDB 支持 OnlineDDL 操作,需打开 Online DDL 开关,详情参见 同步 Online DDL。
- PostgreSQL 与 Oracle 的增量同步不支持自动迁移新增的对象及其相关变更。
- MongoDB暂不支持库表映射与设置过滤条件。
- 迁移对象选择的粒度为库或表。若迁移对象选择的是表,则其他对象例如视图、触发器、函数或存储过程等,不会被迁移至目标库。
- 为保证数据迁移的性能和迁移任务的稳定性,DTS 会对 MySQL 的触发器进行改写,改写方式详情参见 触发器改写方式。
触发器改写方式
- 源端触发器:
                SQL
                
            
            1CREATE TRIGGER test_trigger AFTER INSERT ON t1
2    FOR EACH ROW
3    BEGIN
4        INSERT INTO t2 VALUES (NEW.id);
5    END;- 目标端修改后的触发器:
                SQL
                
            
            1CREATE TRIGGER test_trigger AFTER INSERT ON t1
2    FOR EACH ROW
3    BEGIN
4        IF (SELECT @`__BAIDU_DTS_WRITER__`) IS NULL THEN
5            BEGIN
6                INSERT INTO t2 VALUES (NEW.id);
7            END;
8        END IF;
9    END;DTS 往目标端写数据时,会在连接会话中设置 __BAIDU_DTS_WRITER__变量,设置后,对于 DTS 执行的所有 SQL,都不会导致触发器运行;但对于用户执行的 SQL,触发器的功能能够正常运行。
模式匹配
配置 DTS 任务传输对象为 模式匹配 后,支持以 JSON 格式配置需要迁移的对象。具体规则如下:
                JSON
                
            
            1[
2    {
3        "type" : "db",
4        "src" : "待迁移的库1的名称",
5        "dst" : "待迁移的库1在目标实例中的名称"
6    },
7    {
8        "type" : "db",
9        "src" : "模式匹配多个库",
10        "dst" : "待迁移的库在目标实例中的名称"
11    },
12    {
13        "type" : "db",
14        "src" : "待迁移的库1的名称",
15        "dst" : "待迁移的库1在目标实例中的名称",
16        "where" : "",
17        "sqlType" : "库级sqlType过滤"
18    },
19    {
20        "type" : "table",
21        "src" : "待迁移或订阅的表A的名称",
22        "dst" : "待迁移或订阅的表A在目标实例中的名称"
23        "fieldBlacklist" : "列过滤(黑名单)",
24        "fieldWhitelist" : "列过滤(白名单)",
25        "where" : "行过滤"
26    },
27    {
28        "type" : "table",
29        "src" : "模式匹配多张表",
30        "dst" : "待迁移的表在目标实例中的名称",
31        "fieldBlacklist" : "列过滤(黑名单)",
32        "fieldWhitelist" : "列过滤(白名单)",
33        "where" : "行过滤"
34    },
35    {
36        "type" : "table",
37        "src" : "待迁移或订阅的表A的名称",
38        "dst" : "待迁移或订阅的表A在目标实例中的名称",
39        "where" : "",
40        "sqlType" : "表级sqlType过滤"
41    },
42]| 参数 | 是否必须 | 说明 | 
|---|---|---|
| type | Y | 待迁移对象类型:db(迁移整个库)、 table(迁移单张表或者模式匹配多张表) | 
| src | Y | 如果是迁移整个库,此项为待迁移的库的名称;如果是迁移表,此项为待迁移的表的名称 | 
| dst | Y | 如果是迁移整个库,此项为待迁移的库在目标实例中的名称;如果是迁移表,此项为待迁移的表在目标实例中的名称 | 
| fieldBlacklist | N | 列过滤(黑名单),符合条件的列将被排除,支持数据库标准 SQL SELECT 条件,示例:n1,n2 | 
| fieldWhitelist | N | 列过滤(白名单),符合条件的列将被保留,支持数据库标准 SQL SELECT 条件,示例:n1,n2 | 
| where | N | 行过滤,符合条件的行将被保留,仅支持数据库标准 SQL WHERE 条件,Oracle 数据库注意区分字段名大小写。示例:id>10 AND status='success' | 
| sqlType | N | 库表级别sqlType过滤。支持过滤的语句类型有I(insert)、U(update)、D(delete)、Q(DDL) | 
迁移对象配置示例
匹配上游 old_db 的库,并不做转换的同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "db", 
4        "src" : "old_db",
5        "dst" : "old_db" 
6    },
7    {
8        ...
9    }
10]匹配上游 old_db 的库,并转换为 new_db 的同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "db", 
4        "src" : "old_db",
5        "dst" : "new_db" 
6    },
7    {
8        ...
9    }
10]匹配上游前缀为 old_db 的库,并不做转换的同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "db",
4        "src" : "old_db%",
5        "dst" : "old_db%",
6    },
7    {
8        ...
9    }
10]匹配上游前缀为 old_db 的库,转换成前缀为 new_db 的库同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "db", 
4        "src" : "old_db%",
5        "dst" : "new_db%" 
6    },
7    {
8        ...
9    }
10]只支持同步上游 old_db 库的 insert 和 update 语句到下游
                JSON
                
            
            1[
2    {
3        "type" : "db", 
4        "src" : "old_db",
5        "dst" : "old_db",
6        "sqlType" : "I,U"
7    },
8    {
9        ...
10    }
11]匹配上游表 db.tbl,并不做转换的同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "table",
4        "src" : "db.tbl",
5        "dst" : "db.tbl",
6        "fieldBlacklist" : "id,id2,id3",
7        "fieldWhitelist" : "name,name2,name3",
8        "where" : "id>6 and name='dtstest'"
9    },
10    {
11        ...
12    }
13]匹配上游表 old_db.old_tbl,并转换为表 new_db.new_tbl 同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "table",
4        "src" : "old_db.old_tbl",
5        "dst" : "new_db.new_tbl",
6        "fieldBlacklist" : "id,id2,id3",
7        "fieldWhitelist" : "name,name2,name3",
8        "where" : "id>6 and name='dtstest'"
9    },
10    {
11        ...
12    }
13]匹配上游前缀为 old_db.old_tbl 的表,并不做转换的同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "table",
4        "src" : "old_db.old_tbl_%",
5        "dst" : "old_db.old_tbl_%",
6        "fieldBlacklist" : "id,id2,id3",
7        "fieldWhitelist" : "name,name2,name3",
8        "where" : "id>6 and name='dtstest'"
9    },
10    {
11        ...
12    }
13]匹配上游前缀为 old_db.old_tbl 的表,并转换成前缀为 new_db.new_tbl 的表同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "table",
4        "src" : "old_db.old_tbl_%",
5        "dst" : "new_db.new_tbl_%",
6        "fieldBlacklist" : "id,id2,id3",
7        "fieldWhitelist" : "name,name2,name3",
8        "where" : "id>6 and name='dtstest'"
9    },
10    {
11        ...
12    }
13]匹配上游前缀为 old_db 的库、前缀为 old_tbl 的表,并转换成前缀为 new_db 的库,前缀为 new_tbl 的表同步到下游
                JSON
                
            
            1[
2    {
3        "type" : "table",
4        "src" : "old_db_%.old_tbl_%",
5        "dst" : "new_db_%.new_tbl_%",
6        "fieldBlacklist" : "id,id2,id3",
7        "fieldWhitelist" : "name,name2,name3",
8        "where" : "id>6 and name='dtstest'"
9    },
10    {
11        ...
12    }
13]只支持同步上游表 db.tbl 的 delete 和 DDL 语句到下游
                JSON
                
            
            1[
2    {
3        "type" : "table",
4        "src" : "db.tbl",
5        "dst" : "db.tbl",
6        "sqlType" : "D,Q"
7    },
8    {
9        ...
10    }
11]