我在Ubuntu 12.04上使用mysql的django。
奇怪的是,当我尝试在mysql中执行非常简单的命令时,会提示错误“ERROR 1040(HY000):连接太多”
我想要做的就是用南方的django mysql框架创build大约20个表格。 我是连接mysql的唯一用户,怎么会有太多连接?
我没有更改mysql中的configuration文件,所以最大的连接应该是默认的150,我相信。
任何人都可以帮我吗? 太感谢了
更新1:重新启动mysql服务器并运行show processlist后,即使我没有做任何事情,我发现了26个连接。 有时候这个数字会下降到10,而在25或者什么的时候再次出现。 这是正常的吗?
更新2:
好的,我发现有什么问题。 谢谢你的帮助。
MySQL连接有时被操作系统暂时搁置。
很多时候,一个人的应用程序有一些被Apache或者Python或者PHPclosures的MySQL连接。 当然,它在应用程序中是封闭的,但TIME_WAIT有时优先。 最近在ServerFault发现了一个黑客攻击。 我现在这个黑客:
这里是关于TIME_WAIT的一个很好的问题: 如何在TIME_WAIT中强制closures套接字? 。 我使用这个答案: https : //serverfault.com/a/329848/69271
实质上,我会在Ubuntu机器上运行这个:
SEC_TO_TIMEWAIT=1 echo ${SEC_TO_TIMEWAIT} > /proc/sys/net/ipv4/tcp_tw_recycle echo ${SEC_TO_TIMEWAIT} > /proc/sys/net/ipv4/tcp_tw_reuse
好的,让我回答我的问题。
后来我发现我运行另一个Python脚本,我忘了终止。 该脚本每隔1秒运行一次查询mysql数据库。
+-----+------+-----------------+----------+---------+------+-------+------------------+ | Id | User | Host | db | Command | Time | State | Info | +-----+------+-----------------+----------+---------+------+-------+------------------+ | 384 | root | localhost | EZ_Green | Sleep | 2682 | | NULL | | 407 | root | localhost | EZ_Green | Sleep | 2052 | | NULL | | 411 | root | localhost:47347 | NULL | Sleep | 3 | | NULL | | 412 | root | localhost:47350 | NULL | Sleep | 1 | | NULL | | 445 | root | localhost | EZ_Green | Sleep | 972 | | NULL | | 448 | root | localhost | EZ_Green | Sleep | 882 | | NULL | | 451 | root | localhost | EZ_Green | Sleep | 792 | | NULL | | 454 | root | localhost | EZ_Green | Sleep | 702 | | NULL | | 457 | root | localhost | EZ_Green | Sleep | 612 | | NULL | | 460 | root | localhost | EZ_Green | Sleep | 522 | | NULL | | 463 | root | localhost | EZ_Green | Sleep | 432 | | NULL | | 466 | root | localhost | EZ_Green | Sleep | 342 | | NULL | | 469 | root | localhost | EZ_Green | Sleep | 252 | | NULL | | 472 | root | localhost | EZ_Green | Sleep | 162 | | NULL | | 475 | root | localhost | EZ_Green | Sleep | 72 | | NULL | | 476 | root | localhost | EZ_Green | Sleep | 42 | | NULL | | 478 | root | localhost | EZ_Green | Sleep | 12 | | NULL | | 479 | root | localhost | NULL | Query | 0 | NULL | show processlist | +-----+------+-----------------+----------+---------+------+-------+------------------+
但我仍然不明白为什么需要这么多的连接,他们都在睡觉? 我使用python线程执行另一个函数,每隔1秒查询数据库。 有2个活动的python线程不断运行,所有其他线程完成后终止。 脚本在这里。
while True: now = time.time() if now < next: time.sleep(next - now) t = Thread(target=my_function,) t.start()# start a thread next += interval
我不是一个python人,所以不能告诉保证人,可能是您正在使用的连接池没有正确closures连接。 很难说什么,不知道你在做什么my_function。 对于sqlalchemy连接对象不是线程安全的(我在这里引用文档),你可能想尝试closures脚本本身的连接,看看是否有帮助。