使用以下方式访问我的网络应用程序后:
-Python 2.7
- Bottle 微框架 v. 0.10.6
- 阿帕奇 2.2.22
- mod_wsgi
- 在 Ubuntu Server 12.04 64 位上;几个小时后我收到此错误:
OperationalError: (2006, 'MySQL server has gone away')
我正在使用 MySQL——Python 中包含的原生 MySQL。当我不访问服务器时通常会发生这种情况。我尝试使用以下命令关闭所有连接:
cursor.close()
db.close()
其中 db 是标准 MySQLdb.Connection() 调用。
my.cnf 文件看起来像这样:
key_buffer = 16M
max_allowed_packet = 128M
thread_stack = 192K
thread_cache_size = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
它是默认配置文件,除了 max_allowed_packet 是 128M 而不是 16M。
对数据库的查询非常简单,最多检索大约 100 条记录。
谁能帮我解决这个问题吗?我确实有一个想法是使用 try/ except 但我不确定这是否真的有效。
提前致谢,
Jamie
更新:尝试/除外调用不起作用。
这是 MySQL 错误,不是 Python 错误。
可能的原因和可能的解决方案列表如下:MySQL 5.5 参考手册:C.5.2.9。 MySQL服务器消失了.
可能的原因包括:
- 您尝试在关闭与服务器的连接后运行查询。这表明应用程序中存在应更正的逻辑错误。
- 在不同主机上运行的客户端应用程序没有从该主机连接到 MySQL 服务器所需的权限。
- 您遇到了服务器端超时并且客户端中的自动重新连接被禁用(MYSQL结构中的重新连接标志等于0)。
- 如果您向服务器发送的查询不正确或太大,您也可能会收到这些错误。如果 mysqld 收到太大或无序的数据包,它会认为客户端出现问题并关闭连接。如果您需要大型查询(例如,如果您正在使用大型 BLOB 列),则可以通过设置服务器的max_allowed_packet变量,默认值为 1MB。您可能还需要增加客户端的最大数据包大小。有关设置数据包大小的更多信息,请参见第 C.5.2.10 节,“数据包太大”.
- 如果您的客户端版本低于 4.0.8 并且您的服务器版本为 4.0.8 及以上,或者反之亦然,如果您发送 16MB 或更大的数据包,您也会丢失连接。
- 等等...
换句话说,有很多可能的原因。仔细检查该列表并检查所有可能的原因。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)