我从mysql收到此错误: “无法连接到数据库[用户xyzxyz已经超过'max_user_connections'活动连接”
我当前的max_user_connections = 50,我在VPS上运行
作为第一步(我读到它应该有帮助的地方)我创建了一个新的mysql用户,它将处理我网站上大部分操作的所有后台操作。所以现在我有2个用户:
仍然在更改后,用户报告“xyzxyz_users已超过'max_user_connections'活动连接”
这是我运行的一个繁忙的网站,但我想知道是否我的代码中没有错误导致此错误。
我尝试运行“SHOW PROCESSLIST”和“SHOW FULL PROCESSLIST”,但我只看到2行返回(一个SLEEP和一个QUERY of the show processlist)。
据我所知,我没有任何类型的持久性mysql连接
下面是我在每个php文件的头部使用启动mysql连接的代码(使用'require')
if (!(isset($use_pdo))) {
$conn_mls = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname);
mysql_query("SET NAMES utf8");
}else{
$options = array(
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
);
$dsn = "mysql:host=127.0.0.1;dbname=$dbname;charset=utf8";
$conn = new PDO($dsn, $dbuser , $dbpass , $options);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
};
在某些情况下我使用mysqli,我不认为我在那里使用持久连接,如果需要我可以发布代码。
mysql什么时候创建新连接? 如果我有max_user_connections = 50这是否意味着只有50个用户可以同时连接到该网站? 我是否需要手动关闭代码中的连接,或者mysql是否自己处理它?</ p>
答案 0 :(得分:1)
我建议在任何地方实施持久性PDO连接(如果能够预算时间)并在需要时增加最大连接数。这也将提高应用程序的一致性和可读性。
正如我在评论中提供的链接所解释的那样,PDO缓存持久连接:
&#34;许多Web应用程序将从持久连接中受益 到数据库服务器。持久连接最终没有关闭 脚本但是在另一个脚本请求时被缓存并重新使用 使用相同凭据的连接。持久连接 缓存允许您避免建立新的开销 每次脚本需要与数据库通信时产生连接 在更快的Web应用程序中。&#34;
我不确定这会解决您的连接问题,但它会提高性能并可能对您的连接问题产生积极影响,具体取决于多个用户是否具有相同的凭据。当然,如果您能够增加最大连接数以支持所有并发用户,那么您可以在不实施PDO持久连接的情况下这样做。