mysqli_real_connect (): (HY000 / 2002): в WAMP [дубликат]

[D7] Да. Строки можно рассматривать как массивы символов, а способ доступа к позиции массива - использовать оператор [] . Обычно нет никакой проблемы при использовании $ str [0] (и я уверен, что это намного быстрее, чем метод substr () ).

Существует только одна оговорка с обоими методами: они получат первый байт , а не первый символ . Это важно, если вы используете многобайтовые кодировки (например, UTF-8). Если вы хотите поддержать это, используйте mb_substr () . Возможно, вы всегда должны принимать многобайтовый вход в эти дни, так что это best , но он будет немного медленнее.

5
задан Shane 25 April 2012 в 15:37
поделиться

5 ответов

Ошибка на самом деле не исходит от MySQL, но из самой Windows :

Когда соединение закрыто, на стороне, которая закрывает соединение, 5 кортежей {протокол, локальный IP-адрес, локальный порт, удаленный IP-адрес, удаленный порт} по умолчанию переходит в состояние TIME_WAIT в течение 240 секунд.

В этом случае протокол фиксирован - TCP

Локальный IP-адрес, удаленный IP-адрес и удаленный PORT также обычно фиксируются. Таким образом, переменная является локальным портом.

Случается, что когда вы не привязываете порт в диапазоне 1024-5000, используется. Так что примерно 4000 портов. Если вы используете их все за 4 минуты - это означает, что примерно за каждые 4 минуты вы совершаете 16 запросов веб-сервисов в секунду, вы исчерпаете все порты. Это и есть причина этого исключения.

Другими словами, у вас закончились порты в динамическом диапазоне. Это, вероятно, не должно происходить. Сколько одновременных пользователей вы имеете в виду здесь?

Связанный блог имеет обходные пути:

  1. Увеличить диапазон динамического порта путем редактирования реестра.
  2. Уменьшите время, в течение которого система хочет подключиться к TIME_WAIT, через редактирование реестра.
  3. Запустите немного кода, чтобы сделать вышеупомянутое изменение реестра без regedit.

Какое большое количество обходных решений!

См. также этот вопрос на форумах Visual Studio , в котором объясняется:

Порт будет заблокирован еще на минуту или две, чтобы поймать все пакеты, которые могли быть отправлены до того, как приложение было прекращено, но еще не пришло. В Winsock API вы можете установить параметр SO_REUSEADDR сокета для его разрешения (также этот параметр можно установить в классе .NET Socket), но TcpListener слишком высокоуровневый и не позволяет вам установить этот параметр.

Очень вероятно, что базовый код для подключения к MySQL или код, который обрабатывает соединения в Apache, не пытается использовать SO_REUSEADDR.

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

8
ответ дан Charles 16 August 2018 в 10:56
поделиться
  • 1
    Изменен диапазон динамических портов , начиная с Windows Vista : Пуск порта: 49152 Конечный порт: 65535. Вы можете увидеть текущие настройки с помощью команды netsh int ipv4 show dynamicport tcp. – JSmitty 20 January 2015 в 16:23

вы можете изменить окна REGISTRY, чтобы исправить это,

сначала в regedit открыть этот путь:

HKLM \ SYSTEM \ CurrentControlSet \ Services \ Tcpip \ Parameters

и создать 4 новых DWORD в качестве этой клавиши и значения:

TcpTimedWaitDelay
REG_DWORD: 0000001e (hex)

MaxUserPort
REG_DWORD: 0000fffe (hex)

TcpNumConnections
REG_DWORD: 00fffffe (hex)

TcpMaxDataRetransmissions
REG_DWORD: 00000005 (hex)

как с этим снимком экрана:

ссылка

4
ответ дан DolDurma 16 August 2018 в 10:56
поделиться
  • 1
    Благодарю. Кстати, статья, на которую вы ссылались, кажется, утверждает, что это проблема Window 10. Windows 10 была выпущена в 2015 году, и вопрос был опубликован в 2012 году ... Однако, у меня эта проблема в 2018 году, и ваш ответ решил это для меня, так что это правда! – dean grande 2 August 2018 в 13:29

На этом есть простая работа.

Загрузить CurrPorts http://www.nirsoft.net/utils/cports.html - автономный бесплатный инструмент, который перечисляет какие программы и службы используют порты. Конечно, вы можете использовать netstat, средства администрирования Windows и диспетчер задач, чтобы понять это сами, но CurrPorts делает это для вас.

Запуск Currports as administrator >> Выберите службу / приложение, создающее проблему перейдя в тот же порт >> Остановите службу. Чтобы остановить службу -

  1. Прямо из приложения Currports.
  2. Пуск >> Выполнить >> service.msc >> (выберите из списка).
  3. TaskManager.

Надеюсь, вы поднимете меня опросом.

0
ответ дан imsinu9 16 August 2018 в 10:56
поделиться

FWIW, у меня была такая же проблема с аналогичной настройкой (Windows XP). Тот же код работал без этой проблемы на Mac (OS X).

Я решил проблему, используя постоянное соединение в классе MySQLi.

См. Здесь для получения дополнительной информации: http://php.net/mysqli.persistconns

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

-1
ответ дан paperclip 16 August 2018 в 10:56
поделиться
  • 1
    Это не исправление проблемы, а обойти ее. Стойкие соединения ведут себя так по-разному, что требуют, чтобы вы были очень осторожны с тем, как вы кодируете приложение. Если вы не знакомы с ними или не используете их только на своей локальной машине, я бы не рекомендовал его. Это решение может создать намного больше проблем, чем это исправит. – phoenix 14 August 2018 в 21:39

Случается со мной при разработке моих проектов Laravel. В целях развития, это не biggie особенно, когда вы используете систему Windows. Но для производства я просто запускаю Linux и проблема решена. Также, если возможно, измените соединение MySQL с «localhost» на «127.0.0.1».

1
ответ дан thomas jackson 16 August 2018 в 10:56
поделиться
  • 1
    Обратите внимание, что этот вопрос задан более шести лет назад, есть несколько ответов, предоставляющих информацию, и ваш ответ не дает нового понимания или разрешения проблемы. Пожалуйста, воздержитесь от поиска старых вопросов, если у вас нет фактического неопубликованного решения для них. – Sami Kuhmonen 27 July 2018 в 13:01
Другие вопросы по тегам:

Похожие вопросы: