Как понять сообщения об ошибках "Не удается подключиться" MySQL?
У меня есть следующее сообщение об ошибке:
SQLSTATE [HY000] [2003] Не удается подключиться к серверу MySQL в "192.168.50.45" (4)
Как бы я проанализировал это (у меня HY000, у меня 2003, и у меня есть (4).
6 ответов
HY000 - это очень общий код ошибки уровня ODBC, а 2003 - это специфический для MySQL код ошибки, который означает, что первоначальное соединение с сервером не удалось. 4 - код ошибки из-за неудачного вызова на уровне ОС, который пытался выполнить драйвер MySQL. (Например, в Linux вы увидите "(111)", когда в соединении было отказано, потому что connect()
сбой вызова с кодом ошибки ECONNREFUSED со значением 111.)
Используя инструмент perror, который поставляется с MySQL:
shell> perror 4
OS error code 4: Interrupted system call
Это может быть ошибка, когда сообщается о неправильной ошибке, в этом случае это может быть простой тайм-аут соединения (errno 111)
FWIW, потратив около 2-3 месяцев на изучение этого вопроса различными способами, мы пришли к выводу, что (по крайней мере для нас) ошибка (4) возникает, когда в сети слишком много данных для подключения к завершить в разумное количество времени. из наших исследований (4) происходит в середине процесса рукопожатия. Вы можете увидеть это в среде Unix, используя 'netem' для фальсификации перегрузки сети.
Быстрое решение состоит в том, чтобы увеличить параметр времени ожидания соединения. Это позволит скрыть любую (4) ошибку, но может не быть решением проблемы. Реальное решение состоит в том, чтобы увидеть, что радует в конце DB в то время. Если вы обрабатываете много данных, когда это происходит, было бы неплохо узнать, можете ли вы разделить их на более мелкие куски или даже передать обработку на другой сервер, если у вас есть такая роскошь.
Я столкнулся с этой проблемой. Увеличение connect_timeout окончательно сработало.
Я просто боролся с той же проблемой.
Отключение поиска имени хоста DNS решило проблему для меня.
[mysqld]...... пропустить имя-разрешение
Не забудьте перезапустить MySQL, чтобы изменения вступили в силу.
@cdhowie Хотя вы можете быть правы в других обстоятельствах, с этой конкретной ошибкой (4) является ошибкой клиентской библиотеки mysql, вызванной неудачным рукопожатием. Это на самом деле видно в исходном коде. Обычная причина - слишком много данных, вызывающих внутренний тайм-аут. Создание "места" для соединения обычно сортирует его, не маскируя проблему, например, увеличивая время ожидания или увеличивая пропускную способность.