Bytebase 是一款开源数据库工具,它面向整个研发组织设计,旨在帮助应用开发者和 DBA 更安全、更高效地管理应用开发生命周期中的数据库操作 (Database DevOps)。
在日常工作中,如果遇到下面这些问题,你会如何处理呢?
不小心删除了一张表或者删除了一些用户数据
- 应用程序发布了一个包含数据库变更的新版本,但这个新版本上线后不能正常运行
在 MySQL 中,用时光机回到过去的任意时刻,相当于用备份文件和数据库日志文件将数据库恢复到事故发生前的某个时间点。这个操作过程不仅复杂,而且依赖经验丰富的 DBA。如果用 Bytebase 来完成基于时间点恢复(PITR)的操作,仅需点击几次按钮即可,并且整个过程有明确的进度反馈。接下来,本文将介绍基于时间点恢复(PITR)在 Bytebase 中的工作原理和操作步骤。Bytebase 完成一次基于时间点恢复(PITR)的过程如下:找到早于指定恢复时间点最近的一次备份
将上一步中的备份恢复到一个临时的数据库
在临时数据库上重新执行从备份时间点到指定恢复时间点之间的数据库日志文件
- 用临时数据库替换目标数据库,并将旧数据库重命名以供手动检查
最后一步表明 PITR 在 Bytebase 中是原地恢复(in-place recovery),因此在数据库恢复完成后不需要更改应用程序的代码。如何将数据库恢复到某个指定的时间点?
假设有一个 MySQL 数据库「db_pitr_example」,它有 2 个表「pitr_one」和「pitr_two」。由于表「pitr_two」被不小心删除了,导致某个应用突然中断了服务。DBA 在得知此事故后,立即着手恢复被删除的表。
接下来,我们将演示在 Bytebase Console 中如何将数据库恢复到事故发生前的某个时间点。1. 单击选项卡「备份和恢复」,然后点击「恢复到指定时间点」。2. 指定数据库恢复的具体时间点,并单击「确认」。3. 点击「批准」开始执行第一个任务,或者将这个 issue 重新指派给其他人进行审核。当第一个任务完成后,再次点击「批准」开始执行第二个任务。
如下图所示,数据库「db_pitr_example」已完成了一次基于时间点恢复的操作。我们来验证一下 PITR 的执行结果。如下图所示,被删除的表「pitr_two」已经被找回了,应用又恢复了服务。
我们刚刚演示了如何用 Bytebase Console 来将事故数据库恢复到指定的时间点。Bytebase 提供的基于时间点恢复(PITR)功能是一种原地恢复(in-place recovery),这意味着在数据库恢复后无需更改应用程序代码即可恢复事故前的应用程序状态。要了解更多有关 Bytebase 基于时间点恢复的信息,请参阅我们的文档(https://www.bytebase.com/docs/operating/disaster-recovery#point-in-time-recovery-for-mysql)。感谢您阅读本文。如果您有任何意见或问题,欢迎向我们反馈(https://github.com/bytebase/bytebase/issues)。