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

Не удается подключиться к серверу MySQL на локальном хосте (10048)

Насколько я могу судить, это недавняя ошибка, которая начала возникать на моем локальном сервере:

 Can't connect to MySQL server on 'localhost' (10048).

Мой сайт будет работать некоторое время, затем он будет случайным образом выдавать эту ошибку, а затем снова начнет работать. Есть какие-нибудь советы, как это исправить? Я искал в Интернете, и большинство людей утверждают, что это ошибка Windows, которая требует исправления реестра, но я хотел узнать, сталкивался ли кто-нибудь еще с этой проблемой и есть ли какой-нибудь лучший совет? Спасибо!

Я бы посоветовал взглянуть на вывод netstat -ano при возникновении этой ошибки. Если это Windows Server 2003, диапазон эфемерных портов по умолчанию составляет только 1024-5000. Если этот диапазон портов заполнен, вы не сможете создавать новые исходящие подключения, включая «исходящие» на localhost. Вы можете обойти это, изменив параметр MaxUserPort в реестре, возможно, вместе с параметром TCPTimedWaitDelay, если netstat показывает, что у вас много подключений в состоянии TIME_WAIT. 'netstat -ano | find / C ":"' даст вам (несколько вводящее в заблуждение) подсчет количества активных сокетов.

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

Кроме того, если у вас есть веб-сервер и сервер базы данных, работающие на одном компьютере, вы можете рассмотреть протокол подключения, отличный от TCP / IP, например память или именованные каналы.

Благодаря сообщению jlupolt, поскольку он точно указал ключ к решению проблемы, с которой я столкнулся.

Некоторые рекламные баннеры с высокой посещаемостью привлекают большой трафик на наш сайт в течение короткого периода времени (часы), и случайным образом (не всегда) возникает ошибка «Не удается подключиться к серверу MySQL ...».

Использование памяти и загрузка ЦП сервера db все еще были очень низкими в этот период, а открытое соединение сервера mysql намного ниже предела max_connections. Так что это не должно быть проблемой mysql.

Следуя предложению jlupolt, мы обнаружили, что диапазон эфемерных портов по умолчанию (1024 ~ 5000) веб-сервера (не сервера db, в нашем случае это другая машина) полностью заполнен состоянием TIME_WAIT. После дальнейшего поиска мы нашли эту страницу:

В.5.2.2.1. Сбой подключения к серверу MySQL в Windows http://dev.mysql.com/doc/refman/5.1/en/can-not-connect-to-server.html

После повышения MaxUserPort до 20000 и понижения TcpTimedWaitDelay до 20 (требовалась перезагрузка) ошибка подключения никогда не возникала. Используемое нами значение MaxUserPort и TcpTimedWaitDelay может быть неоптимальным для вашего случая. Значения зависят от того, насколько быстро растет количество TCP / IP-соединений, и комбинация должна обеспечивать достаточное количество новых соединений и время для освобождения неиспользуемого соединения.

Решение:

Откройте редактор реестра. regedit

Набор TcpTimedWaitDelay:

найти HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters раздел реестра и создайте новое значение REG_DWORD с именем TcpTimedWaitDelay.
Установите это значение в десятичное 30, шестнадцатеричное. 0×0000001e. Это значение времени ожидания составляет 30 секунд.
Значение по умолчанию: 0xF0 (16229) время ожидания установлено на 240 секунд.

Набор MaxUserPort (для увеличения максимального подключения порта):

найти HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\TCPIP\Parameters раздел реестра и создайте новое значение REG_DWORD с именем MaxUserPort.
Установите наименьшее десятичное значение 32768.
Значение по умолчанию: 5000 (десятичное).

Закройте редактор реестра и перезапустите систему Windows.

Вы можете убедиться, что закрываете все свои подключения к базе данных. Вы можете случайно оставить их открытыми при вызове своих запросов, и со временем Windows достигнет максимального количества подключений и выдаст ошибку «Невозможно подключиться». Когда вы попробуете еще раз немного позже, Windows может освободить несколько соединений, и вы снова сможете обратиться к базе данных.

Удачи и надеюсь, что это поможет.

В последнее время возникло несколько проблем с локальным хостом.

Загляните в / etc / hosts и убедитесь, что у вас нет ни одной записи для локального хоста (например: 127.0.0.1 localhost) - некоторые из новых версий Linux (и Windows 7) недавно перестали это делать.

Кроме того, стоит проверить, привязан ли sql как к петле, так и к фактическому IP-адресу, и попытаться получить к нему доступ там.

Некоторые советы по отладке:

  • вы можете подключиться к порту TCP? Попробуйте telnet localhost 3306. Если отображается сообщение «Соединение отказано», у вас проблема с сетью.

  • Ваши соединения превышают максимальное количество соединений MySQL? Попробуйте увеличить значение переменной max_connections в my.cnf, а затем перезапустите MySQL.

  • Вы держите связи открытыми более 8 часов? MySQL автоматически закроет соединение через 8 часов. Есть разные вещи, которые вы можете сделать с этим - попробуйте поискать в Google, если это проблема.

Попробуйте подключиться напрямую к 127.0.0.1

В некоторых случаях при попытке подключения к «Localhost» будет предпринята попытка подключиться через внутреннее «сокетное» соединение, а не через сетевой интерфейс mysql, использование IP исправляет это.