Неможливо віддалений доступ до сервера MySQL, який працює на Mac OS X


11

У мене на робочому комп'ютері працює сервер MySQL, на якому працює Mac OS X Maverick. Я хочу отримати доступ до нього з домашнього комп'ютера, на якому також є Mac OS Maverick.

З терміналу, якщо на 1 вкладці я сш в свій робочий комп'ютер і просто дозволю сеансу ssh сидіти там, не будучи простою, то на іншій вкладці я можу отримати доступ до MySQL-сервера.

Однак без запуску сеансу ssh я отримаю наступну помилку

ПОМИЛКА 2003 (HY000): Не вдається підключитися до сервера MySQL на "SERVER_IP_ADDRESS" (60)

Я намагався змінити my.cnfфайл на сервері, коментуючи bind-адресу або призначивши його, 0.0.0.0але він не працює.

Чому це так? Як я можу налаштувати сервер так, щоб він давав віддалений доступ без необхідності запускати ssh на клієнті? Може хтось, будь ласка, допоможе?


У мене така ж проблема з PostGIS, який працює на віддаленій ОС 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-адресу, якщо це не лише машина для розробки).

Я вважаю, що це життєво важлива інформація, якої не вистачало більшості ресурсів, з якими я консультувався, і, сподіваюся, розміщення цього повідомлення допоможе комусь іншому!

EDIT: Як LeandroCR вказав у коментарях, запуску brew services restart mysqlбуде замінено файл плістів у 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, вона кожного разу очищатиме файл плістів від LaunchAgents. Якщо ви хочете наполегливо змінити edit /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - Також Емма дякую !!!
LeandroCR

Я встановив mysql 5.6 за допомогою brew install mysql56, і я змінив bthe ~/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` (мітка: 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.
Timmmm

6

Запуск locate my.cnfзнайшов файл/usr/local/etc/my.cnf

  1. Відредагуйте цей файл і встановіть bind-address = 0.0.0.0
  2. Перезапустити mysql: brew services restart mysql

5

Я сподіваюся, що вам потрібно створити користувача для віддаленого доступу за допомогою '%'wildcard та надання дозволу на бази даних.

Крок 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';

Перегляньте, як увімкнути віддалене з'єднання.


Я раніше пробував цей параметр (коментуючи прив'язку адреси), і він не працював. Я створив користувача і надав усі дозволи. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
чепуха

У вас є брандмауер на місці? Якщо це, будь ласка, відключіть це.
Абдул Манаф

Так, я можу отримати доступ до сервера, коли брандмауер вимкнено. Але чи можу я налаштувати брандмауер, щоб дозволити віддалений доступ до сервера sql, а не повністю вимкнути його? На сервері в налаштуваннях брандмауера я встановив mysqld "дозволити вхідні з'єднання"
chepukha

У вас також SQL Server встановлений на одній машині?
Абдул Манаф

Так. Ви маєте на увазі SQL-сервер та брандмауер на одній машині?
чепуха

0

Перевірте iptables як iptables -L

Якщо вашого IP-адреси немає, додайте його

У разі використання Ubuntu ADD IP для дозволу доступу:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.