php, mysql - слишком много соединений с ошибкой базы данных - PullRequest
15 голосов
/ 18 февраля 2011

Добрый день всем. У меня странная ошибка. Я создал чат, который работает так:

  • вопросы / ответы вставляются в БД
  • каждые 2 секунды ajax-запрос отправляется в php-скрипт, который доставляет новые вопросы / ответы

Он работал нормально до сегодняшнего дня, когда я получил эту ошибку:

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

Проблема в том, что нас было не так много ... (8) и я не думаю, что БД не может поддерживать более 8-16 подключений одновременно (в спецификациях написано, что чат должен поддерживать 50-100 пользователей так что 8 ... мало).

Итак ... может ли кто-нибудь1 сказать мне, почему это произошло (вчера нам было 15 лет, и все работало нормально) и как это решить? Спасибо за помощь. Если вам нужны примеры кода, просто спросите.

Ответы [ 6 ]

34 голосов
/ 18 февраля 2011

Существует множество разных причин ошибки "Too Many Connections".

Проверьте эту страницу часто задаваемых вопросов на MySQL.com: http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

Проверьте ваш файл my.cnf на предмет "max_connections". Если не существует, попробуйте:

[mysqld]
set-variable=max_connections=250

Однако по умолчанию 151, так что с вами все должно быть в порядке.

Если вы находитесь на общем хосте, возможно, другие пользователи используют слишком много подключений.

Другие проблемы, на которые стоит обратить внимание, это использование постоянных соединений и нехватка дискового пространства.

15 голосов
/ 18 февраля 2011

Ошибка SQLSTATE[HY000] [1040] Too many connections является ошибкой SQL и связана с сервером sql.Там могут быть другие приложения, подключающиеся к серверу.На сервере имеется максимально доступное число подключений.

Если у вас есть phpmyadmin, вы можете использовать вкладку «переменные», чтобы проверить значение параметра.

Вы также можете запросить статус таблица выглядит так:

show status like '%onn%';

Или какое-то отклонение от этого.проверьте руководство для определения переменных

(имейте в виду, что «соединения» не являются текущими соединениями, проверьте эту ссылку :))

6 голосов
/ 18 февраля 2011

Если вы достигнете предела подключения Mac перейдите к /etc/my.cnf и в разделе [mysqld] добавьте max_connections = 500

и перезапустите MySQL.

2 голосов
/ 28 февраля 2016

Это может произойти из-за слишком большого количества соединений в одно и то же время или из-за большого количества чатов одновременно.Также это может произойти из-за слишком большого количества сеансов.

Лучший способ решить эту проблему - перезапустить MySQL.

service mysqld restart

или

service mysql restart

или

 /etc/init.d/mysqld restart
2 голосов
/ 18 февраля 2011

Пожалуйста, проверьте, открываете ли вы новое соединение с каждым из ваших запросов (mysql_connect (...)).Если вы это сделаете, убедитесь, что закрыли соединение впоследствии (используя mysql_close ($ link)).

Кроме того, вы должны рассмотреть возможность изменения этого поведения, так как сохранение одного устойчивого соединения для каждого пользователя может быть лучшим способом достиженияВаша задача.

Если вы этого еще не сделали, взгляните на этот очевидный, но, тем не менее, полезный информационный ресурс: http://php.net/manual/function.mysql-connect.php

1 голос
/ 14 февраля 2019

Если вам нужно увеличить MySQL Connections без перезапуска MySQL, сделайте, как показано ниже, также, если вы не знаете файл конфигурации, ниже используйте 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
...