gpt4 book ai didi

python - MySQL 和 python-mysql (mysqldb) 在重负载下崩溃

转载 作者:行者123 更新时间:2023-11-30 23:13:53 24 4
gpt4 key购买 nike

我刚刚对使用 web.py、MySQL 和 python-mysql(mysqldb 模块)构建的站点进行最后润色,当我靠在刷新按钮上发送 50 左右时,我对从 sql 注入(inject)等进行预测感觉很好同时请求,它让我的服务器崩溃了!我重现了错误,发现我交替出现以下两个错误,有时是一个,有时是另一个:

错误一:

127.0.0.1:60712 - - [12/Sep/2013 09:54:34] "HTTP/1.1 GET /" - 500 Internal Server Error
Exception _mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now") in <bound method Cursor.__del__ of <MySQLdb.cursors.Cursor object at 0x10b287750>> ignored
Traceback (most recent call last):

错误 2:

python(74828,0x10b625000) malloc: *** error for object 0x7fd8991b6e00: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
Abort trap: 6

很明显,这些请求使 MySQL 不堪重负并导致它崩溃,所以我的问题是如何防止这种情况发生。

我的服务器设置是使用 Ubuntu 13.04、nginx、MySQL(我使用 mysqldb python 模块连接到它)、web.py 和 fast-cgi 设置的。

当 web.py 应用程序启动时,它会连接到数据库:

def connect():
global con
con = mdb.connect(host=HOST, user=USER, passwd=PASSWORD, db=DATABASE)

if con is None:
print 'error connecting to database'

并且 con 对象被分配给一个全局变量,因此应用程序的各个部分都可以访问它

我像这样访问数据库数据:

def get_page(name):
global con
with con:
cur = con.cursor()
cur.execute("SELECT `COLUMN_NAME` FROM `INFORMATION_SCHEMA`.`COLUMNS` WHERE `TABLE_SCHEMA`='jt_website' AND `TABLE_NAME`='pages'")
table_info = cur.fetchall()

我有一个想法是在每次请求之前和之后打开和关闭数据库,但这对我来说似乎有点过分了,有人对此有任何意见吗?

人们在 Python 和其他环境中使用什么样的方法来保护他们的数据库连接,我应该遵循什么样的最佳实践?

最佳答案

我不使用 web.py 但文档和教程展示了处理数据库的不同方法。

他们建议使用一个全局对象(你在 .connect 中创建它)这可能是 Flask 风格的global proxy .

尝试组织您的代码,如this example ←DEAD LINK 看看它是否再次发生。

您报告的错误似乎是并发问题,通常由框架自动处理。

关于后一个问题:

What sort of methods do people use to protect their database connections in python and other environments and what sort of best practices should I be following?

这取决于您使用的网络框架。例如,Django 隐藏了一切,而且它可以正常工作。 Flask让你选择你想做什么。您可以使用 flask-sqlalchemy,它使用了非常好的 SQLAlchemy ORM 管理 Web 应用程序的连接代理。

关于python - MySQL 和 python-mysql (mysqldb) 在重负载下崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18760085/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com