难以调试“ Mysql服务器已消失”

问题描述

| 我正在使用MysqL后台数据库运行MsAccess,今天却遇到了一些问题。 根据进入程序的距离,我可以获得所有名称和条目的列表。但是,一旦进入任何条目的编辑表单,我都会得到各种结果。有时我很幸运,可以看到第一个条目。但是,此后的任何条目都将始终出现MsAccess错误:对象无效或不再设置,然后任何后续调用将产生MysqL服务器的MysqL ODBC错误。 我到处逛逛了几个网站,甚至所有栈溢出站点都遇到同样的问题,并且尝试了各种解决方案。 (请记住,该数据库已经运行了多年,这是我第一次收到此消息)显示任何错误消息之前,大约还需要2到14毫秒到2到59毫秒。 这是我到目前为止尝试过的: 我尝试更改一些ODBC连接设置。 选中允许大结果-失败 选中启用自动重新连接-失败 我已检查并修复桌子-失败 大量表导致“表需要更新,请修复表” 我已经将my.cnf配置中的数字加倍,并重新启动了MysqL服务以及msaccess软件。失败 这些是我进行更改后my.cnf的设置。 这里:
set-variable = max_connections=500
safe-show-database
log-error=/var/log/MysqLd.log
connect_timeout=1000
interactive_timeout=28800
wait_timeout=288000          <**This was changed**

join_buffer_size=6M
key_buffer_size=300M         <**THIS WAS CHANGED **
max_allowed_packet=300M      <**THIS WAS CHANGED **
myisam_sort_buffer_size=300M <**THIS WAS CHANGED **
read_buffer_size=6M
sort_buffer_size=6M
table_cache=12288
thread_cache_size=24
tmp_table_size=132M
query_cache_limit=3M
query_cache_size=64M
query_cache_type=1
基本上,到目前为止,我已经尝试了所有可以找到的建议,但似乎无法找出问题所在。 我也看过MysqL:已经走了 如果我在那里查看项目符号列表 没有人杀死正在运行的线程 我不认为该查询是在连接关闭后运行的(因为运行了好几年) 客户端应用程序确实具有所需的特权 我不知道如何确定客户端的TCP / IP连接是否超时 我不知道服务器端是否超时,但是我知道客户端中的自动重新连接已禁用 ??? 该查询可能是很大的,因为它是一个包含许多子表单的表单 ??? DNS应该可以,因为我可以使用真正的sql查看器(Heidisql)连接到它 ???儿童叉子??? ??? 我认为这是由于我已经筋疲力尽而难以弄清的错误之一:/我可能缺少一些信息,但是我不确定还包括什么。 - -编辑 - - 谢谢大家的评论,我仍在调试此问题。似乎不是所有导致某些问题的表格。因此,我开始认为这是MSAccess问题,而不是MysqL问题。确实损坏的表单在其VBA代码中具有相同的行:
Private Sub Form_Error(DataErr As Integer,Response As Integer)
    If Screen.ActiveControl.Name = \"UnboundTextBox\" Then
       Response = acDataErrContinue
    End If
End Sub
我不记得将这段代码放入其中,因此我认为它是自动的,但是我仍在遍历所有表单以查看哪些表单会导致此错误,而哪些不会。因此,更多。 ---今天我正在进行一些调试,以尝试从可以召集的任何日志中找到可以解决的所有内容----
 MSACCESS        17ec-b10   EXIT  sqlStatisticsW  with return code -1 (sql_ERROR)
    HSTMT               0AF82920
    WCHAR *             0x00000000 [      -3] <empty string>
    SWORD                       -3 
    WCHAR *             0x00000000 [      -3] <empty string>
    SWORD                       -3 
    WCHAR *             0x0013AAE8 [      -3] \"location\\ 0\"
    SWORD                       -3 
    UWORD                        1 <sql_INDEX_ALL>
    UWORD                        0 <sql_QUICK>

    DIAG [08S01] [MysqL][ODBC 3.51 Driver][MysqLd-5.0.92-community]Lost   
 connection to MysqL server during query (2013) 
-----------------------------最终编辑------------------- ------- 在过去一周左右的时间里,我的老板一直在努力为我们的办公室安装新的内部服务器。我们还多次交换了IP和ISP提供商。结果是,当我尝试调试服务器问题以及软件问题等时,他为我创建了一个管理上的噩梦。当问题出在设置中时,用路由器设置建立的ISP提供程序等等...等等...基本上,这头疼全是服务器,软件之间没有错,硬件之间没有错。 所以现在,我必须对我所做的一切进行后向工程,并尝试使其在两个ip上都能正常工作。它现在适用于重要的产品。但这在旧版本上不起作用,所以...我想我必须弄清楚这一点。 [挥舞着假想的拳头]哈哈     

解决方法

问题是连接超时。这不是您可以在ODBC级别更改的设置。我的MySQL提供程序已将超时设置为30秒(您可以通过运行PassThrough查询\“ SELECT @@ wait_timeout \”来了解您的设置)。我通过使用简单表格每10秒轮询一次连接来解决此问题。这样可以使连接保持活动状态。确保您有一个AutoExec宏,可以打开该窗体。
Private Sub Form_Open(Cancel As Integer)
    Me.TimerInterval = 1000 \' 10 seconds
End Sub

Private Sub Form_Timer()
    Me.Requery
End Sub
    ,我没有在生产环境中将MySQL与Access一起使用,但是您遇到的问题听起来与我在SQL Server中遇到的问题类似。基本上,如果客户端工作站的DNS设置不正确,则会对如何解析与SQL Server的连接并丢失连接感到困惑。在遇到这种情况的情况下,工作站被错误地配置为使用Internet提供商的DNS作为主要DSN,但是SQL Server是本地服务器,仅在本地LAN上可用(而不是由ISP映射) DNS)。 解决方案是将本地域控制器用作主DNS。它将查找本地SQL Server的IP,并将所有非本地查询传递给Internet提供商的DNS。 如果没有Windows / Samba域控制器,则需要使用本地LAN的授权名称服务器。另外,您也可以通过IP地址连接到MySQL服务器并避免该问题,或者将其映射到客户端工作站的HOSTS文件中(不建议这样做-这是一种很难解决问题的好方法IP地址更改)。     ,
[mysqld-5.0.92-community]Lost   
connection to MySQL server during query (2013) 
这个一般性的意思是您在MySQL-Server中发现了一个错误 您可以张贴mysqld.err和mysqd.log的尾巴吗 这将使服务器重新启动,并有效关闭所有打开的连接