You need to enable JavaScript to run this app.
文档中心
数据库传输服务

数据库传输服务

复制全文
下载 pdf
约束和限制
约束和限制(MySQL)
复制全文
下载 pdf
约束和限制(MySQL)
本文介绍当迁移的目标库类型为 MySQL(如火山引擎版 MySQL 或自建 MySQL)时,支持的数据库以及使用限制详情。​
支持的数据库​
​
源库​
目标库​
支持版本​
迁移类型​
同步类型​
  • 火山引擎版 MySQL​
  • 火山引擎版 veDB MySQL​
  • 公有网络 MySQL​
  • 专有网络 MySQL​
  • 火山引擎版 MySQL​
  • 火山引擎版 veDB MySQL​
  • 公有网络 MySQL​
  • 专有网络 MySQL​
  • MySQL 5.5​
  • MySQL 5.6​
  • MySQL 5.7​
  • MySQL 8.0​
  • 结构迁移​
  • 后置结构迁移​
  • 全量迁移​
  • 增量迁移​
  • 用户迁移​
  • 结构初始化​
  • 全量初始化​
  • 增量同步​
​
使用限制​
​
类型​
说明​
源库限制​
  • 带宽要求:源库所属的服务器需具备足够出口带宽,否则将影响数据迁移或同步速率。​
  • 支持 InnoDB 和 MyISAM 引擎,暂不支持 MariaDB 的迁移或同步。​
  • 将 MyISAM 存储引擎转换为 InnoDB 存储引擎时,暂不支持分区表。​
  • 待迁移或同步的表需具备主键或唯一非空约束,且字段具有唯一性,否则可能会导致数据不一致。​
  • 如需进行增量迁移或同步,Binlog 日志需满足以下需求:​
  • 需开启,并且 binlog_format 为 row,binlog_row_image 为 full。否则会导致预检查阶段提示报错,从而导致无法成功启动数据迁移或同步任务。​
  • 至少保留 24 小时(建议 7 天以上)。否则当链路由于不可控因素中断,可能由于 Binlog 的缺失导致链路无法恢复。​
  • 用于数据迁移或同步的账号需具备以下权限:​
  • 结构迁移、全量迁移或结构初始化、全量初始化:所有待迁移对象的 SELECT 权限。​
  • 增量迁移或同步:REPLICATION SLAVER、REPLICATION CLIENT 及所有待迁移或同步对象的 SELECT 权限。​
  • gtid_mode 限制:在源库的实例版本大于等于 5.6 时,需设置参数 gtid_mode 为 ON。​
说明​
当 MySQL 的版本小于 8.0 且未开启参数 gtid_mode 时,可能会在数据迁移或同步过程中导致外键级联删除失败,从而造成数据差异。​
  • 源库的操作限制:​
  • 在链路创建、库表结构迁移或初始化,以及全量迁移或初始化阶段,请勿执行库或表结构变更的 DDL 操作,否则数据迁移或初始化任务会失败。​
  • 增量迁移或同步阶段仅支持如下 DDL 操作:​
  • ALTER TABLE、ALTER VIEW​
  • CREATE FUNCTION、CREATE INDEX、CREATE PROCEDURE、CREATE TABLE、CREATE VIEW​
  • DROP INDEX、DROP TABLE、DROP FUNCTION、DROP PROCEDURE​
  • RENAME TABLE​
  • TRUNCATE TABLE​
  • 如仅执行全量迁移或初始化,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议同时勾选结构迁移、全量迁移和增量迁移,或者结构初始化、全量初始化和增量同步。​
  • 涉及外键依赖的表,需要同时迁移或同步。如果未选择外键依赖的表,将导致数据迁移或同步失败。​
  • 建议单任务表数量不超过 2 万,库数量不超过 1000 个。如果有大批量表需要迁移或同步,建议拆分成多个任务。​
DDL 限制​
  • 操作限制​
  • 通用规则​
  • 初始化阶段禁止 DDL:在链路创建、结构初始化、全量同步过程中,禁止执行 DDL,否则任务将失败。​
  • 当目标端有业务写入时,在源端执行 DDL 可能会导致数据丢失,例如:​
  • 单向同步任务:在单向增量同步任务中,当业务流量完成切换(即写入已迁移至目标端)后,严禁在源端执行 DDL 操作,否则可能导致目标端数据丢失或结构不一致的严重后果。此时若要进行 DDL 操作,需在目标端执行,源端仅用于同步回溯或只读查询。​
  • 双向同步任务:若两边的数据库有业务写入时,在任何一边执行 DDL,可能都会导致目标端数据丢失或结构不一致。​
说明​
由于使用 gh-ost 或 pt-online-schema-change 等在线 DDL 工具执行 DDL 时会生成临时表,在临时表的 Rename、Drop 等操作期间目标端写入的数据会丢失。​
  • OnlineDDL 支持范围:​
  • DDL 同步期间禁止向目标库写入数据,否则可能造成数据丢失。​
  • DTS 支持同步以下临时表(需确保目标库有写权限):​
  • gh-ost:_原表名_ghc、_原表名_gho、_原表名_del、tp_{变更ID}_ogt_{原表名}、tp_{变更ID}_g_{原表名} tp_{变更ID}_del_{原表名}、tp_{变更ID}_d_{原表名}。​
  • pt-osc:_原表名 _new、_原表名 _old。​
  • 表映射(重命名)功能与 OnlineDDL 临时表同步互斥,二者只能启用其一。​
  • 避免频繁 DDL:频繁对同一张表执行 DDL 可能导致 DTS 元数据更新失败,存在断流风险。您可以通过以下方式规避:​
  • 控制台操作 DDL 的操作至少间隔 1~3 秒。​
  • 跨库 DDL 限制:若某数据库未被纳入同步对象,则不能对该库执行影响已同步库的 DDL(如跨库视图、外键等),否则同步任务会失败。​
  • 当前仅支持正向任务的 DDL 同步到目标库,不自动同步反向 DDL。如需同步反向 DDL,应先调整 DDL 同步方向,再执行操作。详细操作,请参见调转双向同步任务的 DDL 同步方向。​
  • 特殊限制​
  • 必须保证表结构向前兼容 DDL 列表:仅允许包括 CREATE TABLE、ADD COLUMN、MODIFY COLUMN(仅限扩大字段长度)、CREATE INDEX 和 DROP INDEX 的安全操作。​
  • 禁止操作:修改字段类型、删除列、缩减字段长度等,否则将导致数据不一致或同步断流。​
其他限制​
  • 建议源和目标库的 MySQL 版本保持一致,以保障兼容性。​
  • 执行数据迁移或同步前需评估源库和目标库的性能,同时建议在业务低峰期执行数据迁移或同步。否则全量迁移或初始化时,DTS 会占用源库和目标库一定的读写资源,可能会导致数据库的负载上升。​
  • 迁移或同步过程中目标库可能产生会大量 Binlog 文件,在有全量迁移或初始化的场景下,产生的 Binlog 文件甚至可能比数据文件还大。因此,建议在开始迁移或初始化前,请先为目标库设置合理的 Binlog 保留策略,以避免 Binlog 文件占用过多存储空间。​
  • 有库表名映射的迁移或同步任务,存储过程、函数迁移或同步后映射不一定生效。​
  • 同时包含结构迁移和增量迁移的迁移任务,或者同时包含结构初始化和增量同步的同步任务,触发器会在任务终止后进行迁移或同步。​
  • 目标 MySQL 库的迁移账号权限,会影响视图、存储过程、函数的使用,具体限制如下:​
  • 若目标 MySQL 库的迁移账号具有 SET_USER_ID 权限:​
  • 视图、存储过程、函数会保持原来的 definer 和 sql_security。​
  • 需要先完成账号迁移任务或手动在目标库创建对应账号后,视图、存储过程、函数才能正常使用。​
  • 若目标 MySQL 库的迁移账号不具有或不支持 SET_USER_ID 权限:​
  • 视图、存储过程、函数迁移后,definer 将会替换为迁移账号。​
  • sql_security 会设置为 invoker。​
说明​
仅 MySQL 8.0 支持设置 SET_USER_ID 权限。​
  • 任务时间暂停不能超过 7 天,超过 7 天任务将无法恢复。​
  • 若源库为 MySQL 8.0 版本,在配置迁移或同步任务时,需要您手动对如下账号直接授予数据迁移的相关权限:​
  • 源库或目标库的账号是通过 Role 进行相关权限授权的。​
  • 需要进行用户迁移的账号是通过 Role 进行相关权限授权的。​
  • 仅支持迁移或同步如下对象:​
  • 迁移对象:表、视图、存储过程、函数、触发器、事件。​
  • 同步对象:表、视图、存储过程、函数。​
特殊情况​
  • 迁移或同步时 RDS 源库进行主备切换,会导致迁移或同步任务失败。如果迁移或同步时 RDS 源库执行了重启操作,迁移或同步任务会暂时中断并自动尝试修复。如果任务长时间没有恢复,请提交工单联系技术支持。​
  • 由于 DTS 的延迟时间是根据迁移或同步到目标库最后一条数据的时间戳和当前时间戳对比得出,源库长时间未执行 DML 操作可能导致延迟信息不准确。如果任务显示的延迟时间过大,您可以在源库执行一个 DML 操作来更新延迟信息。​
说明​
如果迁移或同步对象选择为整库,您还可以创建心跳表,心跳表每秒定期更新或者写入数据。​
  • 若目标库为火山引擎版 MySQL,且在配置迁移或同步任务时目标库使用的是高权限账号,DTS 会自动在火山引擎版 MySQL 目标库中创建数据库。如果待迁移或同步的数据库名称不符合火山引擎版 MySQL 的定义规范,您需要在配置迁移任务之前在火山引擎版 MySQL 中创建数据库。​
  • 当源库是阿里云 PolarDB MySQL,在配置迁移任务时,源端需开启 Binlog 功能,并且确保您使用的是 PolarDB MySQL 的主地址。​
​
在创建双向同步任务时,您需要关注以下信息:​
  • 数据写入与冲突控制​
  • 单点写入原则:对于具有相同主键、业务主键或唯一键的记录,仅允许在一个节点(源端或目标端)进行更新。​
  • 若两端同时更新,系统将依据任务中配置的主键冲突处理策略自动变更数据。​
  • 建议从业务层设计上避免双写同一主键数据。​
  • 禁止向目标库写入非 DTS 数据:同步期间,不得通过应用、脚本或其他工具向目标库写入数据,否则可能导致主键冲突或数据覆盖。​
  • 网络与拓扑建议​
  • 出云链路性能风险:若同步涉及火山引擎到公有云(出云),可能因网络带宽或延迟导致性能瓶颈,不建议直接创建双向同步任务。​
  • 双向任务需分别配置:双向同步由两个独立的单向任务(正向任务 + 反向任务)组成,需分别配置并确保过滤规则、冲突策略一致。​
​
​
​
最近更新时间:2026.03.16 16:04:09
这个页面对您有帮助吗?
有用
有用
无用
无用