欢迎访问网易云社区,了解更多网易技术产品运营经验。
我们把数据库里部分或全部 Schema和数据迁移到另一个实例的行为称为实例迁移,将导出数据的实例称为源实例,导入数据的实例称为目标实例。
根据迁移数据库类型的不同,可以分为同种数据库之间的迁移,如从 MySQL迁到 MySQL;和跨数据库类型的迁移,如从 Oracle迁移到 MySQL等。
本文将介绍网易云基础服务(蜂巢) RDS实例迁移功能的实现,并探讨如何高效完成实例迁移任务。
使用场景
那么,为什么要进行 MySQL实例迁移呢?不同场景下分别该如何迁移?实例迁移的场景归纳起来主要有以下几种:
1、从自建实例迁移到 RDS:
在云服务还未充分推广时,存在大量自建数据库实例,以网易公司为例,在公司业务全面上云之前,网易博客、网易邮箱等产品的数百个 MySQL实例都是直接部署在物理服务器上,而随着业务的扩展,必然要对实例进行扩容、升规格等操作。
相比自建实例,RDS实例在故障处理、在线扩容、升级等方面存在着天然的优势,所以,目前,网易绝大部分互联网产品的数据库均已使用实例迁移功能将实例迁移到了 RDS上;
2、从其他公有云平台迁移到 RDS:
网易云基础服务(蜂巢)RDS推出一年多的时间以来,有很多用户将部署在其他公有云平台上的 MySQL实例迁移到网易云基础服务(蜂巢)RDS上。我们对实例迁移功能进行统计发现,有 50%是用于迁移其他公有云的 MySQL实例。
实例迁移技术实现
在设计实例迁移功能前,我们对业界公有云进行了充分调研,仅有两家主流公有云平台提供实例迁移功能,那么为什么仅两家呢,主要是因为提供在线实例迁移功能需要解决一系列问题,概括起来有以下几点:
1.如何快速地对源实例进行一致性数据备份?
2.如何处理备份过程中对源实例业务的影响?
3.如何快速地将备份导入到目标实例?
4.如何同步源实例的增量数据到目标实例?
5.如何确保实例迁移高效完成?
下面逐条解析网易云基础服务(蜂巢) RDS是如何解决这些难题的。
1 多线程逻辑备份
我们解决第一个问题的方法是采用多线程逻辑备份的方式来进行源实例一致性数据导出。
MySQL的数据备份工具有很多,逻辑备份工具包括经典的 mysqlpump,MySQL 5.7版本新推出的 mysqlpump,Percona开源工具