【发布时间】:2011-09-01 07:20:08
【问题描述】:
我正在使用 Mysql 后台数据库运行 MsAccess,今天我遇到了一些问题。
根据我可以进入程序的程度,我可以获得所有名称和条目的列表。但是,一旦我进入任何条目的编辑表单,我就会得到各种结果。有时我很幸运,我可以看到第一个条目。但是之后的任何条目总是会得到一个 MsAccess 错误:Object invalid or no longer set,然后之后的任何后续调用都会产生一个 Mysql ODBC 错误 Mysql server has gone away。
我浏览了几个网站,甚至所有的堆栈溢出网站,都有相同的问题,我尝试了各种解决方案。 (请记住,该数据库已经运行多年,这是我第一次收到此消息)它还需要大约 2m14s 到 2m59s 才能显示任何错误消息。
这是我目前尝试过的:
- 我已尝试更改一些 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: Has gone away 如果我在那里查看项目符号列表
- 没有人杀死正在运行的线程
- 我认为在连接关闭后没有运行查询(因为它运行了多年)
- 客户端应用程序确实具有所需的权限
- 我不知道如何判断客户端的 TCP/IP 连接是否超时
- 我不知道我是否在服务器端遇到超时,但我知道客户端中的自动重新连接已禁用
- ???
- 查询可能很大,因为它是一个包含许多子表单的表单
- ???
- DNS 应该没问题,因为我可以使用真正的 sql 查看器 (HeidiSQL) 连接到它
- ???子叉???
- ???
我认为这是由于我筋疲力尽而难以弄清楚的错误之一:/ 我可能遗漏了一些信息,但我不确定还包括什么。
---编辑---
谢谢大家的cmets,我还在调试这个问题。似乎并不是所有的形式都会导致一些问题。所以我开始认为这是一个 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 上工作。它现在适用于重要的一个。但它不适用于旧的所以......我想我只需要弄清楚这一点。 [在空中挥舞着假想的拳头]大声笑
【问题讨论】:
-
您知道您可以 ping 服务器以使其保持活动状态吗,(虽然不知道如何从 msaccess 调用它):dev.mysql.com/doc/refman/5.1/en/mysql-ping.html
-
您是否有多个客户端在运行?如果是,您是否在所有客户端机器上都存在此问题?
-
您最近是否对 MySQL 表进行了任何更改?您需要在 Access 中删除链接的表,然后重新链接它们才能正确查看任何更改。
-
同一个盒子的不同 mysql 客户端会发生什么?也许是一个简单的命令行界面?
-
对于 ODBC 链接表,您不想更新它们,而是想删除它们并从头开始重新创建它们。这是因为在链接表定义中缓存了有关服务器的元数据,当您刷新链接时,这些元数据不会更新。更改链接表或链接视图的结构可能会导致其中断或变为只读,修复它的唯一方法是删除链接表并重新创建它。