MySQL服务器已断开连接

0 投票
1 回答
1529 浏览
提问于 2025-04-16 12:25

我最近从本地的 web.py/apache 环境转到了一个共享主机上,想要把家里的配置搬过来。但是现在遇到了一个问题,就是出现了一个叫“MySQL 服务器已断开连接”的错误。网上查了一下,很多遇到这个错误的人都是因为长时间不活动导致的,而我却是几秒钟就会出现一次。

我确认过,使用 mod_wsgi 的 application() 函数示例,我确实是在守护进程模式下运行。不过,有一个问题让我很担心,就是如果我把 web.ctx.orm 输出到错误日志中,每次请求似乎都是一个新的对象。难道我的 sqlalchemy 会话对象在页面请求之间不应该是同一个吗?

这是我的 Python 代码和一部分 Apache 的设置。请问在这个新机器上,有什么可能导致问题的地方是我在家里的机器上没有遇到的吗?

def load_sqla(handler):
    web.ctx.orm = scoped_session(sessionmaker(bind=engine))
    try:
        try:
            return handler()
        except web.HTTPError:
            web.ctx.orm.commit()
            raise
        except:
            web.ctx.orm.rollback()
            raise
    finally:
        web.ctx.orm.commit()
        # If the above alone doesn't work, uncomment
        # the following line:
        web.ctx.orm.expunge_all()

... urls and controllers ...

app = web.application(urls, globals(), autoreload=False)
app.add_processor(load_sqla)
application = app.wsgifunc()

这是我 Apache 设置的一部分。

WSGIDaemonProcess app processes=1 threads=1 python-path=/home/net/
public_html/myapp
WSGIProcessGroup app
WSGIScriptAlias /myapp /home/net/public_html/myapp/managio.py
<Directory "/home/stratton/public_html/myapp">
 Options Indexes MultiViews FollowSymLinks
 AllowOverride None
 Order allow,deny
 allow from all
</Directory> 

1 个回答

1

可以查看这个文档:http://code.google.com/p/modwsgi/wiki/ConfigurationDirectives#WSGIDaemonProcess

设置 processes=1 实际上还是开启了多进程,这可能是你为什么会同时访问同一个 SQL 连接的原因。

另外,看起来你在使用 SQLAlchemy,所以在创建引擎的时候,可以试着开启 QueuePool 或 NullPool 的使用。

撰写回答