如何在不丢失数据的情况下回滚迁移
错误的数据库迁移每天都在发生,数据丢失可能会带来毁灭性的后果。PlanetScale 的新功能——模式回滚(schema revert)为您在模式迁移后提供了一种全新的解决方案:无需停机,也无需数据丢失,即可回滚更改。
什么是模式回滚?
您是否曾经遇到过这样的情况:您在生产环境中进行了一次模式更改,比如修改了某个列的数据类型或删除了一张表,结果导致了应用程序中断甚至全面故障?更糟糕的是,这一更改已经生效,而您只能希望能够回到更改之前的状态,同时不丢失故障期间新增的任何数据。
您的愿望现在可以实现了!PlanetScale 的新模式回滚功能允许您在不丢失数据的情况下回滚迁移。
这一功能带来了前所未有的能力:通过点击按钮,您可以在不到一分钟的时间内回滚数据库的模式更改,无需停机且不会丢失任何数据。在以往,如果您删除了一个错误的索引,您可能需要花费几小时来通过新的迁移修复。而如果您删除了错误的表或列,更可能需要几天甚至几周的时间通过备份恢复并重新部署。而在修复的过程中,您的数据和应用程序会面临什么情况呢?
模式回滚为您的工程团队带来了全新的速度与能力。结合 PlanetScale 的其他功能,例如数据库分支(Database Branching)和部署请求(Deploy Requests),您可以以更快、更安全的方式对数据库进行更改(以及修复)。这一功能不仅节省时间,还让模式更改变得不再那么令人畏惧,因为您可以像管理代码一样管理数据库。如果没有专门为数据库构建的内部工具,这种工作流程以前几乎是无法实现的。
它是如何工作的?
在完成部署请求后,您可以将数据库恢复为更改模式之前的干净状态。这包括任何在该部署请求中被移除的数据。任何参与限量测试版的数据库都会在相关部署请求页面上为您提供一个 “回滚更改” 按钮,该按钮在更改部署后的30分钟内可用。一旦您选择了该按钮,回滚操作会立即执行。
例如,如果您在部署请求中删除了一列及其相关的数据,然后回滚操作,删除的列和相关数据将在几秒内重新出现。
这一切得益于 Vitess 中的 VReplication 功能。Vitess 是一个支持 PlanetScale 数据库和 MySQL 的数据库集群与管理系统。VReplication 还支持其他功能,例如数据库导入(Database Imports)。它在数据库的有效状态之间进行无损同步,它以一致的方式将数据从源表复制到目标表。Vitess 的 VReplication 实现独特之处在于,它可以深入到 MySQL 事务级别,确保不会丢失数据,并让数据库模式回到模式更改之前的状态。整个过程仅需几秒。
如果您希望了解更详细的工作原理,请参考我们的博客文章《幕后揭秘:模式回滚如何工作》。
想亲眼见证它的效果?
立即注册参与限量测试版,亲自体验这一功能!注册或登录 PlanetScale 后,前往数据库的“设置”标签页,在 Beta 功能部分选择“使该数据库参与模式回滚限量测试版”。然后,创建一个拥有模式更改的数据库分支,部署新的部署请求,然后进行回滚!
关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台
除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接
本文链接:https://choupangxia.com/2025/05/23/revert-a-migration-without-losing-data/