TiDB Data Migration 兼容性目录
TiDB Data Migration (DM) 数据迁移工具可以将数据从不同类型的数据源迁移到 TiDB 集群。针对各种数据源类型,DM 定义了以下四种兼容性级别:
- 正式支持 (GA):该场景已经过验证,并且通过了完整的测试流程。
- 实验支持:常见的应用场景已验证,但覆盖范围有限,或仅涉及少量用户。可能会偶发问题,因此需要在你的具体场景中验证兼容性。
- 未测试:DM 尽量保证兼容 MySQL 协议和 binlog,但并非所有 MySQL 分支或版本都包含在 DM 的测试矩阵中。如果某个分支或版本使用了与 MySQL 兼容的协议和 binlog 格式,理论上应能正常工作,但在使用前必须在你自己的环境中验证兼容性。
- 不兼容:DM 存在已知不兼容的情况,不建议在生产环境中使用。
数据源
外键 CASCADE 操作
从 v8.5.6 开始,DM 以实验特性支持同步包含外键约束的表。该支持包括以下改进:
- 安全模式:在安全模式执行期间,DM 会在每个批次中设置
foreign_key_checks=0,并对未修改主键或唯一键值的UPDATE语句跳过冗余的DELETE步骤。这可以防止REPLACE INTO(其内部执行为DELETE+INSERT)在子表行上触发非预期的ON DELETE CASCADE效果。详情参见 DM 安全模式。 - 多 worker 因果关系:当
worker-count > 1时,DM 会在任务启动时从下游 schema 中读取外键关系并注入因果键。这可确保父表行的 DML 操作先于其依赖的子表行操作完成,从而在多个 worker 之间保持 binlog 顺序。
同步包含外键约束的表存在以下限制:
- 在安全模式下,DM 不支持修改主键或唯一键值的
UPDATE语句。任务会暂停,并报错:safe-mode update with foreign_key_checks=1 and PK/UK changes is not supported。如需同步此类语句,请将safe-mode设置为false。 - 当
foreign_key_checks=1时,DM 不支持在同步过程中执行创建、修改或删除外键约束的 DDL 语句。 - 当
worker-count > 1时,不支持表路由。如果对包含外键的表使用表路由,请将worker-count设置为1。 - 黑白名单过滤 (Block & Allow List) 必须包含外键依赖链中的所有祖先表。如果祖先表被过滤,在增量复制期间任务会报错并暂停。
- 源端与下游的外键元数据必须保持一致。如果检测到不一致,请运行
binlog-schema update --from-target以重新同步元数据。 - 当
UPDATE修改主键或唯一键值时,安全模式下无法正确同步ON UPDATE CASCADE。这是因为 DM 会将此类语句改写为DELETE+REPLACE,从而触发ON DELETE行为而不是ON UPDATE行为。在这种情况下,DM 会拒绝该语句并暂停任务。未修改键值的UPDATE语句可以被正确同步。
在 v8.5.6 之前的版本中,DM 会在下游创建外键约束,但由于其将会话变量 foreign_key_checks=OFF,这些约束不会被强制执行。因此,级联操作不会被同步到下游。
MariaDB 说明
- 对于 MariaDB 10.5.11 及更高版本,由于权限名称发生变化(例如
BINLOG MONITOR、REPLICATION SLAVE ADMIN、REPLICATION MASTER ADMIN),DM 前置检查会失败。报错信息显示为[code=26005] fail to check synchronization configuration,出现在复制权限、导出权限和导出连接数检查中。 - 你可以通过在 DM 任务中添加
ignore-checking-items: ["all"]来绕过前置检查。详情参见 DM 前置检查。