MySQL Replication - 可以选择Slave节点上的查询干扰复制过程吗?

时间:2013-01-08 09:58:02

标签: mysql replication

据我所知,mysql复制在slave上使用了两个不同的线程 -

  1. Slave I / O线程从master读取binlog并将其写入本地中继日志
  2. Slave SQL线程,用于从本地中继日志执行sql语句。该线程用于执行更新,删除和创建sqls。
  3. 对奴隶的选择查询怎么样? SELECT查询是否会干扰复制过程?或者是否有一个执行SELECT查询的不同线程?

    我的意思是,可以减慢slave上的select查询,使复制落后于master吗?

1 个答案:

答案 0 :(得分:2)

简而言之,查询可能会干扰复制,但这不是线程,而是应用锁定(ACID与线程)。可以通过从站上的选择查询阻止正在复制到从站的主站的更新查询。但是,复制子系统大多数时候都会处理这些查询锁定问题。如果您不介意脏读,则可以将从站上的事务序列化隔离级别设置为较少限制以降低风险。但是,请确保脏读是可接受的,请参阅此链接以获取更多信息:http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

您担心延迟,并且在任何复制模式中都不能消除延迟。主站和从站之间几乎总是有网络。这将从一开始就引入滞后。例如,大型复制语句可能会使网络带宽饱和,这可能比阻止复制的查询更频繁地发生。复制永远不会,也永远不会是即时的。所以关于滞后的观点可以回答,因为这种滞后是你必须处理的事情,而不是你可以完全消除的事情。

不要误解我的复制可以很快,但绝不是瞬间。

要记住的另一件事是复制可能会失败,您也需要为此进行规划。它会在某个时刻发生,并为此做好准备是至关重要的。因此,无论你如何进行复制,基本上你都会有延迟,你需要能够处理它。还要准备好在某些时候复制失败以及如何从中恢复。

虽然复制在许多地方都很有用,但您需要确保在许多级别上做好准备,例如充足的网络基础架构,如何在灾难恢复(故障转移)期间处理它,在生产期间监控它以及如何获取它在休息时重新上线。