7

我一直在寻找一种方法来防止 MySQL 删除语句被从站处理,我正在从事数据仓库项目,并且我想在将数据复制到从站后从生产服务器中删除数据。

完成这项工作的最佳方法是什么?

谢谢

4

2 回答 2

8

有几种方法可以做到这一点。

  1. SET SQL_LOG_BIN=0;在执行删除之前在主服务器上运行相关会话。这样它就不会写入二进制日志
  2. 在从属设备上实施BEFORE DELETE触发器以忽略删除。

对于我不想复制的语句,我倾向于使用方法 #1。它需要SUPER特权。

我没有尝试过#2,但应该可以。

于 2013-03-13T15:13:32.443 回答
5

您只能通过 hack 来实现这一点,并且可能会导致问题。MySQL 复制不是为此而设计的。

想象一下,您在主服务器中插入一条记录,它会复制到从服务器。然后您从主服务器中删除,但它不会从从服务器中删除。如果有人添加了具有相同唯一键的记录,那么从服务器上就会发生冲突。

一些替代方案:

  1. 如果您要进行备份,我会通过另一种方式进行。您可以使用运行 mysqldump 的 cronjob 进行定期备份,但这假设您不想保存每条记录,只创建定期还原点。
  2. 触发更新第二个镜像数据库。但是,这不能跨服务器,您必须使用不同的名称重新创建每个表。此外,计算成本会很高,并且从该备份恢复会很困难。
  3. 实际上不要删除任何内容,只需创建一个“活动”或“禁用”的状态字段,然后对用户隐藏“禁用”。这也有问题,例如,不能使用 ON DELETE CASCADE,它必须全部在代码中手动完成。

也许如果你提供你想要这个镜像数据库而不删除的原因,我可以给你一个更有针对性的解决方案。

于 2013-03-13T15:12:48.123 回答