最近有一批 MySQL 数据库要做一下数据迁移 , 由于之前经历过大批量数据库迁移 , 心力憔悴 。 因此 , 接手这个任务的时候 , 感觉肝部有些隐隐作痛 。
由于迁移的时候有各种场景 , 如同版本 、 跨版本 、 全量迁 、 部分迁 、 可停机 、 不可停机等 , 所以需要事先部署各种开源工具 。 比如 xtrabackup 、 mydumper 、 pt - table - checksum 等工具 , 来进行物理迁移 、 逻辑迁移以及数据校验 。 另外 , 还要提前进行检查 、 评估 、 跨部门会议 、 迁移 、 校验 、 回退等各项繁杂的规划 。 在无数个深夜里 , 各种命令行指定一顿敲 , 敲的时候还要找几个人趴在屏幕上一字一句的核对 , 简直要瞎了一双狗眼 。 就没有一款能让我端着咖啡点点选选就把迁移给做完的工具吗 ? 我默默地在心底发出疑问 。
经朋友推荐 , 了解到了 DBMotion 这个工具 。 看了下简介和演示 , 好像很符合我期望中迁移工具的形态 , 那用起来到底怎么样呢 ? 于是我用这个工具做了一些验证 。
首先是
DBMmotion
的获取方式
,
在浏览器输入
squids.cn
进入网页
,
然后翻到最下面
,
找到智能小工具
,
点击
DB
M
otion
进入
DBM
otion
的主页
。

DBMotion 主页中有演示视频 , 对 DBMotion 做了一些介绍 。 使用的话 , 可以本地利用 docker 搭建 , 或者点击免费试用直接适用在线环境 。 在这里 , 点击免费使用 , 用一下在线环境 。

点击免费使用后进入到了 DBMotion 的控制台 , 页面比较简洁 , 数据传输里面就一个添加任务的按钮 , 点一下试试 。
点击添加任务后 , 看到了熟悉的界面 。 无非是输入源端目标端的的数据库 IP 、 端口 、 账号 、 密码 , 另外给了迁移所需要的最小权限的授权语句 . 由于我对账号没做什么限制 , 就直接用 root 账号了 。 迁移方式这里还提供了三种迁移方式 , 分别是 M y SQL to M y SQL 、 M y SQL to C lick H ouse , M ongo to M ongo , 这里主要关注 M y SQL to M y SQL 。

输入源端目标端的数据库信息后 , 测试连接通过后 , 就进入了迁移选项页面 。 页面中可以选择需要迁移的用户和 DB , 还可以指定并发数 、 迁移结构 、 数据及是否同步增量数据 。

这里选了一个测试的 DB , 包含 10 张 500 W 的表及测试用户 。 做一下全量 + 增量的迁移 , 点击下一步就进入了预检查的页面 。 预检查页面会有迁移的内容 , 迁移的数据量大小及耗时评估 。 11 G 预估 5 分钟迁移完 , 每秒大概 30 多 M , 速度还不错 。 不过这应该是指最大速度 , 我两个环境之间的带宽是 40 M 的 , 能达到 5 M / s 就不错了 , 这里预估的时候应该没考虑到带宽 。 另外 , 还有一些影响迁移及迁移后使用的一些检查 , 并会给出修复建议 , 省了自行检查的功夫 。 细看了下预检查的项 , 还有 binlog 保留时间以及 procedure 等对象的定义者检查 。 之前踩过这方面的坑 , 感觉预检查的内容还是挺全面的 。
看完预检查后点击创建就进入了正式迁移 , 在控制台生成了此次迁移的任务 。

点击任务名称进入迁移详情
,
看看都有些啥
。
可以看到有对象迁移
、
全量迁移等栏目
,
增量迁移和数据校验等都是灰色的
,
因为还没有进入到增量迁移的步骤
。
看了下对象迁移
,
主要是显示表结构
、
存储过程
、
函数等对象的迁移情况
。
又着重看了下全量迁移的显示
,
可以看到迁移进行的时间
、
预计剩余的时间以及迁移进度及速度
。
感觉还不错
,
能让人心里对当前迁移的进度有个直观的判断
,
方便向领导汇报进度
,
比之前命令行的方式感受要好很多
。
此外还有每个表的迁移详情
,
看起来更加直观
。
另外实时速度有
4
M
左右
,
基本已经把带宽打满了
,
也符合了我之前对迁移预估时间的猜测
。

迁移过程中 , 我到源库中 genral log 以及 show processlist 看了一下 , 没有发现加锁的情况 , 感觉比较奇怪 , 不加锁怎么保证我数据的一致性呢 ? 后面咨询了下官方的技术人员 , 得知 DBMotion 迁移过程中不会对数据库加锁 , 因为增量的时候会将全量迁移时刻开始的数据往后重做一遍 , insert 会改为 replace ,delete 删除成功就删除了,删除失败就忽略, update 只要不更新主键就做成 replace ,如果是更新主键,就做成 delete+replace , 但前提是全量迁移过程中不要做 DDL 。 按照这个逻辑推演了一下 , 确实可以实现最终一致性 , 至于全量过程中不做 DDL , 这个提前和业务声明一下就好了 。
迁移全程无锁 , 想想感觉就很舒服 。 之前迁移的时候 , 老是有某些连接没停干净 , 导致我做备份加锁失败 , 去掉加锁后还能实现数据一致性 , 在这里给个好评 。
全量完成后 , 增量迁移的详情也可以点进去了 。 主要想关注下增量进度的显示 , 看到有专门的延迟显示 , 还是符合期望值的 。

然后再看一下数据校验 。 咨询了下官方客服 , 校验的时候要停业校验 , 看来没有做成 pt - table - checksum 那种在线的方式 , 不过也能接受 。 停止测试增量数据的压测 , 点击一下运行校验 , 可以看到校验了各种对象结构以及数据 , 数据采用了行数和 checksum 的双重校验方式 。

这里模拟下不一致 , 看看能不能校验出来 。 模拟字符集和数据不一致后重新运行校验 , 查看结果 , 都给我校验出来了 , 再次好评 。 数据校验对迁移来说还是很重要的 , 这是一个兜底的功能 , 数据校验不通过我顶多不做业务切换 , 要是数据有问题但是没有校验出来 , 那可就麻烦了 。 经过我大量的不一致模拟 , 发现 DBMotion的校验功能还是非常靠谱的 。 千奇百怪的不一致都能给我校验出来 , 用起来非常踏实 , 不过目前没有重新同步不一致的功能 , 加上这个功能的话就更完美了 。

校验通过后 , 点击结束迁移就可以完成这次迁移了 。 全程我只需要输入一下迁移库的信息 , 选择一些要迁移的内容 , 剩下的就完全自动化 , 并有可视化页面的及时反馈 。 用我匮乏的成语储备来形容一下整个过程 , 就是云淡风轻 。
尝试了 DBMotion 工具 , 终于实现了我点点选选喝着咖啡完成迁移的愿望了 。 我想以后我的肝会变好 , 眼睛也会变好了 。 点点选选 , 操作简单 , 全程无锁 , 速度喜人 。 更有强大的校验功能来兜底 , 你不想拥有一个吗 ?
