7

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

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

4

2 回答 2

7

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

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

于 2009-10-04T23:28:06.360 回答
5

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

我在这里包括了要点:

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
于 2013-05-10T21:10:07.023 回答