我正在为我的 webapp 使用 MySQLi,但每当我想访问某个特定页面时,我都会得到mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections.
mysqli_connect() [function.mysqli-connect]: (42000/1203): User ***_user already has more than 'max_user_connections' active connections
我已经尝试关闭所有连接,但这并没有改善这种情况。
有没有办法确切地知道在任何特定时刻打开了哪些连接或任何其他有用的数据可以帮助我解决这个问题?
顺便说一句,我使用的是 PHP 5.2.17 和 MySQL 5.1。
选项max_user_connections是一个限制,不是针对服务器实例中的同时连接总数,而是针对单个用户帐户。
假设用户被称为db_user@localhost。您可以通过运行以下查询来了解此用户的连接限制:
db_user@localhost
SELECT max_user_connections FROM mysql.user WHERE user='db_user' AND host='localhost';
如果这是一个非零值,请将其改回:
GRANT USAGE ON *.* TO db_user@localhost WITH MAX_USER_CONNECTIONS 0;
或者
UPDATE mysql.user SET max_user_connections = 0 WHERE user='db_user' AND host='localhost'; FLUSH PRIVILEGES;
这将导致mysqld允许用户db_user@localhost使用全局设置max_user_connections作为其限制。
mysqld
一旦你到达这一点,现在使用检查全局设置
SHOW VARIABLES LIKE 'max_user_connections';
如果这是一个非零值,你需要做两件事
事情#1:寻找设置/etc/my.cnf
/etc/my.cnf
[mysqld] max_user_connections = <some number>
注释掉那一行
事情#2:动态设置值
SET GLOBAL max_user_connections = 0;
不需要重启 MySQL。