MySQL: пользователь some_user_name уже имеет больше активных подключений, чем ‘max_user_connections’

#php #mysql #zend-framework

#php #mysql #zend-framework

Вопрос:

Я использую Zend Freamwork для своего веб-сайта. И иногда я получаю следующее исключение с моего веб-сайта:

Сообщение: SQLSTATE[42000] [1203] Пользователь elibrary_books уже имеет больше активных подключений, чем ‘max_user_connections’

Насколько я знаю, «Zend Freamwork» использует PDO для подключения к базе данных. Как я могу решить эту проблему?

Ответ №1:

Всегда закрывайте свое соединение. Если вы используете класс Sql, это выглядит так:

 $sql->getAdapter()->getDriver()->getConnection()->disconnect();
  

Ответ №2:

Иногда поток подключения MySQL не выбрасывается, даже если вы чисто разорвали сокет; он все еще висит, ожидая, пока его извлекут.

Проверьте свои настройки на wait_timeout . Значение по умолчанию неоправданно длинное. Оптимальное значение может составлять около 20 секунд. Вероятно, вы также захотите, чтобы он был таким низким, если вы используете постоянные подключения.

Комментарии:

1. Как я могу установить «wait_timeout» для PDO?

2. Вы можете установить wait_timeout в качестве переменной сеанса при каждом открытии соединения, выполнив запрос: SET wait_timeout=28800; Если вы используете PDO (гораздо лучший выбор, чем драйверы MySQL или MySQLi), вы можете выполнить приведенное выше утверждение, установив параметр драйвера PDO::MYSQL_ATTR_INIT_COMMAND при созданииОбъект подключения PDO.

Ответ №3:

Попробуйте установить постоянный флаг в конфигурации драйвера вашей базы данных равным false:

 resources.db.params.persistent = 0
  

Комментарии:

1. это не помогло, я получаю то же сообщение.