本文介绍当迁移的目标库类型为 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 的迁移或同步。 |
待迁移或同步的表需具备主键或唯一非空约束,且字段具有唯一性,否则可能会导致数据不一致。 |
如需进行增量迁移或同步,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
- 如仅执行全量迁移或初始化,请勿向源实例中写入新的数据,否则会导致源和目标数据不一致。为实时保持数据一致性,建议同时勾选结构迁移、全量迁移和增量迁移,或者结构初始化、全量初始化和增量同步。
- 由于使用 gh-ost 或 pt-online-schema-change 等在线 DDL 工具执行 DDL 操作时会生成临时表,在数据迁移或同步过程中需要注意如下几点:
- 当需要使用在线 DDL 工具执行 DDL 操作时,需要保证迁移或同步对象是整个数据库,否则会由于临时表无法同步导致 DDL 同步失败。
- 迁移或同步期间请勿使用在线 DDL 工具执行轻量 DDL 操作(如小表增加字段等),否则可能会由于 DDL 临时表存在时间过短导致 DDL 同步失败。
|
涉及外键依赖的表,需要同时迁移或同步。如果未选择外键依赖的表,将导致数据迁移或同步失败。 |
建议单任务表数量不超过 2 万,库数量不超过 1000 个。如果有大批量表需要迁移或同步,建议拆分成多个任务。 |
其他限制 | 建议源和目标库的 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 的主地址。
|