同步Online DDL
同步Online DDL的适用场景
源端和目标端表结构和数据均希望保持完全一致的情况。
Online DDL工作机制
若在源端进行Online DDL操作,会创建临时表、变更临时表结构、并将原始表的全量数据拷贝到临时表,最后会使用 rename 命令将临时表切换成新的业务表。用gh-ost, pt-osc, DMS SQL上线的功能可能会产生Online DDL的行为。
由于该工作机制,在通过DTS进行增量迁移时,若在源端进行Online DDL操作,可能会出现如下风险。
同步Online DDL可能存在的风险
1) 目标端空间容量不够导致Online DDL同步失败 通过DTS进行增量迁移任务时,在源端进行Online DDL同步操作后,数据同步结束之前需要在目标端同时保存两份数据,即需两倍数据量的空间。若目标端空间容量小于两倍数据量的大小,则会同步失败。
2) 在不恰当的应用场景下同步Online DDL造成目标端数据丢失
- 多表归并任务中执行Online DDL操作导致目标端数据丢失 通过DTS进行多表归并任务时,若在源端进行Online DDL操作,对源端的表结构等进行了调整修改。同步到目标端时,会出现数据丢失的情况。
多表归并任务指将不同源端的表进行归并,继而同步迁移到目标端。
例如:当用户配置了从源端1 DRDS MySQL和源端2 DRDS MySQL到目标端DRDS MySQL的多表归并任务,则数据迁移的逻辑如下:
源端1的表A1迁移至目标端表。
源端2的表A2迁移至目标端表。
假设源端1的学生信息表A1中有2条记录,源端2的学生信息表A2中有2条记录。则多表归并后,目标端学生信息表中应有4条记录。
若在源端2的学生信息表A2中进行Online DDL操作,修改列名字段【ID】为【StudentID】。同步到目标端,会导致源端2的学生信息表A2更新后的数据替换了目标端学生信息表的数据,源端1的学生信息表A1的2条数据就会丢失,如下图所示。
- 执行Online DDL操作目标端表结构与源端不一致导致目标端数据丢失 通过DTS进行增量迁移任务时,在源端进行Online DDL同步操作后,目标端表中的数据被源端表中的数据完全替换。若目标端的表结构和源端不一致,表结构差异部分(包括差异部分的全部数据)会丢失。
例如:在目标端数据库学生信息表增加了新列【GPA】。源端学生信息表进行同步Online DDL操作,修改列名字段【ID】为【StudentID】,同步到目标端会导致目标端学生信息表中新增的【GPA】列数据丢失。