MySQL 复制 - 从节点上的选择查询会干扰复制过程吗?

Posted

技术标签:

【中文标题】MySQL 复制 - 从节点上的选择查询会干扰复制过程吗?【英文标题】:MySQL Replication - Can select queries on Slave node interfere with replication process? 【发布时间】:2013-01-08 09:58:02 【问题描述】:

我知道mysql复制在slave上使用了两个不同的线程——

    Slave I/O线程从master读取binlog并写入本地relay log 从 SQL 线程执行本地中继日志中的 sql 语句。该线程用于执行更新、删除和创建sqls。

slave 上的选择查询呢? SELECT 查询会干扰复制过程吗?或者是否有执行 SELECT 查询的不同线程?

我的意思是,slave 上的慢速选择查询会使复制落后于 master 吗?

【问题讨论】:

【参考方案1】:

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

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

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

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

虽然复制在许多地方都很有用,但您需要确保在多个层面上为它做好准备,例如足够的网络基础设施、如何在灾难恢复(故障转移)期间处理它、在生产期间对其进行监控以及如何获取当它中断时它会重新联机。

【讨论】:

感谢您的详细回复。是的,复制从来都不是瞬时的。我想知道的是从属上的选择查询是否会以任何方式影响复制。您已经提到 - 从主服务器到正在复制到从服务器的查询的更新查询可以被选择查询阻塞。感谢您的澄清 请记住它可能会发生。通常这些情况会很快得到解决,您不会注意到它们。来自主服务器的更新也可以阻止从服务器上的选择。这是数据库的正常操作,所以就像我提到的那样,这通常是一个较小的问题。由于我没有您的要求等,因此很难给您一个明确的答案。

以上是关于MySQL 复制 - 从节点上的选择查询会干扰复制过程吗?的主要内容,如果未能解决你的问题,请参考以下文章

Mysql主从复制

数据库 之 Mysql复制过滤器

MySQL过滤复制

mysql单向复制

mysql的单向复制

如何使用 MySQL 查询从表中选择除一列之外的所有内容? [复制]