操作场景
DTS 支持迁移的高级对象有函数、触发器、存储过程和事件。高级对象的迁移是一次性动作,仅支持迁移在任务启动前源库中已有的高级对象,在任务启动后,源库新增的高级对象不会同步到目标库中。
说明
当前支持高级对象迁移的场景为 MySQL、TDSQL-C MySQL、MariaDB、Percona 之间的数据迁移。
适用范围
仅对 NewDTS 的数据迁移。
注意事项
迁移高级对象时,建议不要进行库表重命名操作,否则可能会导致迁移高级对象失败。
高级对象迁移失败并不会影响整个迁移任务,所以整个迁移任务成功不能保证高级对象也迁移成功,建议用户在迁移完成后,自行在进度详情页查看高级对象是否迁移成功。
在迁移存储过程和函数时,DTS 会检查源库中
DEFINER
对应的 user1( [DEFINER = user1])和迁移账号 user2 是否一致,如果不一致,迁移后 DTS 会修改 user1 在目标库中的 SQL SECURITY
属性,由 DEFINER
转换为 INVOKER
( [INVOKER = user1]),同时设置目标库中 DEFINER
为迁移账号 user2([DEFINER = 迁移账号 user2])。存储过程和函数,在“源库导出”阶段进行迁移;触发器和事件,没有增量任务,在任务结束时进行迁移,有增量任务,在用户单击完成操作后开始迁移,所以单击完成后任务的过渡时间会长一些。
对于跨版本的迁移,如果源库中高级对象设置的 sql_mode,目标库不支持,高级对象迁移到目标库后会将 sql_mode 改为
NO_AUTO_VALUE_ON_ZERO
。迁移触发器和事件时,需要对迁移账号授权源库的 TRIGGER 和 EVENT 权限。
如果勾选的高级对象定义中存在
'''
(转义),会碰到 MySQL 自身限制,从而导致迁移任务失败,建议不要勾选这类高级对象。操作步骤
1. 在 数据迁移任务 的设置迁移选项及选择迁移对象页面,设置高级对象功能。 默认不勾选高级对象,如果需要迁移,请用户自行选择。
![](https://qcloudimg.tencent-cloud.cn/image/document/ebdd9879545078112c691e45ea0303fa.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/ebdd9879545078112c691e45ea0303fa.png)
2. 校验任务中会增加高级对象的检查项,具体请参考 高级对象检查。
![](https://qcloudimg.tencent-cloud.cn/image/document/f3f2eefbc95e9680aceecb890c11af22.png)
![](https://qcloudimg.tencent-cloud.cn/image/document/f3f2eefbc95e9680aceecb890c11af22.png)