В принципе MySQL и сам провоцирует это, позволяя плодить соединения
сотнями, а также по умолчанию небольшим временем таймаута.
Так вот представьте себе картину: пятница, 18:30, сотрудники делятся
планами на выходные и ведут вялую внутреннюю переписку на тему "Так на
сколько же людей заказывать столик в близжайшем пабе?".
Пятничную идилию нарушет SMS-сообщение "MySQL: Too many connections on
XXX server", подкрепленное несколькими десятками писем от
мониторинговых систем. И понеслось...
В результате достаточно оперативных поисков обнаруживается, что какая-
то [censored] забывает закрыть соединение с MySQL-базой, и в момент
увеличения количества посетителей портала свободных подключений
попросту не осталось.
Т.к. времени разбираться в логике чужого достаточно немаленького
скрипта времени небыло я прибегнул к такому трюку:
Сразу после выполнения подключения к БД:
$db_link = mysql_connect('server.com', 'login', 'password')
Дописываю строку:
register_shutdown_function('mysql_close',$db_link);
Вуаля! По завершении работы скрипта (даже аварийного) произойдет
закрытие подключения к базе данных MySQL.
Осталось только добавить что, даже если незакрытые соединения не
создают проблем, ОЧЕНЬ рекомендую все-таки их закрывать. А для тех кто
использует InnoDB-таблицы, это делать обязательно во избежании полной
потери данных. Но это уже другая история, о какой я напишу как-нибудь
позже.
http://voituk.kiev.ua/2007/04/21/mysql-too-many-connections/