为什么我一次又一次地在我的网站http://elancemarket.com/上收到此错误?
Error establishing a database connection
SQL ERROR [ mysqli ]
User elancema_user already has more than 'max_user_connections' active connections [1203]
Warning: mysqli::mysqli(): (HY000/1203): User elancema_user already has more than 'max_user_connections' active connections in /home/elancemarket/public_html/ask/qa-include/qa-db.php on line 66
我的VPS很贵!
答案 0 :(得分:4)
服务器会抛出此错误:
appCfg * appCfg::p_instance = 0;
SingletonDestroyer appCfg::destroyer;
SingletonDestroyer::~SingletonDestroyer() {
delete p_instance;
}
void SingletonDestroyer::initialize( appCfg* p ) {
p_instance = p;
}
appCfg& appCfg::getInstance() {
if(!p_instance) {
p_instance = new appCfg();
destroyer.initialize( p_instance);
}
return *p_instance;
}
appCfg::appCfg()
{
pSetting = new QSettings(Const::SettingPath()+"/main.cfg",QSettings::IniFormat);
}
//called on Windows and Linux platforms, but not on Android
appCfg::~appCfg()
{
pSetting->sync();
delete pSetting;
}
...
这意味着特定数据库用户此时已经用完了所有并发连接,并且无法处理更多连接。
在不进行任何编程更改的情况下修复的唯一选项是更改MySQL配置中的SQL ERROR [ mysqli ] User database_user already has more than 'max_user_connections' active connections [1203]
值。 Linux上的配置文件通常是max_user_connections
。
其他解决方案可能是:
您可以通过运行命令/etc/my.cnf
来检查用户的当前值。
答案 1 :(得分:4)
最好的办法是增加max_user_connections
。对于一个服务于三个不同网络应用程序(原始php,WordPress,phpBB)的MySQL实例,你可能想要一个至少为60的值。
发出此命令,您将了解有多少全局连接可用:
show global variables like '%connections%'
您可以在任何特定时刻找到正在使用的连接数:
show status like '%connected%'
你可以找到每个连接的作用:
show full processlist
如果我是你,我会尝试至少100个连接的全局值。如果您无权访问,您的服务提供商应该能够为您提供帮助。它需要在MySQL的my.cnf
文件配置中完成。不要设置得太高,否则你冒着MySQL服务器进程吞噬所有内存的风险。
第二种方法允许您将这些整体连接分配给不同的MySQL用户。如果您的每个Web应用程序都有不同的MySQL用户名,则此方法适合您。这种方法写在这里。 https://www.percona.com/blog/2014/07/29/prevent-mysql-downtime-set-max_user_connections/
控制这个问题的最终方法更加微妙。您可能正在使用Apache Web服务器作为底层技术。您可以减少同时运行的Apache任务的数量,矛盾的是,增加吞吐量。那是因为Apache排队请求。如果它有一些任务有效地敲击队列,那通常比许多任务更快,因为争用较少。它还需要更少的MySQL连接,这将解决您的直接问题。这在此解释:Restart Mysql automatically when ubuntu on EC2 micro instance kills it when running out of memory
顺便说一句,像WordPress这样的网络应用使用持久连接池。也就是说,它们建立与MySQL数据库的连接,保持它们打开,并重用它们。如果你的应用程序很忙,每个连接的生命周期应该是几分钟。 (基于过度简化的语句数据库连接是在几秒钟内创建和删除,您的托管服务提供商的支持技术人员不理解这部分Web应用程序操作的微妙之处。)