跳到主要内容

PostgreSQL 迁移同步到 Sybase

NineData 数据复制支持将 PostgreSQL 的数据复制到 Sybase,支持全量复制和增量复制。

功能介绍

NineData 数据复制支持数据源之间的结构、全量数据、增量数据的高性能复制,对于部分数据源,还提供双向复制功能,实现快捷构建异地多活业务架构。

  • 结构:支持同构及异构数据源之间的对象结构复制,很大程度上降低了两个数据源之间的数据复制门槛。
  • 全量数据:通过智能数据分片实现行级并发批量复制能力,有效保障复制性能。自主研发的新型断点续传技术,保证无主键表的数据准确性。
  • 增量数据:支持全对象类型的 DML|DDL 增量数据复制,结合行级并发、热点合并等技术,提供强劲复制性能。
  • 双向数据实时复制:直接多个节点之间的数据双向复制,保证所有节点的数据均保持最新状态。

通过以上功能,可以轻松高效地实现全量|增量数据复制全量|增量数据迁移全量|增量数据同步数据集成不停机无缝迁移等场景,为企业提供灵活和可靠的数据复制解决方案。

前提条件

  • 已将源数据源和目标数据源添加至 NineData。如需录入 PostgreSQL 或 Sybase 数据源,请分别参见创建 PostgreSQL 数据源创建 Sybase 数据源

  • 源数据源为 PostgreSQL。

  • 目标数据源为 Sybase。

  • 已在目标数据源(Sybase)中手动创建表,该表结构必须和源数据源(PostgreSQL)中需要复制的表结构保持兼容。当前链路不支持结构复制,请参见附录一:目标表设计建议

  • 您必须拥有源数据源和目标数据源的相应权限。更细粒度的权限说明、触发器策略和授权示例,请参见PostgreSQL 与 Sybase 复制链路权限说明

    复制内容
    PostgreSQL
    Sybase
    全量复制CONNECT、SELECT目标表的 SELECT、INSERT、UPDATE、DELETE
    增量复制具备读取源端变更数据所需权限,并完成本文要求的 PostgreSQL 参数配置目标表的 SELECT、INSERT、UPDATE、DELETE;若保持默认的“复制过程中禁用目标端触发器”,还需 replication_role
  • 如需增量复制,请打开 postgresql.conf 文件配置如下参数,如果找不到该文件的位置,可以在 psql 客户端中执行 SHOW config_file; SQL 命令查看。

    • 源数据源的 wal_level 参数必须为 logical,如需确认当前值,可以直接在客户端中执行 SHOW wal_level 查看。
    • 源数据源的 wal_sender_timeout 参数设置为 0。此参数用于中断处于停滞状态超过指定毫秒数的复制连接,默认值为 60000 毫秒。设置为 0 将禁用超时机制。如需确认当前值,可以直接在客户端中执行 SHOW wal_sender_timeout 查看。
    • 源数据源的 max_replication_slots 参数必须大于 1。此参数指定服务器可以支持的最大复制槽数。默认值为 10。
    • 源数据源的 max_wal_senders 参数必须大于 1。此参数指定最大的并发连接数。默认值为 10。如需确认当前值,可以直接在客户端中执行 SHOW max_wal_senders 查看。

使用限制

  • 当前链路不支持结构复制。请先在 Sybase 中准备好目标库、目标表和必要索引。
  • 当前链路不支持列映射,目标表名和列名需与源端保持一致。
  • 当前链路支持在 配置映射 > 映射与过滤 > 字段表达式 中对已存在的目标列填写字段表达式,推荐函数见下文。
  • 当前链路不支持增量 DDL 复制。增量阶段仅同步数据变更,源端新增列、修改字段类型等结构变更需要人工处理后再继续任务。
  • 执行数据同步前需评估源数据源和目标数据源的性能,同时建议业务低峰期执行数据同步。否则全量数据初始化时将占用源数据源和目标数据源一定的读写资源,导致数据库负载上升。
  • 需要确保同步对象中的每张表都有主键或唯一约束、列名具有唯一性,否则可能会重复同步相同数据。

字段映射说明

配置映射 > 映射与过滤 > 字段表达式 中,可以为已存在的目标列配置字段表达式。

关于字段表达式的入口、使用规则和常见写法,请参见 ETL 函数说明

操作步骤

商业化通知

NineData 数据复制产品已商业化,您仍然可以保有 10 条复制任务免费使用,注意事项如下:

  • 10 条复制任务中可以包含 1 条增量复制任务,规格为 Micro
  • 状态为已终止的任务不算在 10 条任务的限制内,如果您已经创建了 10 条复制任务,还想要继续创建,可以先终止之前的复制任务,然后再创建新任务。
  • 创建复制任务时,仅可选择您已购买的复制规格,未购买的规格将以灰度显示,无法选择。如需购买,请通过页面右下角的客服图标联系我们。
  1. 登录 NineData 控制台

  2. 在左侧导航栏单击数据复制。

  3. 数据复制页面,单击右上角的创建复制

  4. 数据源与目标页签,按照下表进行配置,并单击下一步

    参数
    说明
    任务名称输入数据同步任务的名称。为了便于后续查找和管理,请尽量使用有意义的名称。最多支持 64 个字符。
    源数据源选择 PostgreSQL 源数据源。
    目标数据源选择 Sybase 目标数据源。
    目标数据库选择接收同步对象的目标数据库。
    复制类型选择全量复制进行全量复制;如需持续同步变更,请同时勾选增量复制
    目标表存量数据处理策略选择当目标表中已存在数据时的处理方式:停止任务、忽略冲突数据,或删除后重新写入。
    触发器选择是否在复制过程中执行目标端 Sybase 的触发器。默认禁用。若保持默认配置,目标端账号需要 replication_role。开启后可能因为外键、审计逻辑或业务触发器导致写入失败,请谨慎操作。
  5. 选择复制对象页签,选择需要复制的对象,然后单击下一步

    • 您可以选择全部实例复制源端所有对象,也可以选择自定义对象只复制部分对象。
    • 当前链路不支持列映射,请确保目标表名和列名与源端保持一致。
  6. 配置映射页签,确认目标库和目标表映射关系,然后单击保存并预检查

    • 系统默认优先选择目标数据源中的同名数据库;如果不存在,则需要手动选择目标数据库。
    • 当前链路不支持结构复制,请确认目标端表、列、主键和必要索引已提前创建完成。
    • 如果在配置映射阶段,源和目标数据源中有更新,可以单击页面右上角的刷新元数据按钮,重新获取源和目标数据源的信息。
  7. 预检查页签,等待系统完成预检查。预检查通过后,单击启动任务

    提示
    • 您可以勾选开启数据一致性对比。在同步任务完成后,系统会自动开启基于源数据源的数据一致性对比,保证两端数据一致。
    • 如果预检查未通过,需要单击目标检查项右侧操作列的详情,排查失败原因,手动修复后单击重新检查重新执行预检查,直到通过。
    • 检查结果警告的检查项,可视具体情况修复或忽略。
  8. 启动任务页面提示启动成功后,复制任务开始运行。此时您可以单击查看详情查看任务详情,或单击返回列表返回任务列表。

查看同步结果

  1. 登录 NineData 控制台

  2. 在左侧导航栏单击数据复制 > 数据复制

  3. 数据复制页面单击目标同步任务的任务 ID,页面说明如下。

    result_sybase

    序号
    功能
    说明
    1同步延迟源数据源和目标数据源之间的数据同步延迟,0 秒表示两端之间没有延迟,此时您可以选择将业务切换到目标数据源,实现平滑迁移。
    2配置告警配置告警后,系统会在任务失败时通过您选择的方式通知您。
    3更多
    • 暂停:暂停任务,仅状态为运行中的任务可选。
    • 类似创建:创建一个和当前任务配置相同的新复制任务。
    • 终止:结束未完成或监听中(即增量同步中)的任务,终止任务后无法重启任务,请谨慎操作。如果同步对象中包含触发器,会弹出触发器复制选项,请按需选择。
    • 删除:删除任务,任务删除后无法恢复,请谨慎操作。
    4全量复制(包含全量复制的场景下显示)展示全量复制的进度和详细信息。
    • 单击页面右侧的监控:查看全量复制过程中的各监控指标。全量复制过程中,还可以单击监控指标页面右侧的限流设置,限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看全量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    5增量复制(包含增量复制的场景下显示)展示增量复制的各项监控指标。
    • 单击页面右侧的查看线程:查看当前复制任务正在执行中的操作,包含:
      • 线程号:复制任务分多个线程执行复制操作,展示当前进行中的线程号。
      • 执行 SQL:当前线程正在执行中的 SQL 语句详情。
      • 提交响应时间:当前线程的响应时间,如果该数值变大,则代表当前线程可能由于某些原因卡住。
      • 事件时间:当前线程开启的时间戳。
      • 状态:当前线程的状态。
    • 单击页面右侧的限流设置:限制每秒写入到目标数据源的速率。单位为行/秒。
    • 单击页面右侧的日志:查看增量复制的执行日志。
    • 单击页面右侧的refresh:查看最新的信息。
    6修改对象展示同步对象的修改记录。
    • 单击页面右侧的修改同步对象,可对同步对象进行配置
    • 单击页面右侧的refresh:查看最新的信息。
    7数据对比展示源数据源和目标数据源之间对比的结果。如果您未开启数据对比,请单击页面中的开启数据对比
    • 单击页面右侧的重新对比:对当前源和目标两端数据重新发起对比。
    • 单击页面右侧的停止:对比任务开始后,可单击该按钮立即停止对比任务。
    • 单击页面右侧的日志:查看一致性对比的执行日志。
    • 单击页面右侧的监控(仅数据对比显示):查看对比 RPS(每秒对比的记录数)的走势图。单击详情可以查看更早之前的记录。
    • 在对比列表右侧操作列单击details数据页签下只在不一致情况下显示):查看源端和目标端的对比详情。
    • 在对比列表右侧操作列单击sql(不一致情况下显示):生成变更 SQL,您可以直接复制该 SQL 到目标数据源执行,修改不一致的内容。
    8展开展示当前复制任务的详细信息。

附录一:目标表设计建议

由于 PostgreSQL 到 Sybase 的复制当前不支持结构复制,建议您先根据业务需要手动在 Sybase 中创建目标表。

常见数据类型映射

PostgreSQL 数据类型Sybase 推荐类型说明
SMALLINTSMALLINT可直接映射。
INTEGER / INT4INT可直接映射。
BIGINT / INT8BIGINT可直接映射。
NUMERIC(p,s) / DECIMAL(p,s)DECIMAL(p,s)建议保持精度和小数位一致。
REALREAL可直接映射。
DOUBLE PRECISIONDOUBLE PRECISION如业务允许,也可按精度要求调整。
BOOLEANBIT建议在应用和 SQL 中统一 0 / 1 语义。
CHAR(n) / VARCHAR(n)CHAR(n) / VARCHAR(n)长度通常可直接沿用。
TEXTTEXT / UNITEXT长文本建议优先考虑 UNITEXT
BYTEAVARBINARY / IMAGE大对象二进制数据建议评估是否使用 IMAGE
DATEDATE可直接映射。
TIMESTAMPDATETIME / BIGDATETIME如果需要更高时间精度,建议使用 BIGDATETIME
TIMETIME / BIGTIME根据精度要求选择。
UUIDCHAR(36) / VARCHAR(36)建议以字符串方式存储。
JSON / JSONBUNITEXT / VARCHAR建议按字符串或文本内容存储。

建表建议

  • 目标端表名和列名尽量与源端保持一致,避免因为当前链路不支持列映射而无法通过预检查。
  • 建议提前创建主键、唯一约束和必要索引,保证后续增量写入和数据对比稳定。
  • 如果目标表中存在触发器,请先确认是否需要在复制过程中执行这些触发器;默认禁用更稳妥。
  • 如果目标表包含 identity、自增列或审计列,请先在测试环境验证全量初始化和增量回放是否符合业务预期。

附录二:预检查项一览表

检查项检查内容
目标库同名对象存在性检查检查待复制对象在目标数据库中是否已存在。
源数据源连接检查检查源数据源网关状态、实例是否可达、用户名及密码准确性。
目标数据源连接检查检查目标数据源网关状态、实例是否可达、用户名及密码准确性。
目标库权限检查检查目标数据库账号权限是否满足要求。
源库权限检查检查源数据库账号权限是否满足要求。
目标库数据存在性检查检查待复制对象在目标数据库中是否已存在数据。
检查 wal_level检查源数据源的 wal_level 是否为 logical
检查 max_wal_senders检查 max_wal_senders 是否满足复制连接数要求。
检查 max_replication_slots检查 max_replication_slots 是否满足复制槽数量要求。

相关文档