DRS实时同步支持使用Online DDL工具吗
使用场景
MySQL为源的迁移或同步任务,在增量阶段使用第三方拷表方式实现的Online DDL工具(如PT-OSC、GH-OST)在源库执行DDL,会先创建临时表,通过临时表做DDL,针对这个情况,使用DRS进行迁移或同步时,可分为以下三种场景:
使用限制
- 本方案为不能使用DRS库级或实例级迁移、同步的场景下的替代方案,建议优先选择库级和实例级,尽量避免使用本方案。
- 不同DDL语句,在源库和目标库的操作顺序不同,请严格参照操作步骤中的顺序执行,避免因为执行顺序错误导致DRS任务失败。
- 在源库和目标库执行的DDL语句要语义一致,包括但不限于对象名、列类型、长度等要相同或兼容。
操作步骤
- 查看DRS任务状态,确认任务状态为增量中且增量时延在10秒以内。
- 确认需要执行的DDL操作,不同操作在源库和目标库执行的顺序不同。
- 加列:先在目标库执行,执行成功后在源库执行。
- 删列:先在源库执行,执行成功后在目标库执行。
- 增加、修改、删除列默认值:跟操作顺序无关。
- 修改列类型:先在目标库执行,执行成功后在源库执行。
- 修改字符集:先在目标库执行,执行成功后在源库执行。
- 修改列名:先在源库执行,执行成功后等待DRS任务因列不存在失败,然后在目标库执行,续传DRS任务。
- 加分区:先在目标库执行,执行成功后在源库执行。
- 删分区:先在源库执行,执行成功后在目标库执行。
- 加索引:跟操作顺序无关。
- 删索引:跟操作顺序无关。
- 加约束(主键、唯一键、check等):先在源库执行,执行成功后在目标库执行。
- 删约束(主键、唯一键、check等):先在目标库执行,执行成功后在源库执行。
- 增加字段长度:先在目标库执行,执行成功后在源库执行。
- 减少字段长度:先在源库执行,执行成功后在目标库执行。
如果一条DDL中包含多个操作的,所有操作除去跟操作顺序无关的操作外(比如修改默认值),剩余操作的要求顺序一样,则按要求顺序操作;否则需要拆成多条DDL操作。如加列的同时修改默认值,先在目标库执行,执行成功后在源库执行。
表1 总结 DDL操作
操作顺序
加列,修改列类型,修改字符集,加分区,删约束,增加字段长度
先在目标库执行,执行成功后在源库执行。
删列,删分区,加约束,减少字段长度
先在源库执行,执行成功后在目标库执行。
增加、修改、删除列默认值,加索引,删索引
跟操作顺序无关。
修改列名
先在源库执行,执行成功后等待DRS任务因列不存在失败,然后在目标库执行,续传DRS任务。
- 根据2顺序中完成DDL操作后,查看DRS任务状态是否正常。