0) а вы уверены, что ошибка из-за мускуля? может, у вас что-то с php (если он используется) или с самим nginx? его логи смотрели?
1) почитать про persistent mysql connections
2) добавить логирование запросов без индексов
3) почитать, что пишет mysqltuner/tuning-primer - бывает советуют полезные вещи
4) проверить лог сервера и веб-сервера, может они тоже ругаются на количество открытых файлов - тогда нужно править эти лимиты в системе (например, вот один мануальчик
www.cyberciti.biz/faq/linux-increase-the-maximum-n...)
5) выделите больше памяти mysql, особенно innodb
6) таймауты очень большие - 4 часа - возможно, у вас висит куча неиспользуемых процессов
7) зайти в ЧНН в консоль mysql и посмотреть список процессов (show processlist;) - посмотреть, что там происходит, возможно сразу будут видны locks
8) переключение на tcp/ip может помочь с ошибкой на открытые файлы, но одновременно может уменьшить производительность
While you don't hit the entire IP stack when going over localhost, you still hit a big part of it. A unix socket is essentially just a 2-way pipe. It's faster and lighter.
да и в любом случае - это временный обход проблемы, а не решение. Просто рано или позже эта же ошибка вылезет в другом месте
9) посмотрите на значения iowait в top/iotop - возможно, проблема не в запросах, а в дисковой подсистеме. В таком случае может помочь вынос мускуля на отдельный раздел
10) попробуйте посмотреть загрузку по процессорам (нажать 1 в top), возможно один-два процессора забиты под завязку, а остальные простаивают. Возможно, в таком случае будет смысл разнести задачи по процам