Не удается получить удаленный доступ к серверу MySQL, работающему в Mac OS X

11

У меня на рабочем компьютере работает сервер 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 на клиенте? Может кто-нибудь помочь, пожалуйста?

chepukha
источник
У меня та же проблема с PostGIS, работающим на удаленной OS X ... может подключаться к базе данных, когда sshоткрыт в одной вкладке, но в противном случае нет. Я думаю, что проблема в том, что процесс сервера базы данных приостановлен или не работает, когда я не вошел на удаленный сервер.
Andybega

Ответы:

20

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

  1. Изменить /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-адресу )
  2. Перезапустите MySQL, используя brew services restart mysql

Затем MySQL должен продолжать принимать нелокальные соединения с этого момента - до тех пор, пока вы, вероятно, не переустановите его.

Редактировать (сентябрь 2019) Тимоти Зорн отмечает, что эта проблема больше не возникает для MySQL 8.x, установленного и запущенного через Homebrew, поэтому мой ответ выше, написанный в 2016 году, может относиться только к 5.x.

Эмма Берроуз
источник
3
Еще один совет: если вы используете службы $ brew, перезапустите mysql, он будет очищать файл plist от LaunchAgents каждый раз. Если вы хотите сохранить это изменение, отредактируйте /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Также Эмма большое спасибо !!!
LeandroCR
Я установил MySQL 5.6 , используя 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. Есть ли другие файлы для редактирования?
xi.lin
@ xi.lin Насколько я понимаю, mysql.server startобходит LaunchAgent, поэтому он, вероятно, получает свои настройки откуда-то еще. Чтобы использовать настройки в plist, вы, вероятно, должны использоватьbrew services restart mysql
Эмма Берроуз
@EmmaBurrows Используя brew services restart mysqlвывод Successfully started mysql` (label: homebrew.mxcl.mysql) `, но адрес все равно есть 127.0.0.1 . На самом деле я не мог найти homebrew.mxcl.mysql.plistвместо того, чтобы иметьhomebrew.mxcl.mysql56.plist
xi.lin
1
На данный момент это больше не так, как это работает. Команда для запуска mysqld_safeу меня не имеет bind_address. Вместо этого это указано в /usr/local/etc/my.cnf.
Тимммм
6

Бег locate my.cnfнашел файл/usr/local/etc/my.cnf

  1. Отредактируйте этот файл и установите bind-address = 0.0.0.0
  2. Перезапустите mysql: brew services restart mysql
Пабло Диас Огни
источник
5

Я надеюсь, что вам нужно создать пользователя для удаленного доступа с '%'подстановочными знаками и предоставить разрешения для баз данных.

Шаг 1:

В my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) закомментируйте свой адрес привязки

# bind-address        = xxx.xxx.xxx.xxx

И перезапустите MySQL Server.

Шаг 2:

Затем вам нужно предоставить разрешения для пользователя для удаленного доступа

GRANT ALL ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypass';

Пожалуйста, ознакомьтесь с разделом Как включить удаленное соединение.

Абдул Манаф
источник
Я пробовал этот параметр (комментируя bind-адрес) раньше, и он не работал. Я создал пользователя и дал все разрешения. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
Чепуха
Есть ли у вас брандмауэр? Если это так, пожалуйста, отключите это.
Абдул Манаф
Да, я могу получить доступ к серверу, когда брандмауэр выключен. Но можно ли настроить брандмауэр, чтобы разрешить удаленный доступ к серверу sql, а не полностью его отключить? На сервере в настройках брандмауэра я установил mysqld для «разрешения входящих подключений»
чепуха
У вас также установлен SQL Server на той же машине?
Абдул Манаф
Да. Вы имеете в виду SQL-сервер и брандмауэр на одной машине?
Чепуха
0

Проверьте iptables как iptables -L

Если ваш IP отсутствует, добавьте его

В случае Ubuntu ADD IP, чтобы разрешить доступ:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Приянка Кария
источник