我们在 MySQL 数据库上有一个 MediaWiki wiki。但是,其他应用程序也在访问 MySQL。目前我们最多可以与数据库建立 100 个连接,其中 MediaWiki 允许 10 个。
然而,在高峰时段,超过 10 个用户会同时尝试访问 wiki,这意味着他们可能会遇到 MySQL 连接错误。
具体来说,该消息表示:
“数据库名称”有问题
抱歉!本网站遇到技术故障。
尝试等待几分钟然后重新加载。
(无法联系数据库服务器:未知错误(“mysql 数据库名称”))
我的想法是限制在 MediaWiki 中(例如在 LocalSettings.php 中)尝试访问数据库的连接数。这样人们就不会收到错误消息 - 他们只需要等待更长时间。
有办法吗?或者有更好的解决方案吗?
答案1
是的,您需要在应用程序内精确地执行您想要的操作。
首先,我要花点时间反对这种做法:该网站似乎使用率很高,需要更多数据库连接,而这种事情可能总体上无法得到真正改善。(例如,我只能假设 MediaWiki 的编写方式不会不必要地使用超出需要的额外连接)
我的基本想法是,如果可能的话,尽量为网站提供运行所需的一切。如果这会给共享 MySQL 服务器带来麻烦,那么可能需要解决这个瓶颈。无论是等待或错误,无法连接数据库将导致一定数量的用户离开网站,并且通常会给他们带来负面体验。
“简单”的解决方案是将错误消息更改为更友好的消息,但这可能无法解决问题。
假设您无法提高 10 个连接的限制,则可能需要对应用程序进行修改(可能进行相当大的修改),以便将每个数据库连接尝试包装在代码中,该代码会捕获连接失败、等待预定的时间并重试一定次数。
你可能很幸运,MediaWiki 可能具有可以配置的功能。如果是这样,更熟悉的人可以帮你解决。另一个(更有可能)幸运之处是,如果数据库访问代码非常严格,那么这个解决方案就不需要更改代码中的 300 多个位置(至少可以说,这是一个耗时且令人恼火的前景)。
我只会在错误发生频率很低的情况下才推荐这种解决方案。如果经常发生,它最终可能会导致网站运行缓慢,网站会不断等待/重试数据库连接……最终还是会返回错误。