零停机时间的 PB 级规模迁移
引言
扩展数据库常常伴随着种种挑战,比如频繁的维护任务、对系统崩溃的持续恐惧,以及快速上升的成本。这些问题让团队宁愿忍受不适,也不愿面对迁移已不适合现状的数据库的复杂任务。
这也不难理解。将数据库从一个服务器或系统迁移到另一个系统存在诸多风险:长时间停机、数据丢失、版本不兼容,以及无法预知的错误。
但是如果我告诉你,这其实可以变得不那么困难呢?在 PlanetScale,我们经常将 TB 甚至 PB 级别的数据库迁移到我们的平台上,而且无需任何停机时间。我们的流程允许我们在切换流量到新系统之前进行充分测试,甚至在需要时将迁移重新切换回原来的数据库。
为了让你了解涉及的规模,可以看看以下一个较大的数据集的大小——这些数据仅是部分数据库迁移后的结果:

在本文中,我们将深入探讨背后的技术细节,为你展示我们的迁移过程,以及我们如何处理超大规模迁移而确保零停机时间。
数据迁移
在进入细节之前,让我们先总结高层问题并列出相关术语,以便更好地理解和欣赏迁移细节。
数据迁移指的是将数据从一个数据库服务器或系统移动到另一个系统的过程,目标是将数据的存储和服务责任从旧系统转移到新系统。切换流量到新系统的时间点通常被称为**切换点(cutover)**。每种数据库和系统都提供了一些用于实现这一过程的方法,例如:
- MySQL 提供
mysqldump
和mysqlimport
用于逻辑数据复制。 - PostgreSQL 提供
pg_dump
和pg_restore
用于同类操作。 - 两个产品都支持设置从旧系统到新系统的复制功能,如果两者是同类型(例如 MySQL 到 MySQL)时尤其常见。
常见迁移例子包括:
- 从旧版本升级到新版本(例如 PostgreSQL 13 升级至 PostgreSQL 16)。
- 从一种数据库系统迁移到另一种系统(例如 PostgreSQL 到 MySQL 或反之)。
数据迁移的运作方式
从总体上讲,数据迁移通常遵循以下流程:
- 对旧系统的数据进行快照可以选择逻辑备份或物理快照(卷、文件系统或块设备)。逻辑备份与存储解耦,能够迁移到不同的数据库或存储类型。
- 将快照恢复到新系统或者通过逻辑备份中的 SQL 语句重放,或者使用物理快照将数据恢复到新系统。
- 验证新系统执行基本检查,以确保新系统能够读取和服务期望的数据。
- 切换应用流量到新系统让所有相关应用开始向新系统发送读写流量。
- 退役旧系统在确信新系统表现正常后,可以关闭并归档旧系统。
简单的迁移流程可能会导致长时间的停机——从开始第一步到完成第四步,系统需处于只读状态。这可能需要数小时、数天甚至数周时间,这对于许多生产系统而言是无法接受的,尤其是那些规模巨大并需要全天候运行的系统。此外,这种方式也无法在切换流量后的问题出现时回滚切换,例如某些查询可能抛出错误或性能明显恶化。
理想的流程应该能完成所有步骤而且无需停机,同时支持在必要时回滚切换流量。这正是 PlanetScale 的迁移流程所设计的目标!现在我们已奠定了基础,让我们来深入探索技术细节。
PlanetScale 的数据迁移流程
在 PlanetScale 中,数据迁移流程的高层级如下(可以在 PlanetScale 文档中找到用户指南,例如 [AWS RDS 迁移指南](链接地址)):
- 获取一致性非锁定快照同时获取用于复制后续变更的元数据。迁移期间将持续同步变更。
- 这意味着迁移过程不会影响数据库及其相关应用的可用性,因此不存在停机时间!
- 将数据复制到新系统后,继续从旧系统到新系统复制变更记录确保新系统随时可以切换到工作状态。
- 通过从原始数据库实例到 PlanetScale 数据库的持续复制,保持第一步快照的数据与原系统同步,因此仍然无需停机时间。
- 运行 VDiff 验证数据已正确复制,确保两侧系统一致找出切换前需要解决的任何差异。
- 这是重要的一步,确保迁移过程中没有发生错误,所有数据已正确复制并同步,从而为切换提供信心。
- 在第一步和第四步之间,应用开始向 PlanetScale 而不是直接向旧系统发送流量
- PlanetScale 持续将流量路由回旧系统,直到我们准备切换为止。
深入技术细节
PlanetScale 是一个基于 Vitess 打造的数据库即服务(DBaaS),提供现代 MySQL 的开发体验。Vitess 中包含一套与数据迁移相关的工具和原语,统称为 VReplication。PlanetScale 的 “数据库导入” 特性即基于 VReplication 打造。
迁移流程主要包括:
- 数据复制
- 数据验证(VDiff)
- 流量切换和反向复制,确保灵活性和数据一致性
结论
数据迁移是任何数据库系统生命周期中的关键部分。无论是升级现有数据库版本、实现数据库分片扩展还是迁移到全新的数据库系统,都可能需要进行迁移。然而,我们都经历过因迁移导致的停机或其他问题。了解 PlanetScale 的无停机迁移流程,可以帮助你优化自己的迁移策略,避免常见陷阱和不良后果。希望我们的分享能够为你下一次的数据迁移提供支持,无论是直接成为 PlanetScale 的客户还是间接通过我们的社区一起学习和成长。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://www.choupangxia.com/2025/09/14/zero-downtime-migrations-at-petabyte-scale/