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

时间:2011-05-24 21:25:17

标签: mysql ms-access

我正在使用Mysql后台数据库运行MsAccess,今天我遇到了一些问题。

根据我可以进入程序的程度,我可以获得所有名称和条目的列表。但是一旦我进入任何条目的编辑形式,我会得到各种各样的结果。有时我很幸运,我可以看到第一个条目。但是之后的任何条目总是会出现MsAccess错误:对象无效或不再设置然后任何后续调用将产生一个Mysql ODBC错误 Mysql服务器已经消失。

我查看了几个网站,甚至所有堆栈溢出网站都有相同的问题,我尝试了各种解决方案。 (请记住,此数据库已运行多年,这是我第一次收到此消息)在显示任何错误消息之前,它还需要大约2m14s到2m59s。

这是我到目前为止所尝试的内容:

  1. 我尝试更改了一些ODBC连接设置。
    • 选中允许大结果 - FAILED
    • 已选中启用自动重新连接 - FAILED
  2. 我已检查并修复了表格 - FAILED
    • 许多表格导致“表需要更新请修复表”
  3. 我将my.cnf配置中的数字加倍,并重新启动了mysql服务以及msaccess软件。的 FAILED
    • 这些是我做出更改后my.cnf的设置。
  4. 下面:

    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: Has gone away 如果我通过项目符号列表

    • 没有人杀死正在运行的线程
    • 我不认为查询是在连接关闭后运行的(因为它运行了好几年)
    • 客户端应用程序确实具有所需的权限
    • 我不知道如何判断客户端的TCP / IP连接是否超时
    • 我不知道我是否在服务器端阻止了超时,但我确实知道客户端中的自动重新连接被禁用
    • ???
    • 查询可能很大,因为它是一个包含许多子表单的表单
    • ???
    • DNS应该没问题,因为我可以使用真正的sql viewer(HeidiSQL)连接到它
    • ???儿童叉???
    • ???

    我认为这是其中一个难以理解的错误,因为我已经筋疲力尽了:/我可能错过了一些信息,但我不确定还包括哪些内容。

    --- --- EDIT

    谢谢大家的意见,我还在调试这个问题。似乎并非所有形式都会导致某些问题。所以我开始认为这是一个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提供商使用路由器设置建立的设置中时等等......所以基本上这个问题基本上是服务器,软件和硬件之间没有问题。

    所以现在,我必须向后设计我所做的一切,并尝试让它在两个ips上工作。它现在适用于重要的一个。但它不适用于旧的...所以我想我只需要解决这个问题。 [在空中挥舞着想象中的拳头] Lol

3 个答案:

答案 0 :(得分:2)

问题是连接超时。这不是您可以在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

答案 1 :(得分:1)

我没有在生产环境中使用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地址更改时难以解决问题的好方法)

答案 2 :(得分:0)

[mysqld-5.0.92-community]Lost   
connection to MySQL server during query (2013) 

这个genary意味着您在MySQL-Server中发现了一个错误 你可以张贴你的mysqld.err和mysqd.log的尾巴

这会使服务器重新启动,并且会有效关闭所有打开的连接