我需要复制一些数据库,如下所示。
-DB1---replicate to---> SLAVE_A
/
MASTER <--DB2---replicate to---> SLAVE_B
\
-DB3---replicate to---> SLAVE_C
如果我控制主服务器和所有从服务器,那么here描述的过程会很好用,但不幸的是我在这种情况下只能控制主服务器。奴隶可能在不同的国家,由其他管理员运营。
我担心的是SLAVE_A上的配置可以很容易地更改为不仅复制目标DB1,还复制DB2和DB3,这是不好的。
我唯一的希望是限制哪个从属设备复制哪个数据库是否可以以某种方式从主设备控制它,从我能够弄清楚的,这是无法完成的。用户对所有数据库都具有复制权限,或者没有,这是不幸的。
我在这里遗漏了什么,或者这仅仅是MySQL的限制? 有关如何实现这一点的任何想法?
感谢。
答案 0 :(得分:2)
在从属服务器上,可以过滤要通过my.cnf文件中包含的 replicate-do-db 或 replicate-ignore-db 参数应用的事务,或者在命令行中作为选项。 使用binlog-do-db或binlog-ignore-db可以在master上完成相同的操作但是 - 它限制复制在master上执行某些某些数据库。因此,对您来说,更好的解决方案是过滤奴隶上的交易。
答案 1 :(得分:-1)
为每个复制从属创建不同的MySQL用户,并授予该用户仅对您希望其具有复制访问权限的数据库的访问权限。
您可以在MySQL文档中阅读更多内容:16.1.1.3. Creating a User for Replication
CREATE USER 'slave_a'@'some_slave_server' IDENTIFIED BY 'slavepass';
GRANT REPLICATION SLAVE ON `DB1`.* TO 'slave_a'@'some_slave_server';
FLUSH PRIVILEGES;
然后分别在DB 2和3上重复Slaves B和C.