Я бился головой об этой ошибке сегодня на 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-адрес, если это не просто машина разработки).
Я чувствую, что это жизненно важная информация, которой не хватало в большинстве ресурсов, с которыми я консультировался, так что, надеюсь, размещение этого здесь поможет кому-то еще!
РЕДАКТИРОВАТЬ: Как LeandroCR указал в комментариях, запуск brew services restart mysql
перезапишет plist-файл в 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
открыт в одной вкладке, но в противном случае нет. Я думаю, что проблема в том, что процесс сервера базы данных приостановлен или не работает, когда я не вошел на удаленный сервер.