-
Notifications
You must be signed in to change notification settings - Fork 1
2.快速上手
数据迁移可以帮助您实现线下、ECS上和Squids RDS数据源之间的数据迁移,适用于数据上云迁移、squids跨云实例间数据迁移等业务场景。本文介绍数据迁移功能的使用流程,帮助您快速掌握创建、管理数据迁移任务的操作。
通常,使用数据传输服务DBMotion执行数据迁移的操作,您需要经历如下步骤。 迁移前准备工作->新建并配置迁移任务->查看任务执行情况->业务切换并结束迁移
数据迁移流程图
操作流程 | 说明 |
---|---|
1.迁移前准备工作 | 在使用DBMotion迁移数据前,您需要对源或目标数据库做一些准备工作,以满足迁移服务对环境的要求。 |
2.新建并配置迁移任务 | 您只需在控制台上进行简单操作,即可完成迁移任务的配置。 |
3.查看任务执行情况 | 您可以通过控制台查看结构迁移、全量数据迁移、增量数据迁移和数据校验的具体进度。 |
4.业务切换并结束迁移 | 在目标端数据库验证业务可用后,可以结束迁移释放资源 |
介绍数据迁移功能支持的数据库、数据库版本和迁移类型。
数据迁移功能帮助您实现线下、ECS上和Squids RDS数据源之间的数据迁移,适用于数据上云迁移、squids跨云实例间数据迁移等业务场景。本文将介绍数据迁移功能支持的数据库、版本和迁移类型,以及具体的配置文档。
迁移类型 | 说明 |
---|---|
库表结构迁移 | 数据迁移功能将源库中待迁移对象的结构定义迁移至目标库(例如表、视图、触发器、存储过程等)。 |
全量数据迁移 | 数据迁移功能将源库中待迁移对象的存量数据,全部迁移到目标库中。如果在配置数据迁移任务时,仅选择了结构迁移和全量数据迁移,那么在迁移过程中,源库的新增数据不会被迁移至目标库。 说明 为保障数据一致性,迁移期间请勿在源库中写入新的数据。如需实现不停机迁移,您需要在配置数据迁移任务时,同时选择结构迁移、全量数据迁移和增量数据迁移。 |
增量数据迁移 | 数据迁移功能会先在源库中实现用于全量数据迁移的静态快照,然后将快照数据迁移到目标库,最后再将迁移过程中源库产生的增量数据实时同步至目标库。 说明 增量数据迁移会保持实时同步的状态,所以迁移任务不会自动结束,您需要手动结束迁移任务。 |
数据迁移功能支持以下数据库使用场景迁移方案,您可以根据业务需求选择具体方案,来查看支持的版本、迁移类型和配置步骤。
- 私网机房自建MySQL
- 云上ECS自建MySQL
- Squids自建MySQL
源库 | 目标库 | 迁移类型 | 说明 |
---|---|---|---|
私网机房自建MySQL 5.6,5.7,8.0 云上ECS自建MySQL 5.6,5.7,8.0 Squids MySQL 5.6,5.7,8.0 |
私网机房自建MySQL 5.6,5.7,8.0 云上ECS自建MySQL 5.6,5.7,8.0 Squids MySQL 5.6,5.7,8.0 |
库表结构迁移 全量数据迁移 增量数据迁移 |
只支持低版本向高版本增量同步 |
当您在使用dbmotion执行数据迁移、数据同步或数据订阅操作时,您还需要为自建的源或目标数据库做一些准备工作,以满足dbmotion对环境的要求。
dbmotion支持将自建的数据库作为数据传输的源库或目标库,在不同的场景下,您需要执行相应的准备工作,然后在配置任务时选择对应的实例类型。
例如待迁移的本地数据库具备公网地址(即数据库服务开放至公网),执行完对应的准备工作后,即可在配置数据迁移任务时,选择实例类型为公网IP。
![20220501170549](https://user-images.githubusercontent.com/96899373/166883887-fb29d081-c7ff-497d-a971-9878bd668089.png)
适用场景 | 传输数据所用的网络 | 需执行的准备工作 | 配置时需选择的实例类型 |
---|---|---|---|
源或目标库部署在本地,且具备公网地址。 | 公网 | 添加dbmotion服务器的IP地址到自建库的白名单。 | 公网IP |
源或目标库部署在本地,但是不具备公网地址。 | 公网(借助其他服务器) | 映射本地库到指定的公网地址并添加dbmotion服务器的IP地址到自建库的白名单。 | 公网IP |
源或目标库部署在ECS上。 | 公网 | 添加dbmotion服务器的IP地址到自建库的白名单。 | 公网IP |
源或目标库部署在Squids上。 | 公网 | 映射本地库到指定的公网地址并添加dbmotion服务器的IP地址到自建库的白名单。 | squids会自动填充公网IP端口 |
dbmotion数据迁移服务提供了一个简便的工具,用于将用户内网的数据库地址映射到公网上。
为此,你需要找到一台服务器,它可以连到内网数据库,也可以连到公网环境,并且需要在该服务器上设置sshd的GatewayPorts=yes,以便进行端口转发。注意:这台机器会配置/etc/ssh/sshd_config并重启sshd服务,请确认是否对业务有影响。
在该服务器上运行dbmotion_tool如下:
-
- 检查ssh配置, 如果检查成功, 可以直接进行步骤3, 否则通过步骤2进行设置
-
检查成功
../dbmotion_tool -t check ssh config is ok: GatewayPorts yes GatewayPorts check ok
-
检查失败
GatewayPorts not found GatewayPorts check failed
-
- 设置ssh, 开启GatewayPorts
./dbmotion_tool -t set Check and set sshd. GatewayPorts not found, add it Restart sshd
-
- 创建ssh反向隧道
./dbmotion_tool -t create -h 192.168.2.104 -p 13306 create tunnel for 192.168.2.104:13306 on 48834 tunnel for 192.168.2.104:13306 on 48834 is created.
这里搭建了内网数据库的192.168.2.104:13306反向隧道,映射到 dbmotion.squids.cn:48834上
-
- 测试连接
mysql -h dbmotion.squids.cn -p 48834 -u root -p
通过dbmotion.squids.cn:48834就可以反向临时访问内网中的192.168.2.104:13306数据库了
-
- 迁移完成后,关闭反向隧道如下
./dbmotion_tool -t close -p 48834
很多内网或者公网数据库服务器或者所在的网关会设置网络安全策略,需要将DBMotion对应的“阿里云 vpc 内网 IP 10.250.47.97,外网 IP 121.40.57.96” IP地址加入到网络白名单,允许dbmotion可以访问这些网络。
dbmotion支持docker-compose方式安装,用户可以在dbmotion产品页获取docker-compose.yaml配置文件,并使用下面的命令来拉取镜像,启动dbmotion、查看日志和停止dbmotion
docker-compose pull # 拉取所有镜像
docker-compose up # 启动所有容器,前台运行, Ctrl+C 停止所有容器
docker-compose up -d # 启动所有容器,后台运行
docker-compose logs # 查看所有容器的输出
docker-compose stop # 停止所有容器
docker-compose down # 删除所有容器
dbmotion正常启动以后,就可以访问127.0.0.1:30000 来访问dbmotion页面
中途更换dts-api-server或dts-ui的镜像时,不删除已有的任务,可以如下操作:
docker-compose stop
docker rm dts-api-server
docker-compose pull
docker-compose up
业务需要零停机的平滑迁移可以使用DBMotion来做迁移工作。
这里假设客户的ECS上运行的MySQL实例为1.2.3.4:13306,Squids上申请了一个名为my-6faw85iM的MySQL数据库实例,想要将ECS上的业务迁移到squids上来,需要执行以下操作。
-
- 在“数据传输”页面选择"+添加迁移任务"
![20220503000814](https://user-images.githubusercontent.com/96899373/166883973-e5e8c37e-a3cc-4c43-9959-b829f80e1ea8.png)
添加迁移任务包括三个步骤:源库目标库配置、迁移选项配置、配置确认
-
- 源库目标库配置阶段
- 这里可以修改迁移的并发数,在全量和canal增量过程中,DBMotion会启用多个线程来并行同步。
- 源库选择需要迁移的ECS MySQL实例,目标库选择需要迁移上Squids的实例
![20220503001753](https://user-images.githubusercontent.com/96899373/166884043-75d02f27-9021-4dda-a19a-37b60a1e9d29.png)
说明:
- 源库和目标库都有相应的授权要求,点击“授权语句”可以看到对源库和目标库账号的要求。
- 由于需要建立目标库到源库的同步复制关系,对源库的某些参数配置也是有一定的要求,同样在"授权语句"弹出框中有相应说明
- 源库和目标库选择并输入连接账户密码后,可以点击“检查连接”测试数据传输服务DBMotion和数据库是否能正常连接
- 如果数据库要求用SSL连接,请勾选"启用SSL加密传输"并输入SSL证书
- 源端目标端都正确输入以后,就可以点击"测试连接以进行下一步",DBMotion会测试源端和目标端是否能正常连接并进入下一步
![20220503002005](https://user-images.githubusercontent.com/96899373/166884140-8492c397-fccd-47d6-a935-1835d9181bba.png)
![20220503001945](https://user-images.githubusercontent.com/96899373/166884191-831ebd11-664d-4dc8-a376-8f3008862556.png)
-
- 迁移选项配置阶段 选择需要迁移的数据库和迁移类型。
- 目前迁移服务支持schema级别的数据迁移,客户根据需要勾选需要迁移的数据库,这里MySQL元数据库information_schema,performance_schema,sys,mysql不会展示出来
![20220503231807](https://user-images.githubusercontent.com/96899373/166884250-889186aa-e207-4004-a982-b91f97509dfc.png)
- 迁移类型供用户选择要做哪些迁移,这里单独的"结构迁移" 与 "增量同步"无法组合(把表结构迁移过去了,没有全量初始化就做增量,这种组合不合理)。指定单独某个迁移类型(结构迁移、全量迁移、增量迁移)和其他组合多个迁移类型都是可以的。
- DBMotion的增量迁移支持两种模式,canal增量和slave模式,canal模式会读取binlog并以应用程序app的方式连备库去做DDL和DML操作,slave模式会直接在目标库上change master到源库上做增量迁移。对于源端和目标端可以直接连接的,并且是低版本向高版本迁移时,建议选择slave模式,利用MySQL原生的复制来实现增量同步;如果是高版本向低版本迁移或者源端和目标端无法直接连接,建议选择canal模式,
- 如果只做增量迁移,用户需要指定增量同步的其实位点(Binlog file+Pos)
![20220503232807](https://user-images.githubusercontent.com/96899373/166884289-060f1af6-792d-447d-ae59-b042864d31e7.png)
- 4.配置确认阶段
这里列出了源端和目标端连接情况以及迁移配置的情况供用户进一步确认
另外,这里会做“预检查”以便确认源库和目标库的连通性及账户权限、配置以及版本要求。
如果源端或者目标端不满足要求,可以修改完成满足要求后,点击“重新检查”可以确认修改后是否满足precheck要求
满足要求后,“创建”按钮才能启用,并可以点击
![20220503233728](https://user-images.githubusercontent.com/96899373/166884303-3e3594de-2ff6-409a-ac23-95b3ca722d9c.png)
-
- 查看任务列表
任务创建以后会回到任务列表页面,查看用户创建过的所有迁移任务
![20220503234621](https://user-images.githubusercontent.com/96899373/166884310-b4ae56f2-9c51-46ef-8030-0a609f283092.png)
-
- 查看任务详情 点击任务名可以进入任务详情页面,该页面展示了任务的所有迁移“阶段”,选择了结构、全量和增量迁移的话,会展示所有的五个阶段:结构迁移;全量初始化;增量同步;数据校验;结束迁移
每个阶段都有刷新按钮和查看日志按钮。刷新按钮用于获取迁移的最新状态信息,查看日志主要用于在出现错误时,查看具体的错误信息。
在结构迁移阶段可以查看到对象迁移中表、视图、存储过程、用户自定义函数等的同步情况,当前正在处理哪些、已经完成了哪些、有多少迁移失败了等在摇信息,以及迁移的具体详细情况。
![20220503234708](https://user-images.githubusercontent.com/96899373/166884330-1ca825b3-c53a-4d9d-aa80-057c17a4e9a1.png)
全量初始化按照用户配置的并发线程数并发将源库的数据迁移到目标端,你可以实时查看到当前钱了迁移的进度,需要同步多少行以及当前同步了多少行的状态信息。目前MySQL全量同步性能在网络带宽足够大的情况下可以达到40MB/s
![20220503234641](https://user-images.githubusercontent.com/96899373/166884368-348eb7c6-11b3-4700-8796-97e399fc80da.png)
增量同步主要用于展示当前同步的延迟和位点情况
![20220503235401](https://user-images.githubusercontent.com/96899373/166884382-f6bb9058-8a5c-459d-aaee-e21bc2f25ecb.png)
数据校验在canal模式下采用的是静态校验的方法,分别从源端和目标端获取count数和checksum进行对比;在slave模式下使用的是动态校验的方法,类似于pt-table-checksum的方式在主库执行基于statement的sql语句来生成主库数据块的checksum,把相同的sql语句传递到从库执行,并在从库上计算相同数据块的checksum,以对比数据是否一致。
静态校验用于迁移前停机时,校验主备数据是否一致;动态校验可以随时对主备进行数据校验,比对源端和目标端的数据一致性
![20220503235315](https://user-images.githubusercontent.com/96899373/166884397-16772c80-33ac-43d9-a06a-dba448f505a1.png)
当业务迁移完成以后,点击结束迁移可以停止源端到目标端的增量同步,结束迁移任务
![20220503235332](https://user-images.githubusercontent.com/96899373/166884408-067c84b0-401d-47b3-91c0-85a0f5598806.png)
线下自建MySQL迁移上Squids相对云上ECS迁移最主要的区别在于,线下的自建MysQL没有公有IP,需要利用dbmotion_tool来将线下数据库映射到公网上来。
你需要找到一台能通公网并且能访问内网数据库的服务器,利用它来将内网MySQL映射到公网上,在这台中转服务器上执行映射本地库到指定公网地址的前期准备工作,然后进行迁移配置。
客户在阿里云上的Squids实例如果想迁移走,类似于ECS迁移上Squids实例的操作,也可以实现零停机将数据库迁移走,实现对云及云上的数据库资源无依赖,实现cloudLess。
DBMotion支持MongoDB的结构、全量、增量迁移以及数据校验。
- 结构迁移将用户、role、collection、view、index、js等从源库迁移到目标库上,
- 全量迁移将源库上用户指定的数据全部迁移到目标库,
- 增量迁移在3.6版本之前以tailOplog的方式解析日志同步到目标端,3.6版本之后以ChangeStream的方式进行增量同步
- 数据校验使用dbHash来对源和目标端的collection进行比对
这里假设客户的ECS上运行的MongoDB实例为dbmotion.squids.cn:27037,想要迁移到dbmotion.squids.cn:27018的MongoDB上来,需要执行以下操作。
-
- 在“数据传输”页面选择"+添加迁移任务"
![20220519154942](https://user-images.githubusercontent.com/96899373/169243890-89a51c31-416f-4e63-b291-dfee8924dc03.png)
添加迁移任务包括三个步骤:源库目标库配置、迁移选项配置、配置确认
-
- 源库目标库配置阶段 如果源端或者目标端支持SSL,可以使用SSL进行加密传输
![20220519154754](https://user-images.githubusercontent.com/96899373/169243951-2349f6a5-fa32-4b12-8b51-a7ccaf6299f2.png)
-
- 迁移选项配置阶段,选择需要迁移的数据库和迁移类型。 增量迁移在3.6版本之前以tailOplog的方式解析日志同步到目标端,3.6版本之后以ChangeStream的方式进行增量同步
![20220519154816](https://user-images.githubusercontent.com/96899373/169243979-85b4c73d-3ff4-439c-bdb9-d927dac0fec3.png)
- 4.配置确认阶段 这个阶段会进行预检查,检查连通性和授权等情况。
![20220519154846](https://user-images.githubusercontent.com/96899373/169244023-abc0a87c-8159-4994-b53a-e2f481554c1b.png)
-
- 查看任务详情 这个阶段可以查看任务在各个阶段执行的具体情况,并且支持动态校验源端和目标端的数据是否一致
![20220519155252](https://user-images.githubusercontent.com/96899373/169244060-eff293ef-4861-408f-bef0-e85da90cb89e.png)
杭州沃趣科技股份有限公司版权所有