为最大化地减少数据迁移对业务的影响,您可以参照本文的流程执行业务切换并建立回退方案。
前提条件
已配置数据迁移任务,且数据迁移任务处于迁移中或已完成状态,配置案例请参见迁移方案概览。
注意事项
由于执行业务切换操作需要停止数据库写入并暂停业务,请选择业务低峰期操作以降低影响。
为便于区分会话信息以及提升数据安全性,建议单独创建并授权一个数据库账号以供数据迁移使用。
操作步骤
等待数据迁移任务的进度变更为增量迁移,并显示为无延迟状态或延迟时间低于5秒。
说明如果数据迁移任务在配置时未勾选增量数据迁移,进度条不会变更为增量迁移,且迁移完成后会自动结束任务。此类情况通常约定在执行数据迁移任务之前将业务中断并停止新的数据写入源数据库,所以请直接跳转至步骤5继续操作。
将业务暂时中断,禁止新的数据写入源数据库。
登录源数据库,根据数据库类型选择下述命令查看会话信息,确保没有新的会话执行写入操作。
MySQL
show processlist;
SQL Server
select * from sys.dm_exec_connections;
Oracle
select sid,serial#,username,program,machine,status from v$session;
PostgreSQL
select * from pg_stat_activity;
Redis
CLIENT LIST
MongoDB
use admin db.runCommand({currentOp: 1, $all:[{"active" : true}]})
说明上述语句查询到的进程或会话信息中,包含DTS连接源数据库的进程或会话。
等待迁移任务的增量迁移再次进入无延迟状态,保持1分钟或以上,然后手动暂停迁移任务。
警告当迁移任务处于暂停期间时,请不要随意启动任务,否则可能会导致数据不一致。
保持业务中断状态,取消源数据库禁止写入的限制。
创建反向数据迁移任务并启动,用于将目标库后续产生增量数据迁移回源数据库。此步骤创建的反向迁移任务的作用是为业务提供回退方案,业务恢复运行后,一旦出现异常可将业务切换至原有的数据库中。
例如原先是将自建MySQL迁移至RDS MySQL,反向数据迁移任务配置案例请参见从RDS MySQL迁移至自建MySQL(仅选择增量数据迁移)。
警告在配置反向数据迁移任务时,在设置迁移类型及列表环节仅需选择增量数据迁移,然后选择需要迁移回源数据库的库或表。
当业务成功切换至目标库后,手动结束或释放该DTS迁移任务。
由于创建的反向迁移任务会将目标库产生的增量数据实时迁移回源库,如果业务运行出现问题,可随时将业务切换回源库。
后续步骤
业务切换至目标数据库并稳定运行一段时间,测试所有业务涉及的功能并确认无问题,可结束反向数据迁移的任务,详情请参见结束数据迁移任务。
用于数据迁移的数据库账号拥有读写权限,为保障数据库安全性,请在数据迁移完成后,删除用于数据迁移的数据库账号或回收相关写权限。
常见问题
Q:业务切换后,如果业务运行出现问题如何处理?
A:由于创建的反向迁移任务会将目标库产生的增量数据实时迁移回源库,如果业务运行出现问题,可随时将业务切换回源库。
Q:业务切换失败后,源库如何保证数据一致性?
A:您可以在业务切换前备份源库。
Q:业务切换后,由于误操作导致在源数据库中写入了新的数据,应该如何处理?
A:通过数据校验确认源和目标库的差异数据,进行手动订正。