【问题标题】:MySQL: Writing to slave nodeMySQL:写入从节点
【发布时间】:2010-12-03 19:30:12
【问题描述】:

假设我有一个汽车数据库。我有品牌和型号(FK 到品牌)。我计划让用户跟踪他们的汽车。每辆车都有一个 FK to Model。现在,我有很多用户,我想拆分我的数据库来分配负载。 Makes 和 Models 表没有太大变化,但它们需要在分片之间共享。我的想法是使用从品牌和模型的主数据库到每个从数据库的 MySQL 复制。我的问题是:假设我不写入主数据库上的那些表,我可以安全地写入从数据库吗?

在这个问题上,有没有办法保证一个从数据库有最新的数据?例如,有人刚刚添加了“Taurus”品牌,然后想要添加他们的汽车。我能保证他们使用的从数据库有最新的主数据吗?

【问题讨论】:

    标签: mysql database database-design replication database-replication


    【解决方案1】:

    这是我在搜索时收集到的一个很好的解决方案

    我在这里包含了要点:

    http://erlycoder.com/43/mysql-master-slave-and-master-master-replication-step-by-step-configuration-instructions-

    MySQL 主-主复制和自增索引

    如果您正在使用主从复制,那么您很可能会设计您的应用程序以写入主服务器并从从属或多个从属读取。但是当您使用主-主复制时,您将读取和写入任何主服务器。因此,在这种情况下,自动增量索引的问题将会出现。当两台服务器都必须向同一个表中添加一条记录(每台服务器同时添加一条不同的记录)时。每个人都会为他们分配相同的索引,并尝试复制到salve,这将产生冲突。简单的技巧将允许避免 MySQL 服务器上的此类冲突。

    在 Master 1/Slave 2 上添加到 /etc/my.cnf:

    auto_increment_increment= 2
    auto_increment_offset   = 1
    

    在 Master 2/Slave 1 上添加到 /etc/my.cnf:

    auto_increment_increment= 2
    auto_increment_offset   = 2
    

    【讨论】:

      【解决方案2】:

      是的,一般来说,您可以安全地写入未写入主服务器的从服务器上的表。如果你独立地在从属服务器和主服务器上插入auto_increment 行,你当然会遇到问题。您应该将该表配置为完全从复制中排除,真的。

      为了检查您是否有最新的数据,SHOW SLAVE STATUS 包含一个字段Seconds_Behind_Master,告诉您从站是否是最新的。显然你希望它为零。当然,要确定插入和复制的数据是否存在,您需要等待一秒钟,然后然后看到Seconds_Behind_Master 为零。

      【讨论】:

      • 不知道有没有同步到master的阻塞命令?
      • 没有。 (忽略LOAD DATA FROM MASTER,它不会做你想做的事,而且无论如何都坏了。)
      • 有没有write-through机制:slave只是把写请求转发给master?
      • @Velkan:我不知道,但我不是最新的。您可能应该将其作为问题而不是评论提出。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-12-06
      • 2021-12-05
      • 1970-01-01
      • 1970-01-01
      • 2019-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多