PlanetScale 如何防止 MySQL 停机
停机的代价可能从业务损失到严重的声誉损害不等。虽然数据库停机似乎不可避免,但通常是可以预防的。
引发数据库问题导致停机的原因通常可以归类为以下三种:
- 人为错误
- 系统不成熟
- 应用问题
在本文中,我们将探讨 PlanetScale 如何在这三个方面进行缓解。
因人为错误导致的停机
我们都有过这样的时候:错误地删除了表或索引,导致查询性能急剧下降甚至失败。这可能导致整个网站宕机,并引发其他系统的级联故障。在使用标准 MySQL 时,如果你删除了一个仍在使用的表,唯一的解决办法就是从备份中恢复。选择正确的备份、恢复数据并重新上线可能需要几个小时,这无疑会给你的团队带来极大的压力。
为了帮助防止这类停机事故,PlanetScale 会发出警告,提示你要删除的表是否最近被查询过。这可以帮你避免删除正在使用的表的错误。
部署请求警告(Deploy Request Warning)
如果你确实部署了有问题的模式,例如导致查询性能下降的次优索引,或导致错误的删除列,我们还允许你回滚模式部署,而不丢失任何数据。
因系统不成熟导致的停机
构建一个高可用的数据库非常困难。数据库需要几十年的时间才能成熟。有些工程团队常常会选择一种牺牲扩展性以换取易用性的解决方案。从表面上看这种权衡在项目初期似乎是正确的,但随着对服务的用户需求增加,很快会适得其反。
我们在 Vitess 之上构建了 PlanetScale——一种用于 MySQL 水平扩展的数据库集群系统。它由 YouTube 数据库团队开发,用于支持 **YouTube.com**。自 Vitess 开源以来,它已经被 GitHub、Slack、Etsy、Roblox 等众多企业广泛采用。PlanetScale 也是 Vitess 的维护者。
Vitess 经过了一些互联网最大规模网站的压力测试。
选择在 Vitess 之上构建 PlanetScale 的原因,源于我们对开发者体验重要性的深刻认知。开发者体验始于易用性,但仅靠可靠性和扩展性才能维持这种体验。构建一个支持数十亿用户的数据库平台,为我们的用户提供保障,确保他们不用依赖一个不成熟的系统。我们知道 Vitess 的扩展能力,并相信它能够支持那些信赖我们托管应用关键组件的人。
因应用问题导致的停机
Bug 难以避免。软件很难做到每次部署都完美无缺。数据库停机的一种常见原因是应用错误部署导致数据库负载骤增。这可能是由于性能不佳的查询(例如慢查询)或一次性过多的查询引起的。
PlanetScale Insights 是一款下一代监控解决方案,可帮助你实时发现不良查询。当我们接收到来自你的应用的查询时,会将它们传输到数据管道中,记录查询以及对应的性能指标。这使你可以获得应用程序发送的查询的汇总视图。此外,你可以使用查询注释(query comments)为查询添加标签以标识其来源。
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:http://www.choupangxia.com/2025/09/07/planetscale-mysql-downtime/