Error 1040 Too many connections

Error 1040 Too many connections — ошибка, которая возникает при превышении максимального количества возможных подключений к серверу баз данных со стороны скриптов сайта.

Устраняется, как правило, увеличением лимита.

 

Ошибка MySQL — Error 1040 Too many connections

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

 

mysql -u USERNAME -p

Enter password:

ERROR 1040 (08004): Too many connections

 

 

От имени суперпользователя подключиться удастся в случае если сайт работает не от root.

mysql -u root -p

Лимит существует для пользователя, если сайт работает от root (что именно из-за этого является плохой практикой) и появилась такая ошибка — требуется перезагрузка MySQL.

 

 

Интересно в данном случае значение актуальное директивы max_user_connection

show status like '%connected%';

+——————-+——-+
| Variable_name | Value |
+——————-+——-+
| Threads_connected | 151 |
+——————-+——-+
1 row in set (0.01 sec)

 

 

А также действующий лимит

show global variables like '%connections%';

+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| max_connections | 151 |
| max_user_connections | 0 |
+———————-+——-+
2 rows in set (0.00 sec)

 

 

Лимит достигнут, скрипты при этом продолжают делать запросы. Исправить ситуацию можно добавив в /etc/mysql/my.cnf такую строку

max_user_connection=500

 

Затем перезапустив MySQL

/etc/init.d/mysql restart

 

Без перезапуска того же результата можно добиться установив новое значение глобальной переменной, от имени root в консоли MySQL это делается таким образом:

 

set global max_connections = 500;

 

Лимит теперь увеличен и сайт должен вновь стать доступен. Часто причиной является большая активность аудитории и длительные запросы на изменение данных. Они протекают с блокировками, если используются таблицы типа MyISAM получить значительное улучшение можно конвертировав их в InnoDB.