【问题标题】:Replicating Different Databases to Different Slaves将不同的数据库复制到不同的从站
【发布时间】:2012-11-14 22:31:12
【问题描述】:

我需要复制一些数据库,如下所示。

         -DB1---replicate to---> SLAVE_A
        /
MASTER <--DB2---replicate to---> SLAVE_B
        \
         -DB3---replicate to---> SLAVE_C

here 描述的过程如果我同时控制主服务器和所有从服务器就可以正常工作,但不幸的是,在这种情况下我只控制主服务器。奴隶可能在不同的国家,由其他管理员管理。

我担心的是 SLAVE_A 上的配置很容易更改为不仅复制预期的 DB1,还复制 DB2 和 DB3,这不好。

我唯一希望限制哪个从属复制哪个数据库是如果我能以某种方式从主控控制它,据我所知,这是无法做到的。一个用户要么拥有所有数据库的复制权限,要么没有,这是不幸的。

我在这里遗漏了什么,还是这只是 MySQL 的一个限制? 关于如何实现这一点的任何想法?

谢谢。

【问题讨论】:

    标签: mysql database replication privileges


    【解决方案1】:

    在从服务器上,可以通过 my.cnf 文件中包含的 replicate-do-dbreplicate-ignore-db 参数过滤要应用的事务或在命令行中作为选项。 使用 binlog-do-db 或 binlog-ignore-db 可以在 master 上执行相同的操作,但随后 - 它限制了 master 上某些特定数据库的复制。所以对你来说更好的解决方案是过滤从服务器上的事务。

    【讨论】:

      【解决方案2】:

      为每个复制从属创建不同的 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 上的从站 B 和 C 重复此操作。

      【讨论】:

      • 在尝试上面的示例时出现以下错误:#1221 - DB GRANT 和 GLOBAL PRIVILEGES 的使用不正确事实上,我在发布问题之前尝试了这个。尽我所能,复制是一种全球特权。要么是所有数据库,要么没有:(
      猜你喜欢
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-17
      • 2018-11-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多