У меня на рабочем компьютере работает сервер MySQL, на котором работает Mac OS X Maverick. Я хочу получить к нему доступ с домашнего компьютера, на котором также установлена Mac OS Maverick.
Из терминала, если на 1 вкладке я захожу в ssh на свой рабочий компьютер и просто оставляю сеанс ssh без сбоев, то на другой вкладке я могу получить доступ к серверу MySQL.
Однако, без запуска сеанса SSH, я получу следующую ошибку
ОШИБКА 2003 (HY000): не удается подключиться к серверу MySQL по серверу SERVER_IP_ADDRESS (60)
Я пытался изменить my.cnf
файл на сервере, комментируя bind-адрес или назначая его, 0.0.0.0
но он не работает.
Почему это так? Как я могу настроить сервер так, чтобы он разрешал удаленный доступ без необходимости запуска ssh на клиенте? Может кто-нибудь помочь, пожалуйста?
ssh
открыт в одной вкладке, но в противном случае нет. Я думаю, что проблема в том, что процесс сервера базы данных приостановлен или не работает, когда я не вошел на удаленный сервер.Ответы:
Я бился головой об этой ошибке сегодня на 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-адресу )brew services restart mysql
Затем MySQL должен продолжать принимать нелокальные соединения с этого момента - до тех пор, пока вы, вероятно, не переустановите его.
Редактировать (сентябрь 2019) Тимоти Зорн отмечает, что эта проблема больше не возникает для MySQL 8.x, установленного и запущенного через Homebrew, поэтому мой ответ выше, написанный в 2016 году, может относиться только к 5.x.
источник
brew install mysql56
, и я изменил Бот~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist
и/usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist
файлы. Но все же, когда я запускаю mysql черезmysql.server start
, команда ps показывает, чтоbind-address=127.0.0.1
. Есть ли другие файлы для редактирования?mysql.server start
обходит LaunchAgent, поэтому он, вероятно, получает свои настройки откуда-то еще. Чтобы использовать настройки вplist
, вы, вероятно, должны использоватьbrew services restart mysql
brew services restart mysql
выводSuccessfully started
mysql` (label: homebrew.mxcl.mysql) `, но адрес все равно есть127.0.0.1
. На самом деле я не мог найтиhomebrew.mxcl.mysql.plist
вместо того, чтобы иметьhomebrew.mxcl.mysql56.plist
mysqld_safe
у меня не имеетbind_address
. Вместо этого это указано в/usr/local/etc/my.cnf
.Бег
locate my.cnf
нашел файл/usr/local/etc/my.cnf
bind-address = 0.0.0.0
brew services restart mysql
источник
Я надеюсь, что вам нужно создать пользователя для удаленного доступа с
'%'
подстановочными знаками и предоставить разрешения для баз данных.Шаг 1:
В my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) закомментируйте свой адрес привязки
И перезапустите MySQL Server.
Шаг 2:
Затем вам нужно предоставить разрешения для пользователя для удаленного доступа
Пожалуйста, ознакомьтесь с разделом Как включить удаленное соединение.
источник
mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
Проверьте iptables как iptables -L
Если ваш IP отсутствует, добавьте его
В случае Ubuntu ADD IP, чтобы разрешить доступ:
источник