写点什么

Data Migration 运维常见问题

  • 2022 年 7 月 11 日
  • 本文字数:2449 字

    阅读完需:约 8 分钟

作者: Haaahei 原文来源:https://tidb.net/blog/201f3b3b

问题 1:

版本:DM v2.0.4/5/6


针对分库分表,可能由于唯一健导致同步失败(分表中由于程序 bug 可能存在唯一健相同的数据,如 evaluate_center)


解决


手动在下游 TiDB 中创建库表,并把唯一健改为普通索引,为了防止因应用强制引用,普通索引名字必须保持和唯一索引一致。

问题 2:

版本:DM v2.0.4/5/6


针对分库分表,采用通配符匹配可能导致非分表合并而报错,例如任务相关配置如下:


routes:route-rule-1:schema-pattern: “evaluate_center”table-pattern: “ec_evaluate_“target-schema: “evaluate_center”target-table: “ec_evaluate”route-rule-2:schema-pattern: “evaluate_center”table-pattern: “ec_questionnaire_“target-schema: “evaluate_center”target-table: “ec_questionnaire”route-rule-3:schema-pattern: “evaluate_center”target-schema: “evaluate_center”

block-allow-list:bw-rule-1:do-dbs: [“evaluate_center”]do-tables:- db-name: “evaluate_center”tbl-name: “ec_evaluate_“- db-name: “evaluate_center”tbl-name: “ec_questionnaire_


这会导致 ec_evaluate_ 和 ec_questionnaire_ 开头的所有表聚合到 ec_evaluate 和 ec_questionnaire 中,如非分表 ec_evaluate_config_item ,若表结构不一致则会报错,否则下游数据将会出现问题。


解决


由于 routes 不支持正则表达式,因此需要将 block-allow-list 的配置使用正则,如下:


block-allow-list:bw-rule-1:do-dbs: [“evaluate_center”]do-tables:- db-name: “evaluate_center”tbl-name: “^ec_evaluate_[0-9]+$” # 以 ec_questionnaire_ 开头,数字结尾- db-name: “evaluate_center”tbl-name: “^ec_questionnaire_[0-9]+$” # 以 ec_questionnaire_ 开头,数字结尾

问题 3:

版本:DM v2.0.4/5/6


在全量同步时,可能由于全量导出导入太久,上游数据 binlog 被 purged


解决


开始全量导入导出前开启 relay log,见任务管理;正常同步后,为了避免磁盘对同步性能的影响,关闭 relay log

问题 4

版本:DM v2.0.4/5/6


当上游执行更新或删除一条数据时,若下游不存在这条数据,DM 同步是否会报错?


答案


不会。DM 并不会判断这条数据是否存在,而是直接执行 update 或 delete 操作。

问题 5

版本:DM v2.0.4/5/6


加索引会堵塞 dml 操作,在大表加索引的时候可能会导致复制异常退出,但是会自动恢复


涉及 2.0.5 及低版本,详细见:https://asktug.com/t/topic/122844


解决


已反馈给官方,临时解决方案:小表可以直接加,影响不大;大表的话,tidb 先加索引,然后再执行 gh-ost 操作,DM 会自动处理加减索引 (及加减字段) 冲突。

问题 6

版本:DM v2.0.4/5/6


当表结构不一致时,对同步的影响:


  1. 上下游字段数不一致时 DML 同步结论 情况一:下游 TiDB 字段比上游 MySQL 多结论:不影响同步,且下游 TiDB 多的字段类型及默认值没有分库分表合并加字段的限制情况二:下游 TiDB 字段比上游 MySQL 少结论:同步会中断,可以将缺少的字段加进去,然后执行 resume-task 或者让 DM 自动恢复

  2. 下游 TiDB 字段已存在结论加字段:不影响同步,DM 会自动忽略 MODIFY:遵循 TiDB 的 DDL 限制

  3. 下游 TiDB 字段 不存在结论减字段:不影响同步,DM 会自动忽略 MODIFY:会导致同步中断,报字段不存在错误,可以将缺少的字段加进去,然后执行 resume-task 或者让 DM 自动恢复加索引:会导致同步中断,报字段不存在错误

  4. 下游 TiDB 索引 已存在结论加索引:不影响同步,DM 会自动忽略

  5. 下游 TiDB 索引 不存在结论减索引:不影响同步,DM 会自动忽略

问题 7

版本:DM v2.0.6


若上游 kill dm 相关连接,dm 会如何处理?


结论


报 connection was bad 错误,DM 会自动尝试恢复同步

问题 8

版本:DM v2.0.6


若 TiDB kill dm 相关连接,dm 会如何处理?


结论


报 invalid connection 错误,DM 会自动尝试恢复同步

问题 9

版本:DM v2.0.6


DM 发生高可用故障转移时,对 DDL 有何影响?


结论


故障一:发生 dm-master leader 选举


情况一、普通同步,DDL 操作:


  1. 发生在 leader 选举期间:ddl 正常同步到下游,对同步无影响

  2. 发生在 leader 选举前,在选举期间 ddl 操作仍未完成:ddl 正常同步到下游,对同步无影响


情况二、分库分表合并,DDL 操作:


  1. 发生在选举期间:需要 leader 选举完成,ddl 才会开始同步


dm-worker(putted a shard DDL info into etcd) -> (等待选举完成) -> dm-leader(receive a shard DDL info) -> dm-worker(got a shard DDL lock operation -> start to handle ddls in optimistic shard mode -> finish to handle ddls in optimistic shard mode)


  1. 发生在 leader 选举前,在选举期间仍有 ddl 操作未完成:需要 leader 选举完成,ddl 才会继续同步


dm-worker(putted a shard DDL info into etcd) -> dm-leader(receive a shard DDL info) -> dm-worker(got a shard DDL lock operation -> start to handle ddls in optimistic shard mode -> finish to handle ddls in optimistic shard mode) -> (等待选举完成) -> 同前步骤


故障二:发生 dm-worker 宕机


情况一、普通同步,DDL 操作


  1. 发生在任务转移期间:等待其他空闲状态 dm-worker 接管完成,ddl 会正常同步

  2. 发生在任务转移前,在任务转移期间 ddl 操作仍未完成:ddl 正常同步到下游,对同步无影响


[2021/08/19 14:05:26.002 +08:00] [WARN] [baseconn.go:177] [“execute statement failed and will ignore this error”] [task=dm_benchmark] [unit=“binlog replication”] [query=“ALTER TABLE dm_benchmark.sbtest1 ADD INDEX idx_c(c)“] [argument=”[]“] [error=“Error 1061: index already exist idx_c; a background job is trying to add the same index, please check by ADMIN SHOW DDL JOBS”]


情况二、分库分表合并,DDL 操作


  1. 发生在任务转移期间:等待其他空闲状态 dm-worker 接管完成,ddl 会正常同步

  2. 发在任务转移前,在任务转移期间 ddl 操作仍未完成:等待其他空闲状态 dm-worker 接管完成,ddl 会正常同步


发布于: 刚刚阅读数: 2
用户头像

TiDB 社区官网:https://tidb.net/ 2021.12.15 加入

TiDB 社区干货传送门是由 TiDB 社区中布道师组委会自发组织的 TiDB 社区优质内容对外宣布的栏目,旨在加深 TiDBer 之间的交流和学习。一起构建有爱、互助、共创共建的 TiDB 社区 https://tidb.net/

评论

发布
暂无评论
Data Migration运维常见问题_迁移_TiDB 社区干货传送门_InfoQ写作社区