Назад | Перейти на главную страницу

'Ошибка подключения PDO: SQLSTATE [HY000] [2002] Не удается подключиться к локальному серверу MySQL через сокет' /var/run/mysqld/mysqld.sock '

я собираюсь

'Ошибка подключения PDO: SQLSTATE [HY000] [2002] Не удается подключиться к локальному серверу MySQL через сокет' /var/run/mysqld/mysqld.sock '

ошибка при попытке сделать слишком много обновлений и вставок. При слишком большом количестве обновлений я имею в виду 20-30 тысяч транзакций в минуту. Например, когда я пытаюсь выполнить пакетную обработку более 10 тыс. Записей в таблице, я начинаю получать эту ошибку.

Я поискал в справочной документации по serverfault и MySQL и обнаружил, что неправильное расположение файла sock или неработающий сервер mysql могут вызвать эту ошибку, но мой путь к файлам sock верен и сервер mysql работает. Потому что обычно я могу подключиться к mysql и выполнить запрос.

Может ли ограничение подключения вызвать эту ошибку? Мое текущее значение переменной max_connections - 151, и этого может быть недостаточно для 10 тысяч транзакций в минуту. Но, как я знаю, когда слишком много соединений открывается с mysql, это дает слишком много ошибок соединений, а не может подключиться через ошибку сокета.

Я изменил свое приложение на использование mysql_pconnect вместо mysql_connect. Я не знаю, что произойдет, когда я попытаюсь запустить задание cron для обработки 10 тысяч записей.

Есть ли у вас какие-либо идеи? Если я не смогу найти ответ на эту проблему, я попытаюсь получить большую машину для MySQL с оперативной памятью 32 ГБ, 4-8 процессорами и попробовать эту настройку.

Показывает ли ваша система какие-либо признаки замедления или задержки, когда это происходит? В таком случае вам поможет более мощная машина. Если нет, то, вероятно, существуют какие-то меры безопасности по умолчанию, предотвращающие бурю запросов.

См. Эту ошибку для получения дополнительной информации:

http://bugs.mysql.com/bug.php?id=10525

Важно отметить, что повысите способность mysql ставить в очередь запросы на «задний журнал», задав

back_log = 1000

в вашем файле /etc/mysql/my.cnf в разделе [mysqld] (и перезапустив mysql).

Во-вторых, также увеличьте такой же лимит в Linux:

sudo sysctl -w net.core.somaxconn=1024

Не забудьте отредактировать /etc/sysctl.conf и добавить

net.core.somaxconn=1024

Вниз, если это решит вашу проблему, иначе она вернется при следующей перезагрузке!

Это может быть проблема с обработкой SQL-запросом обратной связи localhost. Попробуйте вместо этого подключиться к 127.0.0.1 или внутреннему IP-адресу сервера.