凯发k8国际娱乐官网入口-k8凯发> 数据复制服务 drs> 常见问题> > drs实时同步支持使用online ddl工具吗
更新时间:2023-04-25 gmt 08:00

drs实时同步支持使用online ddl工具吗-凯发k8国际娱乐官网入口

使用场景

mysql为源的迁移或同步任务,在增量阶段使用第三方拷表方式实现的online ddl工具(如pt-osc、gh-ost)在源库执行ddl,会先创建临时表,通过临时表做ddl,针对这个情况,使用drs进行迁移或同步时,可分为以下三种场景:

  • 对于库级和实例级迁移、同步任务,由于online ddl使用的临时表在同步列表中,drs会自动同步ddl操作,因此不需要特殊处理。
  • 对于表级迁移或同步任务,如果创建drs任务时,迁移或同步对象列表中已经提前添加了第三方online ddl涉及的临时表的场景,drs也会自动同步ddl操作,不需要特殊处理。
  • 对于表级迁移或同步任务,如果创建drs任务时,只选中表的数据,由于online ddl使用的临时表不在选中的列表中,因此不会被drs同步。可以参考以下使用限制操作步骤,通过手动在目标库执行ddl的方式,避免源库online ddl操作导致的源库和目标库表结构不一致,引起的drs任务失败。

使用限制

  • 本方案为不能使用drs库级或实例级迁移、同步的场景下的替代方案,建议优先选择库级和实例级,尽量避免使用本方案。
  • 不同ddl语句,在源库和目标库的操作顺序不同,请严格参照操作步骤中的顺序执行,避免因为执行顺序错误导致drs任务失败。
  • 在源库和目标库执行的ddl语句要语义一致,包括但不限于对象名、列类型、长度等要相同或兼容。

操作步骤

  1. 查看drs任务状态,确认任务状态为增量中且增量时延在10秒以内。
  2. 确认需要执行的ddl操作,不同操作在源库和目标库执行的顺序不同。
    • 加列:先在目标库执行,执行成功后在源库执行。
    • 删列:先在源库执行,执行成功后在目标库执行。
    • 增加、修改、删除列默认值:跟操作顺序无关。
    • 修改列类型:先在目标库执行,执行成功后在源库执行。
    • 修改字符集:先在目标库执行,执行成功后在源库执行。
    • 修改列名:先在源库执行,执行成功后等待drs任务因列不存在失败,然后在目标库执行,续传drs任务。
    • 加分区:先在目标库执行,执行成功后在源库执行。
    • 删分区:先在源库执行,执行成功后在目标库执行。
    • 加索引:跟操作顺序无关。
    • 删索引:跟操作顺序无关。
    • 加约束(主键、唯一键、check等):先在源库执行,执行成功后在目标库执行。
    • 删约束(主键、唯一键、check等):先在目标库执行,执行成功后在源库执行。
    • 增加字段长度:先在目标库执行,执行成功后在源库执行。
    • 减少字段长度:先在源库执行,执行成功后在目标库执行。

    如果一条ddl中包含多个操作的,所有操作除去跟操作顺序无关的操作外(比如修改默认值),剩余操作的要求顺序一样,则按要求顺序操作;否则需要拆成多条ddl操作。如加列的同时修改默认值,先在目标库执行,执行成功后在源库执行。

    表1 总结

    ddl操作

    操作顺序

    加列,修改列类型,修改字符集,加分区,删约束,增加字段长度

    先在目标库执行,执行成功后在源库执行。

    删列,删分区,加约束,减少字段长度

    先在源库执行,执行成功后在目标库执行。

    增加、修改、删除列默认值,加索引,删索引

    跟操作顺序无关。

    修改列名

    先在源库执行,执行成功后等待drs任务因列不存在失败,然后在目标库执行,续传drs任务。

  3. 根据2顺序中完成ddl操作后,查看drs任务状态是否正常。
分享:

more

网站地图