Иногда: Невозможно подключиться к хосту 127.0.0.1 или время запроса истекло. MySQL через Sequel PRO

Вопрос или проблема

Я уже больше года сталкиваюсь с этой проблемой, и это действительно доставляет мне головную боль.

Я часто испытываю невозможность подключиться к MySQL серверу через SequelPRO. Если я подключаюсь к серверу по SSH, то могу без проблем использовать mysql, видеть процессы и т.д. Мое веб-приложение также работает нормально.

Когда я пытаюсь подключиться к своей базе данных MySQL через Sequel PRO, мгновенно появляется следующее сообщение:


Не удалось подключиться к хосту 127.0.0.1 или истекло время ожидания запроса.
Убедитесь, что адрес указан правильно и у вас есть необходимые привилегии, или попробуйте увеличить время ожидания подключения (в настоящее время 10 секунд).
MySQL сказал: Соединение с сервером MySQL потеряно при ‘чтении начального коммуникационного пакета’, системная ошибка: 0


Единственное решение — перезагрузить сервер. Иногда я перезагружаю сервер, и он все равно не работает. После нескольких перезагрузок он начинает работать. Но, как правило, он работает каждый раз.

  • Это происходит на всех моих разных серверах forge (php5 и php7) и случается с первого дня.
  • Перезапуск mysql сервера (например, sudo service restart mysql) не помогает.
  • Это происходит в разных сетях (wi-fi, локально и т.д.)
  • Я могу подключиться без проблем с другого Mac с другим SSH-ключом (с той же версией OSX и сборкой Sequel Pro). Я даже пытался скопировать свой собственный SSH-ключ на другой компьютер и подключиться через него. Это тоже работает.
  • Это происходит в случайные моменты, часто если мой Sequel Pro был открыт, когда мой Mac спал (но не всегда — иногда я могу открыть его через 24 часа и все еще быть подключенным). Но внезапно я отключаюсь, и когда я пытаюсь войти снова, вижу следующую ошибку:
  • В некоторых ситуациях я снова могу войти в MySQL через Sequel Pro, даже если ничего не делал (т.е. не перезагружал сервер).

Способ подключения:

MySQL Хост: 127.0.0.1
Имя пользователя: что-то
Пароль: что-то
Порт: 3306
SSH Хост: сервер-ip
SSH Пользователь: что-то
SSH Ключ: путь к моему id_rsa
SSG Порт: по умолчанию/не задан

Есть идеи?

Моя версия Sequel Pro: v1.1 сборка 4499
Мой OSX: OS X El Capitan v 10.11

Сервер: Ubuntu 14.04.3 LTS (GNU/Linux 3.13.0-71-generic x86_64)

MySQL: Вер 14.14 Дистриб 5.7.10, для Linux (x86_64) с использованием обертки EditLine

Похоже, у вас проблемы с подключением через SSH или поддержанием SSH-туннеля, эти ошибки обычно регистрируются в /var/log/auth.log. Вероятно, SequelPRO пытается использовать соединение, которое больше не доступно, застряло.

Вы также можете попробовать вручную настроить SSH-туннель: http://www.sequelpro.com/docs/Set_up_an_SSH_Tunnel — если это сработает, значит, это определенно ошибка/проблема с SSH-соединением SequelPro.

Упоминание 127.0.0.1 похоже на то, что вы используете функцию SSH-туннелирования SequelPro.

Смотрите Как надежно поддерживать открытым SSH-туннель для решения этой проблемы.

Вы можете быть уверены в этой проблеме, если в следующий раз, когда это произойдет, вы отключите свою SSH-сессию от сервера, повторно подключитесь, и это сработает.

Немного в темноту, но я уже сталкивался с этим и сумел это отладить.

Это действительно странный крайний случай.

Если ваш источник времени установлен на jiffies, некоторые процессоры могут не синхронизироваться друг с другом, что приводит к ситуации, когда время на одном процессоре отличается от времени на другом процессоре. Для этого может быть разница всего в 1 секунду, чтобы это вызвало проблему в MySQL.

Вы можете протестировать это следующим образом:

for i in $(seq 0 $(($(getconf _NPROCESSORS_ONLN)-1))); do taskset -c $i date & done

Каждая строка должна показывать один и тот же результат, без разницы более одной секунды. Вы должны попробовать это несколько раз, чтобы убедиться, что просто не пересекали порог в 1 секунду во время теста.

Ошибка, с которой я столкнулся, заключалась в том, что один процессор был на 1 секунду впереди другого процессора. Это привело к тому, что MySQL запрашивал время, затем снова сравнивал время с следующим новым запросом (который был на -1 секунду впереди). Поскольку это неожиданно, это привело к переполнению, и MySQL думал, что соединение старше на четыре миллиарда секунд, чем оно есть.

Если это проблема, вы должны изменить источник времени на хосте с jiffies на tsc, hpet или acpi, и проблема должна исчезнуть.

Установите в вашем ~/.ssh/config ‘ForwardAgent yes’.
Также grant all on db.* to 'user'@'127.0.0.1' identified by 'password'

Ответ или решение

Проблема, с которой вы столкнулись, связана с подключением к MySQL через Sequel Pro. Ошибка "Unable to connect to host 127.0.0.1, or the request timed out" может быть вызвана несколькими факторами, и давайте рассмотрим возможные решения.

1. Проверка SSH-соединения

Первоначально убедитесь, что SSH-соединение работает без сбоев. Попробуйте подключиться к серверу через терминал:

ssh -i path/to/your/id_rsa user@server-ip

Если подключение устанавливается успешно, проблема действительно может заключаться в Sequel Pro.

2. Настройка SSH-туннеля

Вы можете настроить SSH-туннель вручную, как описано в документации Sequel Pro. Это поможет вам понять, возникает ли ошибка из-за проблем с автоматической настройкой SSH в Sequel Pro.

3. Проверка логов

Проверьте логи на сервере, связанные с SSH и MySQL. Логи аутентификации находятся по пути /var/log/auth.log. Эта информация поможет вам определить, возникают ли проблемы на стороне сервера.

4. Увеличение времени ожидания

Проверьте настройки времени ожидания подключения. Возможно, стоит увеличить время ожидания (по умолчанию 10 секунд) в настройках Sequel Pro или в файле конфигурации SSH.

5. Проверка состояния MySQL

Убедитесь, что MySQL работает корректно:

sudo service mysql status

Если он не работает, попробуйте перезапустить его:

sudo service mysql restart

6. Параметры конфигурации

Добавьте следующее в ваш ~/.ssh/config:

Host server-ip
    ForwardAgent yes

Это может помочь в случае, если Sequel Pro не может использовать ваш SSH-агент.

7. Проблемы с производительностью процессора

Если все вышеперечисленные шаги не помогают, возможно, подобная проблема связана с синхронизацией времени между процессорами на сервере. Проверьте, не отличается ли время на разных ядрах, используя следующую команду:

for i in $(seq 0 $(($(getconf _NPROCESSORS_ONLN)-1))); do taskset -c $i date; done

Это должно показать одно и то же время на всех ядрах. Если обнаружите разницу, стоит изменить источник времени в настройках BIOS.

8. Проверьте привилегии пользователя

Убедитесь, что у вашего пользователя есть необходимые привилегии для подключения к MySQL с IP 127.0.0.1. Выполните следующую команду в MySQL:

GRANT ALL ON db.* TO 'user'@'127.0.0.1' IDENTIFIED BY 'password';

Заключение

Если ни одно из предложенных решений не помогло, рассмотрите возможность использования альтернативных клиентов для работы с MySQL, таких как MySQL Workbench или DBeaver, которые могут предложить более стабильное соединение через SSH.

Если проблема продолжает возникать, возможно, стоит обратиться в сообщество Sequel Pro для получения более специализированной помощи.

Оцените материал
Добавить комментарий

Капча загружается...