这是我的Master-Master复制方案
-------------------
| Master/Slave 1 |
| Database = MainDB |
-------------------
/\
|
|
|
\/
-------------------
| Master/Slave 2 |
| Database = DB1 |
| Database = DB2 |
| Database = DB3 |
-------------------
这是我的Master / Slave1配置:
[mysqld]
binlog_format = MIXED
user = mysql
port = 3306
socket = /tmp/mysql.sock
#bind-address = 127.0.0.1
basedir = /usr/local
datadir = /var/db/mysql
tmpdir = /var/db/mysql_tmpdir
slave-load-tmpdir = /var/db/mysql_tmpdir
secure-file-priv = /var/db/mysql_secure
log-bin = MainDB.log
replicate-do-db = MainDB
replicate-rewrite-db = "DB1->MainDB"
replicate-rewrite-db = "DB2->MainDB"
replicate-rewrite-db = "DB3->MainDB"
replicate-rewrite-db = "DB4->MainDB"
log-output = TABLE
master-info-repository = TABLE
relay-log-info-repository = TABLE
relay-log-recovery = 1
slow-query-log = 1
server-id = 1
和我的Master / Slave2配置:
[mysqld]
binlog_format = mixed
user = mysql
port = 3306
socket = /tmp/mysql.sock
#bind-address = 127.0.0.1
basedir = /usr/local
datadir = /var/db/mysql
tmpdir = /var/db/mysql_tmpdir
slave-load-tmpdir = /var/db/mysql_tmpdir
secure-file-priv = /var/db/mysql_secure
log-bin = mysql-bin
log-output = TABLE
master-info-repository = TABLE
relay-log-info-repository = TABLE
relay-log-recovery = 1
slow-query-log = 1
server-id = 2
log_bin = cloud.log
binlog-do-db = DB1
binlog-do-db = DB2
binlog-do-db = DB3
binlog-do-db = DB4
使用这种配置,我可以从Master / slave2复制到Master / slave1,但它不能相反地复制。 云如何改变my.cnf以便将它们复制在一起?
答案 0 :(得分:0)
(1)如果主服务器没有将语句写入其二进制日志, 该声明未被复制。如果服务器记录了该语句, 该语句被发送给所有从站,每个从站确定是否 执行它或忽略它。
Master / Slave1 从 Master / Slave2 接收所有 DB%的binlog,这样他就可以处理将每个DB重写为<强> MainDB 即可。 (使用这个replicate-rewrite-db
即使这个选项对我来说也有点危险,你必须要有点儿,否则它会破坏看到option_mysqld_replicate-rewrite-db)。
首先,在master master中我认为你应该启用登录slave log_slave_updates
的选项,这样其他slave“master”就可以将语句存储在二进制日志(1)中。检查这一点以及how Servers Evaluate Replication Filtering Rules
另一方面, Master / Slave2 会收到一个binglog,其中包含一个数据库 MainDB ,并且没有任何内容可以帮助您参与另一个数据库。或者将所有内容重写为一个。
在主服务器上,您可以控制要记录更改的数据库 使用
--binlog-do-db
和--binlog-ignore-db
选项进行控制 二进制日志。
所以你必须在 Master / Slave1 中添加此选项,告诉他记录 MainDB 的更改,然后在 Master / Slave2 您指定要在其上重写的数据库或要在哪个数据库中复制的表
答案 1 :(得分:0)
是的,我们知道它应该与master / slave2中的某个数据库一起复制,但是我们想要回到那个已经复制到MainDB的特定数据库。