如何防止使用mysql复制某些记录

时间:2010-08-20 11:11:55

标签: mysql replication

我的主 - 主复制工作成功,它工作正常,我所做的所有更改也会反映给奴隶。

但我不希望那个奴隶反映所有的变化 - 只有我想要的这些记录应该反映在奴隶身上。怎么能这样做?

4 个答案:

答案 0 :(得分:2)

你可以做到

SET sql_log_bin=0;
在您不希望复制的语句之前

。它们不会被发送给奴隶。

或者,您可以在应用程序端配置每个连接以设置该值,然后执行

SET sql_log_bin=1;

当你想要的时候。在MySQL replication: temporarily prevent specific SQL statements replicating to the slaves?上可以找到更多相同内容。

答案 1 :(得分:1)

您可以阻止从属服务器处理特定数据库和单个表的更新,无论是白名单还是黑名单 - 有关详细信息,请参阅slave configuration options

如果您的标准比这更复杂,您可能需要重新考虑。

答案 2 :(得分:1)

我能想到的唯一方法是在master上创建一个VIEW,过滤掉你不想复制的记录,然后复制那个VIEW。在奴隶上,“VIEW”表将是MYISAM / InnoDB而不是VIEW。我知道你可以复制到不同的表类型(即InnoDB-> MyISAM),但我从来没有尝试过使用View。

答案 3 :(得分:1)

不知道你想要达到的目标,很难说。

您可以阻止通过复制对单个表或整个数据库进行更改(例如,建议您不要复制mysql。*表,因为您可能不希望GRANT被复制)(Paul Dixon的回答提供了一些)更多信息)

如果要阻止某些类型的语句被复制(例如DELETE查询),那么您可以在复制它们之前使用MySQL代理重写这些查询。

如果您打算在从属设备上对数据库进行分片(例如:在一台服务器上启动A-M而在另一台服务器上启动N-Z),那么MySQL代理可能会再次为您提供帮助。