MySQL复制速度

3
假设我们有三台本地区域网络服务器:
APP - PHP 应用服务器
MASTER - 主 MySQL 数据库服务器
SLAVE - 从 MySQL 数据库服务器(复制 MASTER)
在一个代码块中(PHP),APP 将数据插入到 MASTER 中,并检索最后插入的 ID,然后使用此 ID 从 SLAVE 中选择刚刚插入的数据。
那么问题是,复制是否已经及时完成,使得 SLAVE 从 MASTER 获取了数据?这是否受到放在 MASTER 或 SLAVE 上的负载的影响?
最后,如果存在数据可用性问题,是否有一种方法可以确保从 SLAVE 接收到最新的数据?
2个回答

5
由于MySQL复制时间是一个不可控的变量(即使在适当的实现中,也可能出现问题导致复制停滞或阻塞),最好不要依赖数据复制。您可以将问题分解为两种情况:
1)我是执行CUD操作的用户,我期望在此之后进行的R操作反映我刚刚所做的更改。在这种情况下,您绝对需要从主服务器上获取数据,因为用户希望他的更改产生了影响。
2)我是外部用户,我不知道是否发生了CUD命令,通常也不关心,因此返回陈旧数据是可以接受的(在99%的实现中,否则您可能不会使用PHP *)。
与#1相对应的替代方法是告知用户其更改正在传播,并且在某些情况下是可以接受的,例如许多网站将告诉您x可能需要y分钟才能出现,这就是这种情况的作用。
如果您需要即时更新,则可以尝试编写一个缓存层,该层与(潜在不可靠的)DB数据一起轮询。像memcached这样的东西将是一个主要候选者。

0

这取决于从主服务器复制数据到从服务器的速度有多快。

如果它直接与INSERT、UPDATE和DELETE命令相关联,意味着当您插入某些内容时,实际上会在两个数据库上都插入,那么很可能会在其中一个数据库中可用。

如果从服务器通过定期运行的任务来复制主服务器,这比针对每个查询进行2次查询要少成本,这将意味着在运行任务之前数据不可用。


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