tachomi Asked: 2014-10-07 14:10:46 +0800 CST2014-10-07 14:10:46 +0800 CST 2014-10-07 14:10:46 +0800 CST 在 Master 上创建表 - Master 配置避免复制 772 我有一个Master-Master配置。 我想要的是仅为报表项目创建一个辅助表,因此没有必要复制它。 有没有特定的方法可以做到这一点CREATE TABLE? mysql replication 2 个回答 Voted Best Answer Michael - sqlbot 2014-10-07T17:39:30+08:002014-10-07T17:39:30+08:00 最安全的方法是远离尝试过滤复制......并且调整sql_log_bin打开和关闭也是复制问题的一个秘诀。在复制环境中,一般的想法是两台服务器都具有相同的数据集,无论在何种程度上它们不相同,您的设置都会变得更加复杂。 有一种更简单、更安全的方法。 首先,在要存储数据的服务器上使用所需的存储引擎创建表。 然后,在另一台服务器上(您不希望表存储数据的地方),验证定义是否已复制并且表是否存在,然后: mysql> SET sql_log_bin = 0; mysql> ALTER TABLE t1 ENGINE=BLACKHOLE; mysql> SET sql_log_bin = 1; 这会将表更改为本地的 Blackhole 表,而不会将更改复制回其他主服务器。这是您只需要在布置桌子时做一次的事情。在那之后,我们正常使用它。 黑洞存储引擎... 充当“黑洞”,接受数据但将其丢弃且不存储。 具有黑洞表的服务器仍将通过涉及该表的复制查询进行搅动,但开销大大减少(对表的写入将被丢弃),并且SELECT * FROM table将始终返回……什么都没有。 您可以在一台服务器上写入真实表,而不会占用空间,也不会在另一台服务器上选择表中的数据。 警告:如果您根据该表中的内容操作其他表中的数据(INSERT ... SELECT... UPDATE ... JOIN...等),那么您需要使用binlog_format=ROW或完全放弃这个想法,因为如果没有该表,这些查询将无法工作两个主人的数据,如果你binlog_format是STATEMENT,并且也不一定能可靠地与MIXED模式一起工作。 akuzminsky 2014-10-07T14:17:18+08:002014-10-07T14:17:18+08:00 您可以在会话中禁用二进制日志,然后创建表,使用它并删除: SET sql_log_bin = 0; CREATE TABLE t(...); ... DROP TABLE t;
最安全的方法是远离尝试过滤复制......并且调整
sql_log_bin
打开和关闭也是复制问题的一个秘诀。在复制环境中,一般的想法是两台服务器都具有相同的数据集,无论在何种程度上它们不相同,您的设置都会变得更加复杂。有一种更简单、更安全的方法。
首先,在要存储数据的服务器上使用所需的存储引擎创建表。
然后,在另一台服务器上(您不希望表存储数据的地方),验证定义是否已复制并且表是否存在,然后:
这会将表更改为本地的 Blackhole 表,而不会将更改复制回其他主服务器。这是您只需要在布置桌子时做一次的事情。在那之后,我们正常使用它。
黑洞存储引擎...
具有黑洞表的服务器仍将通过涉及该表的复制查询进行搅动,但开销大大减少(对表的写入将被丢弃),并且
SELECT * FROM table
将始终返回……什么都没有。您可以在一台服务器上写入真实表,而不会占用空间,也不会在另一台服务器上选择表中的数据。
警告:如果您根据该表中的内容操作其他表中的数据(
INSERT ... SELECT
...UPDATE ... JOIN
...等),那么您需要使用binlog_format
=ROW
或完全放弃这个想法,因为如果没有该表,这些查询将无法工作两个主人的数据,如果你binlog_format
是STATEMENT
,并且也不一定能可靠地与MIXED
模式一起工作。您可以在会话中禁用二进制日志,然后创建表,使用它并删除: