Mysql - 非常奇怪的行为:查询在本地工作,但对于某些人而言不在远程服务器上

时间:2010-10-24 19:16:49

标签: c# mysql mysql-connector

我有一个非常奇怪的事情,我们无法理解或解决。

简短版本: MySQL中的一些非常简单的SELECT查询会挂起进行查询的整个应用程序/程序。但是,它并不一致。如果我在本地具有完全相同的MySQL版本,具有完全相同的表结构和完全相同的数据,则查询工作正常。但是当在远程服务器上执行完全相同的查询时(通过例如HeidiSQL) - 它会挂起。

我们正在用C#编写代码,我们也在那里看到完全相同的行为。

长版: 我们有两个远程服务器,REMOTE1和REMOTE2。

REMOTE1拥有MySQL 5.1.51社区。

REMOTE2有MySQL 5.0.27-community-nt

在本地我运行MySQL 5.1.36-community。

有时,在REMOTE1上执行特定查询(如下所列)时,正在执行查询的应用程序挂起。

例如,当我通过HeidiSQL从我的计算机执行查询时,会发生这种情况。 当我的工作伙伴使用HeidiSQL完成同样的事情时,它可以工作(我们在同一个网络上)。但是,如果我的工作伙伴不是从HeidiSQL执行相同的查询,而是从我们自己的C#程序执行 - 那么它也会挂起。

我们自己的程序是用C#编写的,我们可以清楚地看到,当发送查询时(通过MySQL连接器),它永远不会从该方法返回,因此会挂起。

现在,当在REMOTE2上执行完全相同的查询时,它完全没有任何问题,包括HeidiSQL和C#-code。在REMOTE2上执行相同的查询时,我或我的工作伙伴都没有任何问题。

在本地测试时,它永远不会挂起(无论是通过C#还是HeidiSQL)。

另请注意:

  • 我们将REMOTE1上的MySQL服务器升级到了5.1.51,因为以前的版本也存在问题
  • 我的工作伙伴有两台电脑,其中一台有HeidiSQL版本5.0.0.3272,另一台版本有5.1.0.3316。在这两台计算机上,他都可以手动执行查询,它可以在REMOTE1上运行,但不能通过C#代码。
  • 在C#-code中,我们尝试了3种不同的连接器,MySQL Connector 5.x.x,6.1.5和6.3.5;似乎没什么用。
  • 我更新了HeidiSQL 5.1.0.3569,同样的错误显示。

任何想法? =)

表结构如下所示。当排除“消息”列时,它始终有效,因此它与该列有关。

CREATE TABLE `sammessages` (
 `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
 `externalMessageId` BIGINT(10) UNSIGNED NULL DEFAULT NULL,
 `timeStamp` DATETIME NOT NULL DEFAULT '0000-00-00 00:00:00',
 `message` TEXT NULL COLLATE 'latin1_general_ci',
 `direction` SET('INCOMING','OUTGOING','EXCEPTION','LOG') NULL DEFAULT NULL,
 `central` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
 `isCleaned` TINYINT(1) UNSIGNED NULL DEFAULT '0',
 PRIMARY KEY (`id`),
 INDEX `NewIndex` (`timeStamp`),
 INDEX `central_timestamp` (`central`, `timeStamp`),
 INDEX `direction` (`direction`)
)
ENGINE=InnoDB
ROW_FORMAT=DEFAULT
AUTO_INCREMENT=65352

查询:

SELECT message FROM sammessages WHERE central='9' AND direction='INCOMING' AND timestamp >= '2010-10-24 04:00:00' AND timestamp <= '2010-10-24 23:00:00' AND message LIKE '%700%' AND message LIKE '%+%'

2 个答案:

答案 0 :(得分:1)

你在mysql中的

试过

grant all privileges on mydbname.* to mydbuser@'%' identified by 'mydbpasswd'

grant all privileges on mydbname.* to mydbuser@'138.239.201.234' identified by 'mydbpasswd' with grant option; 

答案 1 :(得分:1)

您的应用程序的某些其他部分是否有可能在更新期间锁定表格?您的查询可能会碰到该锁定,但由于它有时只会发生,因此症状似乎是查询来自的系统。只是在黑暗中刺伤,真的,但要看一看。