MySQL复制-可以选择从节点上的查询干扰复制进程



我明白mysql复制在slave上使用两个不同的线程-

  1. 从I/O线程从主端读取binlog并将其写入本地中继日志
  2. 从SQL线程执行本地中继日志中的SQL语句。这个线程用于执行sql的更新,删除和创建。

slave上的select查询呢?SELECT查询是否会干扰复制进程?或者有一个不同的线程执行SELECT查询?

我的意思是,从服务器上的慢速select查询会使复制落后于主服务器吗?

在简短的查询中可能会干扰复制,这里重要的不是线程,而是应用的锁定(ACID vs.线程)。从服务器复制到从服务器的更新查询可能会被从服务器上的选择查询阻塞。然而,复制子系统将在大多数情况下处理这些查询锁定问题。如果不介意脏读,可以将从属服务器上的事务序列化隔离级别设置为限制较少的级别,以降低风险。但是,请确保脏读取是可接受的,请参阅此链接获取更多信息:http://dev.mysql.com/doc/refman/5.0/en/set-transaction.html

你关心的是延迟,这不是你可以消除的东西,在任何复制模式中都会有延迟。在主从之间几乎总是有一个网络。这将从一开始就引入延迟。例如,大型复制语句可能会使网络带宽饱和,这可能比阻塞复制的查询更经常发生。复制从来不是,也永远不会是瞬间的。所以你关于延迟的观点可以这样回答:延迟是你必须处理的东西,而不是你可以完全消除的东西。

别误会我的意思,复制可以很快,但绝不是瞬间的。

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

虽然复制在许多地方都很有用,但您需要确保在许多层面上为它做好准备,例如适当的网络基础设施,如何在灾难恢复(故障转移)期间处理它,在生产期间监视它,以及如何在它崩溃时使它恢复在线。

最新更新