我最近将我的网站移到了新服务器上。我有一些基本的 python 脚本可以访问 MySQL 数据库中的数据。在旧服务器上,我们没有问题。在新服务器上:
- MySQLWorkbench 可以无故障连接并执行所有查询
- 使用 python 的相同 (SELECT) 查询有 5% 的时间工作,另外 95% 的时间它们超时或在查询期间连接丢失
- 例如,该表有 100000 行,在 MySQLWorkbench 中选择整个东西可以正常工作。3秒后返回。
- 在 python 中,相同的查询永远不会起作用,当 LIMIT 2999 查询有效但只是 LIMIT 3010 导致它超时。
- 当脚本在本地或远程运行时观察到相同的效果
现在已经挖掘了几天,以确定数据库、数据库服务器、服务器本身是否有一些设置阻止 python(但不是 MySQLWorkbench)正常工作。
查询和代码以防万一:
query = "SELECT * FROM wordpress.table;"
conn = MySQLConnection(**mysqlconfig)
cursor = conn.cursor()
cursor.execute(query)
rows = cursor.fetchall()
我没有关于服务器的详细信息,但它有足够的能力让 MySQLWorkbench 正常工作,只是 python 似乎无法正常工作
****编辑****
要查看此问题是否是由于查询返回太多数据以供 python 处理,我想到了使用 OFFSET 和 LIMIT 循环遍历更大的查询,每个查询有 10 行。
total_rows = 100000
interval = 10
data = []
for n in range(0, total_rows / interval):
q = "SELECT * FROM wordpress.table LIMIT %s OFFSET %s" % (interval, n * interval)
cursor.execute(q)
returned = cursor.fetchall()
rows = [[i for i in j] for j in list(returned)]
for row in rows:
data.append(row)
print n, len(data)
预期:这将通过更小块的更大查询快速工作发生:它比之前卡住的 3000 行更远,但在一些迭代后最终撞墙。同样不一致的是,运行脚本 10 次会导致 n 每次到达不同的点。