ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

PlanetScale:大规模并行实现分片 Postgres 备份,高速且用途广!

PlanetScale:大规模并行实现分片 Postgres 备份,高速且用途广!

备份生命周期

每 12 小时,备份系统需将繁忙数据库完整状态转化为一致加密快照,且不影响生产查询。PlanetScale 让 Postgres 和 MySQL 备份创建、调度等更轻松,内部需协调云基础设施和 DBMS 工具。分片数据库备份要启动特定节点、提取数据和重放 WAL,大规模并行操作可让 PB 级数据库数小时完成备份,速度超 50 GB/s。以 8 个分片的 Neki 数据库为例,其能处理每秒数十万次生产查询。备份第一步取决于是否为首次备份,稳定状态下假设已有成功备份存于 Amazon S3。分片 Postgres 数据库以常规 Postgres 备份为基础,Neki 采用文件系统备份与 WAL 重放结合的方式,步骤包括在时间 `T1` 开始完整备份,`T2` 完成,重放 `T1` 到 `T2` 间的 WAL 修正数据,存储结果到独立存储位置。为减少对生产查询服务的影响,为每个分片启动全新 EC2 实例管理备份,虽增加少量成本但值得。

复用旧备份

将最近备份恢复到每个分片中,以 Amazon S3 为例,数据直接流式传输。此方法需临时计算资源,接受成本的原因一是只有最近的 WAL 来自主节点,降低对生产的影响;二是证明之前备份可恢复和重放。复制完成后,8 台服务器拥有 12 小时前 8 个分片的精确状态。

重放 WAL

要让每个分片的旧备份与当前状态一致,需重放 12 小时前到现在的 WAL。直接从主节点拉取 WAL 会影响生产,且主节点可能无完整 WAL。PlanetScale 用 `wal - g` 存档 WAL,采用 S3 和主节点混合的重放方式,多数用 S3,最后几分钟从主节点流式传输,理想情况只需几秒。

完成备份周期

当节点复制赶上时间 `T` 时,停止 WAL 复制,冻结备份时间点,记录 `T` 确保知道备份时间范围。备份一致后加密并发送到新 S3 存储桶,备份节点完成使命可停用。

首次备份

新数据库创建 12 小时内,用 `pg_basebackup` 初始化备份节点,它用于物理备份数据库集群。只用于初始化临时节点,持久备份用 `wal - g` 创建以保证格式和恢复过程一致。首次备份步骤与稳定状态类似,完成后未来备份按恢复 -> 追赶进度 -> 保存流程进行。

追求速度

因分片特性,可在每个分片重复常规 Postgres 备份,大型数据库备份速度也快。每次备份数据传输步骤为从 S3 恢复旧备份、混合追赶进度、将新文件发回 S3。未分片的 32 TB 数据库备份需约 22 小时,若每天两次备份会无法达到 RPO。同样数据库在 Neki 的 8 个分片中,并行操作总时间减至约 2.8 小时,32 个分片中备份时间缩至 42 分钟,备份速度扩展性良好。

备份的用途

备份可保障数据安全,是意外删除或数据库灾难时的备用方案。在 PlanetScale,备份是日常数据库操作核心,调整 Metal 数据库大小时会用备份,步骤包括启动新 EC2 实例、下载备份副本追赶进度、初始化备用节点、切换主节点、停用小节点。节点因故障更换时也会用备份,更换过程包括初始化新实例、恢复备份追赶进度、同步数据、新节点处理查询或作为主节点。

MySQL 呢?

PlanetScale 还运营分片 MySQL 数据库,由 Vitess 作为查询路由/分片层。备份和大小调整过程与 Postgres 类似,区别在于用 `VTBackup` 而非 Postgres 内置工具,用 MySQL 二进制日志复制而非 WAL,复制追赶直接从主节点进行。

让备份变得简单

希望备份和调整数据库大小操作对用户透明,如设置调度或点击按钮般简单。深知数据库操作细节之美,希望用户通过了解备份生命周期对数据库编排有新认识,也在寻找优秀数据库工程师。

公司信息

[关于我们](/about) [品牌介绍](/brand) [博客](/blog) [更新日志](/changelog) [招聘信息](/careers) [活动信息](/events)

产品信息

[案例研究](/case - studies) [企业版](/enterprise) [定价](/pricing) [性能测试](/benchmarks)

资源信息

[文档](/docs) [迁移指南](/migrate) [支持服务](https://support.planetscale.com/hc/en - us) [状态信息](https://planetscalestatus.com) [信任中心](https://trust.planetscale.com)

课程信息

[面向开发者的 MySQL](/learn/courses/mysql - for - developers) [数据库扩展](/learn/courses/database - scaling) [学习 Vitess](/learn/courses/vitess)

开源项目

[Vitess](/vitess) [Vitess 社区](https://vitess.io/slack) [GitHub](https://github.com/planetscale)

[隐私政策](/legal/privacy) | [使用条款](/legal/siteterms) | [Cookie 政策](/legal/cookies) | [专利信息](/legal/patents) | [不共享我的个人信息](/legal/privacy#privacy - rights - and - choices)

© 2026 PlanetScale, Inc. 保留所有权利。[GitHub](https://github.com/planetscale) | [X](https://twitter.com/planetscale) | [领英](https://www.linkedin.com/company/planetscale) | [YouTube](https://www.youtube.com/planetscale) | [Discord](https://pscale.link/community) | [Facebook](https://www.facebook.com/planetscaledata)

返回列表