我目前在两个大师之间进行了MySQL复制,一个在本地的数据中心中,另一个在Amazon EC2上进行。

一切似乎都在正常复制方面起作用,本身没有问题,除了偶尔会导致碰撞的查询,但它们之间很少。最近,我设置了MySQL-Proxy,以尝试加载两个服务器,在本地机器接收到40或更多的连接之后,负载平衡在启动下确实是在此时,然后随后的数据库连接被拆除到EC2机器上。

我们最近注意到的是,MySQL代理会通知我们有41个连接,然后开始其平衡。但是,当我连接到本地计算机并执行 SHOW PROCESSLIST; 它可能只为我提供30个连接。

有人知道为什么这可能吗?

除此之外 SHOW PROCESSLIST; 命令我注意到,两台机器上都有很多查询,这些疑问声明它们一直超过5000秒。我很确定这些是“僵尸”查询,但是有人知道为什么它们是首先创建的吗?

仅供参考,我们正在使用Ubuntu和Debian的最新版本运行MySQL版本5.1.54。

任何想法都会非常有帮助。

附录

事实证明,我们没有使用mysql_pconnect,而是使用MySQLI库进行了INFACT。我仍然无法确定为什么会发生这种情况,并一旦发现就会报告。

有帮助吗?

解决方案

我反对在双主机设置中写信给两个大师。有太多的事情可能会出错,并且可以解决问题 - 自动插入,其他重复键等。

数百个“睡眠”连接实际上对服务器没有影响,因此限制为40是没有用的。 10或更多 积极的 连接(非睡眠)可能是一个问题。在这种情况下,我会查看查询。通常,优化查询是最好的答案。

还要注意,必须在所有其他大师和奴隶上完成对一个主人完成的每个写(插入,更新等)。因此,您不能真正“传播”写作。

如果您只有读取(选择)的过程,那么它们应该转到奴隶和/或备用主人,而不是现场,可写的,主人。这将有所帮助。

注意“批判写入”问题。示例:用户发布博客评论,然后查看他的评论,但缺少。如果写入一台计算机,这可能会发生这种情况,但是读取了另一台机器,复制在“后面”。

(我的评论适用于所有版本,以及所有API,不仅是5.1和PHP的Mysqli。)

我远离MySQL_PConnect(以及其他连接池机制)。 MySQL中的连接启动/拆卸非常快。合并的连接可能与@Variables,事务模式,SQL_MODES等有问题。

许可以下: CC-BY-SA归因
不隶属于 dba.stackexchange
scroll top