MySQL 数据库中毒:如何快速恢复到已知状态

geo*_*xis 2 mysql replication backup

如果您想避免数据库中毒(即想快速恢复到某个时间点),您更喜欢哪种方法?

让我定义数据中毒。您在数据库中插入了一些东西,这完全弄乱了内部结构和相互依赖关系。我知道这意味着可能还需要重新审视数据库设计,但损害已经造成。

我想到的方法是

  1. 以某种方式设置复制,其中从属被动且落后 X 小时。如果出现故障,我所要做的就是重置应用程序并将其指向从属设备作为我的新主设备。我怀疑这是可能的。
  2. 每隔几个小时做一次 MySQL 热备份,当检测到故障时,恢复到 X 小时前的备份。这将意味着应用程序停机,因为我不能让当前应用程序继续运行。可以使用 innobackup 或 percona 进行快速备份和恢复步骤。
  3. 专门设计应用程序和数据库,以便新添加的数据被删除(或搁置)。这意味着我存储所有事件/状态(我想这是最困难和理论上的解决方案)

如果第一个选项是可能的,并且它还存储了所有的中继日志(即在 Master 上发生的事情在同一时刻传输到 Slave,但在几个小时内自动应用),那么这将是一个完美的解决方案。也许可以在一个设置中设置多个从站以从中断和数据中毒中恢复

小智 5

您可以使用 Percona Toolkit 中的 pt-slave-delay 工具将副本延迟您选择的时间。