MySQL数据库迁移实战总结

最近为客户进行了一次服务器迁移,PHP做的项目,运行在Linux上,从阿里云迁移到本地自建服务器,其中最关键的是数据库迁移。

数据库使用的是MySQL,数据量较大,300G往上,怎么把这么大的数据库从线上迁移到线下是个问题。

之前有过几次迁移MySQL的经验,但数据量不大,最多也就是5G左右,导出、压缩再导入,一般1小时内就搞定了。这次不一样,数据量太大了,直接导出是行不通的,导出的文件都会很大,硬盘顶不住,所以需要使用的别的方案。

倒也用过几次阿里云的数据迁移服务,也就是DTS,不过是阿里云数据库之间的迁移,最多跨个区域,所以也不用特别的配置,这次不同,是从阿里云公网迁移到本地公网(走的内网映射,可公网访问),连接稳定性首先就是个问题,时间的不确定性很大,最终能不能完成心里也不同底,但,不试试怎么知道呢?

开始尝试吧,总结下过程。

迁移步骤:

  1. 首先准备源数据库和目标数据库,都要设置成可外网访问,且提供的源数据库的账号需要有读取binlog的权限,目标数据库需要是空的,不然会预检失败;
  2. 创建DTS的迁移任务,注意是迁移而不是同步,因为走的是公网。区域可以选服务器所在的区域,如果没有就就近选择,不影响;
  3. 配置源数据库和目标数据库的连接信息并检查,下一步是配置迁移子任务,其中全量迁移是必选的,增量迁移根据需求,如果要保持数据同步那就选上,全量校验和增量校验可不选;
  4. 配置好了会进行预检,全部通过后就是选择实例的规格,根据我的几次经验,选最小那个2000QPS的就行,因为实际迁移中绝大部分时间跑不满2000;
  5. 都准备好了就启动任务,可以看到进行到哪个步骤了,完成了百分之多少。

这次迁移整体用时10天左右,也就是全量迁移完再增量迁移,最后保持两个数据库的同步延迟在秒级内,中间遇到了几个问题,总结下注意事项:

  1. 因为周期较长,所以需要有人盯着,如果报错的话需要及时处理;
  2. 报过连接错误,这是因为网络问题,所以需要确保网络的稳定性;
  3. 报过写入错误,是因为表锁造成的,如果自动重试多次后没有恢复,可暂停任务,过个两三分钟再恢复任务(子页面中是重启,一样的);
  4. 到最后完全同步后,要及时切换数据库并释放DTS服务,因为这玩意不便宜,不算流量费,一天光实例的服务费也得30左右了。

这次迁移服务器积累了不少实战经验,除了数据层面的,还有内网映射、反向代理等网络层面的,受益良多。

Leave a Comment

豫ICP备19001387号-1