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

Mal*_*low 15 mysql ms-access

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

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

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

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

  1. 我试过更改一些ODBC连接设置.
    • 选中允许大结果 - 失败
    • 选中启用自动重新连接 - FAILED
  2. 我检查并修理了桌子 - 失败了
    • 大量的表导致了"表需要更新请修复表"
  3. 我已将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
Run Code Online (Sandbox Code Playgroud)

基本上我已经尝试了到目前为止我能找到的每一个建议,我似乎无法弄清楚问题.

我也看了一下MYSQL:已经消失了 如果我在那里查看项目符号列表

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

我不记得把这个代码放进去,所以我认为它是一个自动的东西,但我仍然会通过我的所有表单来查看哪些导致此错误,哪些不会.少数几个.

---今天我正在做一些调试试图从我可以集合的任何日志中找到我能做的任何事情----

 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) 
Run Code Online (Sandbox Code Playgroud)

-----------------------------最终编辑------------------- -------

在过去一周左右,我的老板一直在努力为我们的办公室安装新的内部服务器.我们还多次切换IP和ISP提供商.事实证明,他为我创建了一个行政噩梦,因为我试图调试服务器的问题,以及软件问题等等...当问题出现在ISP提供商使用路由器设置建立的设置中时等等......所以基本上这个问题基本上是服务器,软件和硬件之间没有问题.

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

Rob*_*ick 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
Run Code Online (Sandbox Code Playgroud)