没有删除语句的MySQL复制

时间:2013-03-13 15:01:49

标签: mysql

我一直在寻找一种方法来防止MySQL删除语句被奴隶处理,我正在研究数据仓库项目,我希望在将数据复制到slave之后从生产服务器中删除数据。

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

谢谢

2 个答案:

答案 0 :(得分:6)

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

  1. 在执行删除之前,在主服务器上运行SET SQL_LOG_BIN=0;以获取相关会话。这样就不会写入二进制日志
  2. 在从属服务器上实现BEFORE DELETE触发器以忽略删除。
  3. 我倾向于使用方法#1来表达我不想复制的语句。它需要SUPER权限。

    我没有尝试#2,但它应该是可能的。

答案 1 :(得分:3)

你只能用黑客来实现这个目标,这可能会导致问题。 MySQL复制不是为此而设计的。

想象一下,你在主人中插入一条记录,它会复制到奴隶。然后从主服务器中删除,但不会从服务器中删除。如果有人添加了具有相同唯一键的记录,则从站上将存在冲突。

一些替代方案:

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