1

FEDERATED我在 MySQL 中的表有一个问题。我有一台服务器(MySQL 版本 5.0.51a),用于存储客户端数据,实际上仅此而已。逻辑数据库存储在另一台服务器(版本 5.1.56)中,有时它应该处理来自第一台服务器的数据。所以第二台服务器有一个FEDERATED表,连接到第一台服务器。

实际上,它没有任何问题,但最近我在使用这个解决方案时遇到了奇怪的错误。第二台服务器上的某种查询无法正确执行。

例如SELECT * FROM table- 不起作用。它正好挂了 3 分钟,然后给出:

错误代码:1159 读取通信包超时

好的,我检查了第一台服务器上的表,没关系。然后我尝试了一些其他查询FEDERATED表,它们工作......

例如,query likeSELECT * FROM table WHERE id=x返回结果。可能结果的大小可能有问题,所以我尝试使用 dummy WHERE-clause like SELECT * FROM table WHERE id > 0- 进行查询,它也可以工作......

最后我找到了一个“解决方案”,它只帮助了两天——在第一台服务器上我制作了一个表的副本,在第二台服务器上我重新声明了一个FEDERATED带有新连接字符串的新表到这个副本。它有效,但两天后新复制的表出现同样的问题。

我已经与两家服务器提供商进行了交谈,他们认为没有任何问题,一切似乎都正常,而其他托管服务提供商是问题的根源。

我已经检查了 MySQL 中的所有变量,并且没有 3 分钟等超时参数。那么我该如何处理这样的问题呢?这似乎是网络或数据库端的自动操作,但我不知道如何检测问题的原因。

你有什么想法?

4

2 回答 2

0

您可以尝试检查两台服务器上网络接口的 MTU 大小设置。

于 2013-05-01T19:02:11.837 回答
0

当空闲线程被 wait_timeout 杀死时,会记录此警告。

通常,避免线程被 wait_timeout 杀死的方法是在不再需要连接时在脚本中调用 mysql_close()。不幸的是,这不适用于通过联合表进行的查询,因为查询和连接不在同一台服务器上。

例如,当在联合表的服务器 A 上执行查询时(指向服务器 B 上的数据),它会在服务器 B 上创建一个连接。然后当您在服务器 A 上运行 mysql_close() 时,它显然无法关闭该连接在服务器 B 上创建。

最终,在“ wait_timeout ”中指定的秒数(默认为 8 小时)过后,mysql 会终止连接。这会在您的 mysqlerror.log 中生成警告“读取通信数据包超时

于 2018-05-21T00:40:40.783 回答