数据传输服务DTS

    将PostgreSQL 数据库作为DTS源

    1. 适用场景

    本文适用于使用百度智能云数据传输服务DTS(以下简称 DTS),将自建Postgresql中的数据迁移至DTS已经支持的数据目标端的场景。

    2. 将PostgreSQL数据库作为DTS源的限制

    • 不支持结构迁移
    • 不支持包含时区类型列的时间戳
    • 增量同步不支持同步关系型数据库的DDL语句
    • 一个数据迁移任务只能对一个数据库进行数据迁移,如果有多个数据库需要迁移,则需要为每个数据库创建数据迁移任务。
    • 如果源数据库没有主键或唯一约束,且所有字段没有唯一性,可能会导致目标数据库中出现重复数据。
    • 复制多个同名但名称具有不同大小写的表(例如,table1、TABLE1 和 Table1)会导致无法预测的行为。

    3. 将PostgreSQL数据库作为DTS源的前置条件

    3.1 环境要求

    DTS支持将 PostgreSQL 9.4 、10.10版本自建数据库作为源。

    3.2 数据库账号权限要求

    源端:

    数据库 全量迁移 增量迁移
    自建PostgreSQL数据库 迁移对象的select权限 superuser

    自建PostgreSQL数据库,数据库账号创建及授权方法请参见CREATE USERGRANT语法。

    3.3 网络配置

    将DTS的IP地址加入至自建PostgreSQL的配置文件pg_hba.conf中,并启用复制和套接字连接。

       # Replication Instance
       host all all 10.1.4.56/00 md5
       # Allow replication connections from localhost, by a user with the
       # replication privilege.
       host replication dms 10.1.4.56/00 md5

    PostgreSQL 的 pg_hba.conf 配置文件控制客户端身份验证。文件通常存储在数据库集群的数据目录中。

    3.4 源端自建PostgreSQL增量迁移准备工作

    1. 安装逻辑流复制插件

      登录自建PostgreSQL所属的服务器,下载wal2json逻辑流复制插件,下载地址如下: https://github.com/eulerto/wal2json 按照官方指导安装wal2json插件。

    2. 修改PostgreSQL相关参数配置

      修改postgresql.conf配置文件中的如下参数:

      1. 将max_replication_slots 设置为大于1的整数, max_replication_slots的值应根据您需要同时运行的任务数进行设置。例如,要同时运行十二个任务,您需要设置至少十二个slot。

        示例:max_replication_slots = 12

      2. 将wal_level 设置为logical,开启wal 逻辑日志。

        示例:wal_level = logical

      3. 将wal_sender_timeout 设置为0,复制连接处于不活跃状态的时间超过wal_sender_timeout 时,会被源端库终止。该参数的默认值为 60 秒,但我们建议您将该参数设置为零,这样会禁用超时机制。

        示例:wal_sender_timeout = 0

      4. 将max_wal_senders 设置为大于10的整数, max_wal_senders 参数用于设置可以运行的并发任务数,建议和max_replication_slots设置的值一致。

        示例:max_wal_senders = 12

    3. 重启PostgreSQL数据库
    4. 将要迁移表的replica identity 设置为FULL

      ALTER TABLE TABLENAME REPLICA IDENTITY FULL;

    4. 使用PostgreSQL数据库作为DTS源

    使用PostgreSQL数据库作为源,在任务创建、任务配置、前置检查、任务启动、任务暂停、任务终止的操作流程请参考最佳实践文档。 在任务配置参数和对象映射部分与其他数据源有些许不同。

    4.1 任务配置参数

    peizhirenwu.png

    如上图所示。目前DTS的源端支持公网自建PostgreSQL实例,PostgreSQL源端配置参数说明如下:

    • 接入类型:支持公网/BCC/BBC/DCC自建PostgreSQL实例
    • 数据类型:固定选择PostgreSQL
    • IP/端口:自建PostgreSQL数据库的访问IP与服务端口
    • 数据库:自建PostgreSQL数据库中待迁移的数据库名
    • 账号:自建PostgreSQL的数据库账号
    • 密码:该数据库账号对应的密码

    4.2 对象映射

    PostgreSQL为三级schema,当需要向两级schema的目的端进行数据迁移时, DTS提供了两种库表名映射方式供用户选择。如下图所示,选择好的迁移对象会出现在右边的已选择对象列表中。DTS支持上下游库表名映射、列过滤黑白名单等功能。可以点击【编辑】,对每一个迁移对象配置映射和过滤规则。目标数据库对象可以映射为源库中database和schema:

    • 1. 数据库对象映射为源库中的Database: 忽略PostgreSQL中的schema, PostgreSQL中不同schema下的表均映射到mysql指定库中,目标端库名默认使用源端的库名。
    • 2. 数据库对象映射为源库中的Schema: 忽略PostgreSQL中的库名,PostgreSQL中的不同schema映射为mysql中不同库,目标库名默认使用源端schema名。

    完成对象映射配置后,点击【保存并预检查】,启动任务的前置检查

    peizhirenwu1.png

    5. DTS支持的PostgreSQL源数据类型

    下表列出了使用 DTS 时支持的 PostgreSQL 源数据类型以及与 DTS 数据类型的默认映射。

    有关如何查看目标端映射的数据类型的信息,请参阅有关目标端数据源的数据类型映射部分。

    PostgreSQL数据类型 DTS字段类型
    INTEGER DTS_TYPE_INT4
    INTEGER[] DTS_TYPE_STRING
    TEXT[] DTS_TYPE_STRING
    BIT DTS_TYPE_BYTES
    BIT VARYING DTS_TYPE_BYTES
    MONEY DTS_TYPE_NUMBER
    CHARACTER DTS_TYPE_STRING
    CHARACTER VARYING DTS_TYPE_STRING
    TEXT DTS_TYPE_STRING
    BYTEA DTS_TYPE_BYTES
    COMPLEX DTS_TYPE_STRING
    ENUM DTS_TYPE_STRING
    CIDR DTS_TYPE_STRING
    POINT DTS_TYPE_STRING
    LINE DTS_TYPE_STRING
    LSEG DTS_TYPE_STRING
    BOX DTS_TYPE_STRING
    PATH DTS_TYPE_STRING
    POLYGON DTS_TYPE_STRING
    CIRCLE DTS_TYPE_STRING
    INET DTS_TYPE_STRING
    MACADDR DTS_TYPE_STRING
    MACADDR8 DTS_TYPE_STRING
    JSON DTS_TYPE_STRING
    SMALLINT DTS_TYPE_INT2
    BIGINT DTS_TYPE_INT8
    NUMERIC(P,S) 如果精度介于 0 和 38 之间,则使用 DTS_TYPE_NUMBER, 如果精度为 39 或更大的值,则使用 DTS_TYPE_STRING
    DECIMAL(P,S) 如果精度介于 0 和 38 之间,则使用 DTS_TYPE_NUMBER, 如果精度为 39 或更大的值,则使用 DTS_TYPE_STRING
    DECIMAL DTS_TYPE_STRING
    NUMBER DTS_TYPE_STRING
    DECIMAL(p) DTS_TYPE_NUMBER
    NUMBER(p) DTS_TYPE_NUMBER
    REAL DTS_TYPE_FLOAT
    DOUBLE PRECISION DTS_TYPE_DOUBLE
    SMALLSERIAL DTS_TYPE_INT2
    SERIAL DTS_TYPE_INT4
    BIGSERIAL DTS_TYPE_INT8
    TIME WITHOUT TIME ZONE DTS_TYPE_TIME
    DATE DTS_TYPE_DATE
    TIMESTAMP WITHOUT TIMEZONE DTS_TYPE_DATETIME
    INTERVAL DTS_TYPE_STRING
    BOOLEAN DTS_TYPE_BOOLEAN
    上一篇
    DTS 服务器公网 IP 段
    下一篇
    将 SQL Server 数据库作为 DTS 源