Вопрос или проблема
Я уже больше года сталкиваюсь с этой проблемой, и это действительно доставляет мне головную боль.
Я часто испытываю невозможность подключиться к 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 для получения более специализированной помощи.