MySQL:向从节点写入数据

7
假设我有一辆汽车数据库,其中包含制造商和型号(制造商为外键)。我计划让用户跟踪他们的车辆。每辆车都有一个指向型号的外键。现在,我有很多用户,我想分割我的数据库以分配负载。制造商和型号表不会经常更改,但它们需要在分片之间共享。我的想法是使用MySQL复制从主要的制造商和型号数据库到每个从数据库。我的问题是:如果我不写入主数据库上的这些表,我是否可以安全地写入从数据库?
另外,谈到这个话题,有没有方法可以保证一个从数据库具有最新的数据?例如,有人刚刚添加了“牛头标”制造商,然后想添加他们的汽车。我能确保他们正在使用的从数据库具有最新的主数据吗?
2个回答

7

通常情况下,您可以安全地向从节点上的表写入数据,而该表并没有在主节点上进行写入。如果您在从节点和主节点上独立地插入auto_increment行之类的操作,当然会出现问题。您应该将该表完全排除在复制范围之外。

为了检查是否具有最新数据,SHOW SLAVE STATUS包括一个名为Seconds_Behind_Master的字段,告诉您从节点是否已经更新。显然,您希望它是零。当然,要确保插入和复制的数据存在,您需要等待一秒钟,然后再检查Seconds_Behind_Master是否为零。


你知道是否有一个阻塞命令可以与主服务器同步吗? - Brian Henk
没有。 (忽略 LOAD DATA FROM MASTER,它不会做你想要的事情,而且已经损坏了。) - chaos
有没有写透机制:从属只是将写请求转发给主服务器? - Velkan
@Velkan:我不知道有没有这种情况,但我可能有些过时了。你最好把这个当做一个问题来问,而不是评论。 - chaos

5

我在搜索时找到一个好的解决方案,内容如下:

主要点可以在此处获得:

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

MySQL 主-主 复制和自增索引

如果您正在使用主-从复制,则很可能会设计应用程序以将数据写入主服务器并从从服务器或多个从服务器读取数据。但是当您使用主-主复制时,您将读写任何一个主服务器。因此,在这种情况下,自增索引的问题就会出现。当两个服务器都必须向同一张表添加记录(每个服务器同时添加一个不同的记录)时,每个服务器都会分配相同的索引并尝试复制到从服务器,这将创建冲突。简单的技巧可以避免 MySQL 服务器上的这些冲突。

在主1/从2中添加到 /etc/my.cnf:

auto_increment_increment= 2
auto_increment_offset   = 1

在主2/从1中添加到/etc/my.cnf文件:
auto_increment_increment= 2
auto_increment_offset   = 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接