文档首页> 数据复制服务 DRS> 快速入门> 实时同步> 入云同步使用须知> PostgreSQL->GaussDB(for openGauss)分布式版
更新时间:2022-08-09 GMT+08:00
分享

PostgreSQL->GaussDB(for openGauss)分布式版

使用技巧(需要人为配合)

推荐提前2-3天启动任务,并配合如下使用技巧和操作要求,以确保任务稳定运行。

  • 基于以下原因,建议您结合定时启动功能,选择业务低峰期开始运行同步任务。
    • 在网络无瓶颈的情况下,全量同步会对源数据库增加约50MB/s的查询压力,以及占用2~4个CPU。
    • 正在同步的数据被其他事务长时间锁死,可能导致读数据超时。
    • DRS并发读取数据库,会占用大约6-10个session连接数,需要考虑该连接数对业务的影响。
    • 全量阶段读取表数据时,特别是大表的读取,可能会阻塞业务上对大表的独占锁操作。
  • 建议您结合数据对比的“稍后启动”功能,选择业务低峰期进行数据对比,以便得到更为具有参考性的对比结果。由于同步具有轻微的时差,在数据持续操作过程中进行对比任务,可能会出现少量数据不一致对比结果,从而失去参考意义。

操作要求

针对一些无法预知或人为因素及环境突变导致同步失败的情况,数据复制服务提供以下常见的操作限制,供您在同步过程中参考。
表1 操作要求

类型名称

操作限制(需要人为配合)

注意事项

  • 表2中的环境要求均不允许在同步过程中修改,直至同步结束。
  • 相互关联的数据对象要确保同时同步,避免同步因关联对象缺失,导致同步失败。常见的关联关系:视图引用表、视图引用视图、主外键关联表、表继承子表引用父表、表分区子分区表引用分区表、表自增列引用序列等。
  • 实时同步会自动在目标库创建与源库相同的表和结构,不需要用户先行在目标库创建表结构。
  • 不支持Public下对象的同步。
  • 一个同步任务只能对一个数据库进行数据同步,如果一个PostgreSQL实例下有多个数据库需要同步,则需要为每个数据库创建实时同步任务。
  • 表级同步时仅支持指定表名、序列名进行同步,如果同步表结构时出现依赖的对象(如type、sequence等)没有创建时,需要用户手动创建依赖对象后重试任务。
  • 不支持在目标库创建表时指定分布列,源库表的主键约束必须包含目标库表分布列,主键约束没有包含分布列时,无法成功创建表,需要用户手动创建表后重试任务。
  • 主键与唯一键创建在同一个列上时,只会同步主键。
  • 若专属计算集群不支持4vCPU/8G或以上规格实例,则无法创建同步任务。

操作须知

  • 同步过程中,不允许修改、删除连接源和目标数据库的用户的用户名、密码、权限,或修改源和目标数据库的端口号。
  • 在任务启动、任务全量同步阶段,不建议对源数据库做删除类型的DDL操作,比如删除数据库、索引、视图等,这样可能会引起任务同步失败。
  • 在增量数据同步过程中,如果选择了库级同步,且在增量同步过程中创建了新的无主键表或重命名已存在的无主键表,则需要在该表写入数据前执行以下命令:
    alter table schema.table replica identity full;
  • 增量同步过程中,暂不支持源数据库DDL的复制。源库新增表、删除表、修改表名、表新增列、修改列类型等DDL操作将不会同步至目标库,而且相关表的数据也将无法同步至目标库。
    注意:

    DRS使用test_decoding逻辑解码插件进行增量数据同步,在配置全量+增量任务之前,请确保源端PostgreSQL实例上安装了test_decoding插件。

环境要求

实时同步对环境有一些特定的要求,请确保环境配置满足以下条件。该类型的要求系统会自动检查,并给出处理建议。
表2 环境要求

类型名称

使用限制(DRS自动检查)

数据库权限设置

  • 全量同步最小权限要求:
    • 源数据库帐户需要具备数据库的CONNECT权限,模式的USAGE权限,表的SELECT权限,PostgresSQL10.0以下的版本还需要序列的SELECT权限,无主键表还需要表的UPDATE、DELETE和TRUNCATE权限(仅用于进行短暂的无主键表锁表操作)。
    • 目标库GaussDB(for openGauss)账户需要具备DATABASE的CREATE、CONNECT权限,SCHEMA的CREATE、USAGE权限以及SCHEMA下所有表的DML权限。
  • 全量+增量同步最小权限要求:
    • 源数据库帐户需要具备REPLICATION权限,数据库的CONNECT权限,模式的USAGE权限,表的SELECT权限,PostgresSQL10.0以下的版本还需要序列的SELECT权限。
    • 目标库GaussDB(for openGauss)账户需要具备DATABASE的CREATE、CONNECT权限,SCHEMA的CREATE、USAGE权限以及SCHEMA下所有表的DML权限。

同步对象约束

  • 全量同步时支持表、普通索引、主键与唯一约束、数据的同步,增量同步时支持表的实时同步。
  • 不支持同步源库中的临时表。
  • 表中必须包含以下数据类型:

    tinyint、smallint、int、bigint、numeric、decimal、char、bpchar、varchar、varchar2、nvarchar2、text、date、time、timetz、timestamp、timestamptz、interval、smalldatetime。

  • 不支持xml、line类型同步。
  • 源库中的无日志表(UNLOGGED TABLE)进入增量期间后,将无法同步增量数据到目标库。
  • 分区表、继承表将转换为普通表同步到目标库中。
  • 不同步数据库中的系统模式,包括:“pg_”开头的任何模式、“information_schema”。

源数据库要求

  • 源数据库库名不支持如下字符:“+”、“%”、“"”、“'”、“\ ”、“<”和“>”,模式名和表名不支持“"”和“.”,列名不支持如下字符:“"”和“'”。
  • 源数据库的“pg_hba.conf” 文件中包含如下的配置:
    host replication all 0.0.0.0/0 md5
  • 源数据库参数max_wal_senders和max_replication_slots必须大于0。
  • 源数据库参数hot_standby和full_page_write必须开启。
  • 源数据库参数max_prepared_transactions需要比目标数据库小。
  • 源数据库参数max_worker_processes需要比目标数据库小。
  • 源数据库参数max_locks_per_transaction需要比目标数据库小。
  • 源数据库参数max_connections需要比目标数据库小。
  • 源数据库参数wal_level必须配置为logical。
  • 源数据库和目标数据库的lc_monetary参数值必须一致。
  • 源数据库中同一个数据库下的触发器名称必须唯一。
  • 源数据库中无主键表的REPLICA IDENTITY属性必须为FULL。
  • 源库不支持低于PostgreSQL 9.4的版本。
  • 建议将源数据库参数wal_keep_segments 值至少配置为(源库大小×5%÷16),如果源库业务较繁忙则应相应的增加该值。

目标数据库要求

  • 目标库必须是本云GaussDB(for openGauss)分布式版实例。
  • 目标数据库实例的运行状态必须正常。
  • 目标数据库实例必须有足够的磁盘空间。
  • 目标数据库的字符集必须与源数据库一致。
  • 目标数据库的时区设置必须与源数据库一致。
  • 增量同步的表要禁用外键,因为DRS并行回放会使得不同表之间的写入顺序和源库不一致,可能会触发外键约束限制,造成同步失败。
分享:

    相关文档

    相关产品

close