私は自分のWebアプリケーションにMySQLiを使用していますが、特定のページにアクセスしたいときはいつでも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
だとします。このクエリを実行することで、このユーザーの接続制限を確認できます。
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 を制限として使用できるようになります。
この時点に達したら、次を使用してグローバル設定を確認します
SHOW VARIABLES LIKE 'max_user_connections';
これがゼロ以外の値の場合、2つのことを行う必要があります
THING#1:/etc/my.cnf
で設定を探します
[mysqld]
max_user_connections = <some number>
その行をコメントアウト
THING#2:値を動的に設定します
SET GLOBAL max_user_connections = 0;
MySQLの再起動は必要ありません。
私は過去にこの設定について話しました
May 24, 2011
: ユーザー接続とは-作成および破棄されるのはいつですか?Jun 16, 2011
: WebアプリケーションのユーザーアカウントごとにMySQLユーザーを作成することは賢明でしょうか?Mar 22, 2012
: MySQL接続を制限するにはどうすればよいですか?Feb 22, 2013
: Mysql:ユーザーごとの最大接続数-可能ですか?