我想在主服务器上创建一个表,其数据不会复制到从服务器。
作为批处理作业的一部分,我暂时在该表中插入了数百万行;该表中的数据可以按需重新创建,因此不需要在(较慢的)从属服务器上复制。
我不想使用TEMPORARY
表,因为理想情况下我希望将表结构保留在数据库中(也在从站上,以便我可以可靠地使用它进行备份恢复),最重要的是我希望能够恢复如果作业因任何原因退出,则从当前状态开始,因此如果作业死亡,表数据需要保留在主服务器上。
理想情况下,我希望能够从CREATE
语句中控制表的可复制性,以便能够从我的正常 SQL 工作流程中控制它。
这可能吗?如果没有,欢迎使用接近的替代方案。
创建一个数据库。添加
binlog_ignore_database
在主机上以避免甚至将数据发送出去(而不是发送它,然后在从机上折腾,就像replicate_ignore_*
)将所有不可复制的表放入该数据库中。通过引用它们
dbname.tblname
。请注意复制过滤器的方式:在 SBR 中,
USE
控制要检查执行/忽略过滤器的内容。我有一个非常成功的技巧:
INSERT
将该数据库中的内容复制到复制表中(在其他数据库中)。-- 这是唯一被复制的步骤。最终结果是只在 Master 上做很多 ETL工作,但最终结果仍然在 Slave 上。
如果您试图忽略整个批次,您可以尝试:
请记住,用户必须具有 SUPER 权限。这将阻止查询写入二进制日志;所以它不会复制。