web-dev-qa-db-ja.com

php、mysql-データベースへの接続が多すぎるエラー

全てにおいて良い日。奇妙なエラーがあります。次のようなチャットを作成しました:

  • 質問/回答がデータベースに挿入されます
  • 2秒ごとに、新しい質問/回答を取得するphpスクリプトにajaxリクエストが送信されます

このエラーが出た今日までうまくいきました:

Uncaught exception 'PDOException' with message 'SQLSTATE[HY000] [1040] Too many connections' in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php:129 
Stack trace: #0 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(129): PDO->__construct('mysql:Host=loca...', '', '', Array) 
s#1 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Mysql.php(96): Zend_Db_Adapter_Pdo_Abstract->_connect() 
s#2 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(448): Zend_Db_Adapter_Pdo_Mysql->_connect() 
s#3 /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php(238): Zend_Db_Adapter_Abstract->query('select profile_...', Array) 
s#4 /var/www/html/dbdev/include/Zend/Db/Adapter/Abstract.php(782): Zend_Db_Adapter_Pdo_Abstract->query('select profile_...', Array) 
s#5 /var/www/html/dbdev/include/Profile.php(43): Zend_Db_Adapter_Abstract->fetchPairs('select profile_...') 
s#6 /var/www/html/dbdev/public_html/index.php(29): Profile->load() 
s#7 {main} Next exception 'Zend_Db_Adapter_Exception' with in /var/www/html/dbdev/include/Zend/Db/Adapter/Pdo/Abstract.php on line 144

問題は、私たちがそれほど多くなかったということです... ... 小さい)。

だから...これはなぜ起こったのか(昨日は15歳でうまく働いていた)とそれを解決する方法を教えてください?ご協力ありがとうございました。コードサンプルが必要な場合は、お問い合わせください。

15
zozo

「接続が多すぎます」エラーにはさまざまな理由があります。

これを確認してくださいFAQ MySQL.comのページ: http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html =

「max_connections」についてmy.cnfファイルを確認します。存在しない場合は試してください:

[mysqld]
set-variable=max_connections=250

ただし、デフォルトは151なので、大丈夫です。

共有ホストを使用している場合、他のユーザーがあまりにも多くの接続を使用している可能性があります。

他に注意すべき問題は、永続的な接続の使用とディスク領域の不足です。

35

エラー SQLSTATE[HY000] [1040] Too many connectionsはSQLエラーであり、SQLサーバーに関係しています。サーバーに接続している他のアプリケーションがある可能性があります。サーバーには、使用可能な最大接続数があります。

Phpmyadminがある場合は、「変数」タブを使用して設定が何であるかを確認できます。

次のようにstatusテーブルをクエリすることもできます:

show status like '%onn%';

またはそれに関するいくつかの分散。チェック マニュアル 存在する変数について

(「接続」は現在の接続ではないことに注意してください、そのリンクを確認してください:))

15
Nanne

Macの接続制限に達している場合は、/etc/my.cnfおよび[mysqld]セクションの追加max_connections = 500

mySQLを再起動します。

6
Zimbabao

各リクエスト(mysql_connect(...))で新しい接続を開くかどうかを確認してください。その場合は、後で接続を閉じてください(mysql_close($ link)を使用)。

また、この動作を変更することを検討する必要があります。各ユーザーに対して1つの安定した接続を維持することが、タスクを達成するためのより良い方法になる可能性があるためです。

まだ行っていない場合は、この明らかな情報をご覧ください。それでも有用な情報リソース: http://php.net/manual/function.mysql-connect.php

2
trautwein

これは、同時接続が多すぎるか、同時にチャットが多いために発生する可能性があります。また、セッションが多すぎるために発生する可能性があります。

この問題を解決する最良の方法は、MySQLを再起動することです。

service mysqld restart

または

service mysql restart

または

 /etc/init.d/mysqld restart
2
Laduram Vishnoi

MySQLを再起動せずにMySQL Connectionsを増やす必要がある場合、また設定ファイルがわからない場合は、mysqlworkbenchまたはphpmyadminを使用するか、コマンドプロンプトを使用して以下のクエリを実行します。

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> SET GLOBAL max_connections = 250;
Query OK, 0 rows affected (0.00 sec)

mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 250   |
+-----------------+-------+
1 row in set (0.00 sec)

これらの設定は、MySQLの再起動時に変更されます。


永続的な変更を行うには、my.cnfに次の行を追加し、MySQLを再起動します。

max_connections = 151
1
ManiMaran A