尝试连接时MySQL.Data:“对象引用未设置为对象的实例”
问题描述:
我有一台“Cron服务”,我在生产服务器上运行了一年半以上。尝试连接时MySQL.Data:“对象引用未设置为对象的实例”
这是一个常规的windows服务,每分钟连接到数据库,在一张桌子上检查是否有什么事要做,如果是的话,是否这样做。这是一个网站的服务器,用处不大,所以大部分时间服务完全闲置。
几个月前,这项服务开始抛出以下异常和死亡:
MESSAGE: Object reference not set to an instance of an object.
SOURCE: MySql.Data
TARGETSITE: MySql.Data.MySqlClient.Driver CheckoutConnection()
STACKTRACE: at MySql.Data.MySqlClient.MySqlPool.CheckoutConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.TryToGetDriver()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
at DBA.Connect() in D:\xxx\DBA.vb:line 21
at CronService.TaskMailings.OnExecute() in D:\xxx\TaskMailings.vb:line 54
at CronService.CronTask.ThreadExecute() in D:\xxx\CronTask.vb:line 99
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
异常显然是从MySQL库里面来了。另外,我的函数调用它是非常简单的:
Public Shared Function Connect() As MySqlConnection
Dim strConnString As String = WebConfigurationManager.AppSettings("ConnectionString")
Dim DBConn As New MySqlConnection(strConnString)
DBConn.Open()
Return DBConn
End Function
在哪里我打电话DBA.Connect()(CronService.TaskMailings.OnExecute)与“使用”声明中这样的功能,所以连接是正在关闭,这个不应该是一个连接被打开并耗尽的问题(尽管它可能,如果MySQL库内有bug的话)。
这是我使用该服务的连接字符串:
server=localhost;port=13306;uid=xxx;pwd=xxx;database=xxx;Pooling=True;charset=utf8;
任何想法可能是怎么回事? 最奇怪的部分是,在它开始出现蓝屏之前,这已经运行了一年多了,我相信,加载到服务器的变化不足以证明它是一个负载问题。
编辑:一些死了的时代,它给这个其他错误消息:
MESSAGE: error connecting: Timeout expired. The timeout period elapsed prior to obtaining a connection from the pool. This may have occurred because all pooled connections were in use and max pool size was reached.
SOURCE: MySql.Data
TARGETSITE: MySql.Data.MySqlClient.Driver GetConnection()
STACKTRACE: at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlConnection.Open()
atDBA.Connect() in D:\xxx\DBA.vb:line 21
虽然该错误信息是很清楚,就像我之前提到的,我们发布的所有连接,所以这不应该发生。有任何想法吗?
答
我意识到这是一个老问题,不过问题在于mysql.data.dll
在此对所测试的什么版本?
我目前在5.2.2.0中看到这个问题(并且它不会在5.0.1.0中发生)。
我会建议降级5.0.1.0或升级到最新,看看它是否仍然存在。
你检查了事件查看器吗? – CheeseConQueso 2009-11-24 21:47:54
是的。除了我自己的应用程序发布的错误报告(详细信息是我上面发布的内容)和“应用程序”日志中的条目之外,没有任何内容表明我的进程抛出未处理的异常并死亡。 – 2009-11-24 21:56:00
它是100%的时间还是偶尔会死? – 2009-11-25 05:02:42