Я сьогодні відбиваю голову від цієї помилки на OSX Yosemite з MySQL 5.7, нещодавно оновленим Homebrew. Слідуючи пропозиціям про StackOverflow та інших місцях, я попрямував за my.cnf
файлами, які вказував усі bind-address=0.0.0.0
. Я навіть видалив і перевстановив MySQL, дотримуючись цих інструкцій, а потім перевстановив за допомогою brew install mysql
. Ще не дозволяється віддалених з'єднань.
Лише я не забіг ps -ax | grep mysql
і не помітив, що в команді запуску передається прив'язувальна адреса (таким чином переосмислюючи будь-які my.cnf
файли), я перекопав ще кілька разів і дізнався, що Homebrew за замовчуванням прив’язує MySQL до 127.0.0.1 .
Внесення ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
змін --bind-address=127.0.0.1
для --bind-address=0.0.0.0
вирішення моєї проблеми (останню слід змінити на конкретну IP-адресу, якщо це не лише машина для розробки).
Я вважаю, що це життєво важлива інформація, якої не вистачало більшості ресурсів, з якими я консультувався, і, сподіваюся, розміщення цього повідомлення допоможе комусь іншому!
EDIT: Як LeandroCR вказав у коментарях, запуску brew services restart mysql
буде замінено файл плістів у LaunchAgents з типовим, що призведе до того, що MySQL таємничо відмовиться від з'єднань знову. Тож краще поради, ніж те, що я писав спочатку, є наступним:
- Редагувати
/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist
і замінити --bind-address=127.0.0.1
з bind-address=*
або --bind-address=0.0.0.0
( див MySQL документації по Bind-адреса )
- Перезапустіть mysql за допомогою
brew services restart mysql
Тоді MySQL повинен продовжувати приймати не локальні з'єднання з цього моменту - до моменту встановлення його, імовірно.
Редагувати (вересень 2019 р.)
Тімоті Зорн вказує, що ця проблема більше не виникає для встановлення та запуску MySQL 8.x через Homebrew, тому моя відповідь, написана у 2016 році, може стосуватися лише 5.x.
ssh
вона відкрита на одній вкладці, але в іншому випадку - ні. Я думаю, що проблема полягає в тому, що процес сервера баз даних призупинено або не працює, коли я не увійшов на віддалений сервер.