MySQL复制速度

时间:2009-08-17 05:06:39

标签: php mysql replication

假设我们在局域网上有3台服务器:

APP - php app server

MASTER - 掌握Mysql数据库服务器

SLAVE - 从属Mysql数据库服务器(复制MASTER)

在一个代码块(php) APP 中插入 MASTER ,检索last_insert_id,然后使用它从 SLAVE <中选择刚插入的数据/强>

所以问题是,复制是否及时发生 SLAVE 来获取 MASTER 的数据?是否会受到 MASTER SLAVE 的负载影响?

最后,如果数据存在问题,是否有办法确保从 SLAVE 收到最新数据?

2 个答案:

答案 0 :(得分:5)

因为MySQL复制时间是一个无法控制的变量(即使在正确的实现中,也会出现停止复制或阻塞复制的问题),最好不要依赖数据复制。您可以将问题分解为两种情况:

1)我是用户进行CUD操作,我希望R操作后跟镜像我刚刚做出的改变。在这种情况下,您绝对需要从主服务器中提取数据,因为用户希望他的更改产生影响。

2)我是外部用户,我不知道发生了CUD命令,我一般不在乎,所以返回陈旧数据是可以接受的(在99%的实现中,否则你可能不会使用PHP *)。

#1的替代方案是通知用户他的改变正在传播,并且在某些情况下是可接受的,例如许多网站都会告诉你,x可能需要几分钟的时间才会出现,这就是这种情况。

  • 如果您需要即时更新,可以尝试写入与(可能不可靠的)DB数据一起轮询的缓存层。像memcached这样的东西将是一个主要的候选人。

答案 1 :(得分:0)

这取决于SLAVE服务器从MASTER服务器复制数据的速度。

如果它与INSERT,UPDATE和DELETE命令直接绑定,则意味着当您插入某些内容时,实际上是将它插入到两者上,很可能它们都可用。

如果SLAVE服务器通过每隔一段时间运行的任务复制MASTER以从MASTER获取数据,这比为每1个查询进行2次查询要便宜,这意味着数据直到任务已经完成。