Nie można uzyskać zdalnego dostępu do serwera MySQL działającego w systemie Mac OS X.

11

Mam serwer MySQL uruchomiony na komputerze, na którym działa Mac OS X Maverick. Chcę uzyskać do niego dostęp z komputera domowego, który ma także system Mac OS Maverick.

Z terminalu, jeśli na 1 karcie, ssh do mojego komputera roboczego i po prostu pozwól sesji ssh siedzieć tam bezczynnie, a następnie na innej karcie, mogę uzyskać dostęp do serwera MySQL.

Jednak bez uruchomionej sesji ssh pojawi się następujący błąd

BŁĄD 2003 (HY000): Nie można połączyć się z serwerem MySQL na „SERVER_IP_ADDRESS” (60)

Próbowałem zmodyfikować my.cnfplik na serwerze, komentując adres powiązania lub przypisując go, 0.0.0.0ale to nie działa.

Dlaczego tak jest? Jak mogę skonfigurować serwer, aby umożliwiał zdalny dostęp bez konieczności uruchamiania ssh na kliencie? Czy ktoś może pomóc?

Chepukha
źródło
Mam ten sam problem z PostGIS działającym na zdalnym OS X ... może łączyć się z bazą danych, gdy sshjest otwarta na jednej karcie, ale poza tym nie. Myślę, że problem polega na tym, że proces serwera bazy danych jest wstrzymany lub nie działa, gdy nie jestem zalogowany na serwerze zdalnym.
andybega

Odpowiedzi:

20

Waliłem głową w ten błąd dzisiaj na OSX Yosemite z MySQL 5.7 ostatnio zaktualizowanym o Homebrew. Zgodnie z sugestiami dotyczącymi StackOverflow i innych miejsc szukałem po my.cnfplikach, które wszystkie zostały określone bind-address=0.0.0.0. Nawet usunąłem i ponownie zainstalowałem MySQL zgodnie z tymi instrukcjami, a następnie ponownie zainstalowałem za pomocą brew install mysql. Nadal niedozwolone połączenia zdalne.

Dopiero gdy uruchomiłem ps -ax | grep mysqli zauważyłem, że adres powiązania był przekazywany w poleceniu uruchomienia (w ten sposób przesłaniając jakiekolwiek my.cnfpliki), wykopałem jeszcze trochę i dowiedziałem się, że Homebrew domyślnie wiąże MySQL z 127.0.0.1 .

Edycja ~/Library/LaunchAgents/homebrew.mxcl.mysql.plistw --bind-address=127.0.0.1celu --bind-address=0.0.0.0rozwiązania mojego problemu (ten ostatni powinien zostać zmieniony na konkretny adres IP, jeśli nie jest to tylko maszyna programistyczna).

Uważam, że jest to istotna informacja, której brakowało w większości zasobów, z którymi się skonsultowałem, więc mam nadzieję, że opublikowanie tego tutaj pomoże komuś innemu!

EDYCJA: Jak wskazał LeandroCR w komentarzach, uruchomienie brew services restart mysqlspowoduje zastąpienie pliku plist w LaunchAgents domyślnym, co spowoduje, że MySQL ponownie w tajemniczy sposób odmówi połączenia. Lepsza rada niż to, co pierwotnie napisałem, jest następująca:

  1. Edycja /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plisti wymienić --bind-address=127.0.0.1z bind-address=*lub --bind-address=0.0.0.0( patrz dokumentacja MySQL o bind-address )
  2. Uruchom ponownie mysql przy użyciu brew services restart mysql

Następnie MySQL powinien nadal akceptować połączenia nielokalne od tego momentu - prawdopodobnie do momentu ponownej instalacji.

Edytuj (wrzesień 2019 r.) Timothy Zorn zwraca uwagę, że ten problem nie występuje już w przypadku MySQL 8.x zainstalowanego i uruchomionego za pośrednictwem Homebrew, więc moja powyższa odpowiedź, napisana w 2016 r., Może dotyczyć tylko wersji 5.x.

Emma Burrows
źródło
3
Kolejna wskazówka: jeśli korzystasz z $ brew services uruchom ponownie mysql, za każdym razem wyczyści on plik plist z LaunchAgents. Jeśli chcesz zachować tę zmianę, edytuj /usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist - również bardzo dziękuję Emmie !!!
LeandroCR
Zainstalowałem mysql 5.6 brew install mysql56i zmieniłem pliki ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plisti /usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist. Ale nadal, gdy uruchamiam mysql mysql.server start, polecenie ps pokazuje, że bind-address=127.0.0.1. Czy są jakieś inne pliki do edycji?
xi.lin,
@ xi.lin Jak rozumiem, mysql.server startpomija LaunchAgent, więc prawdopodobnie ustawia się gdzie indziej. Aby użyć ustawienia w plist, prawdopodobnie musisz użyćbrew services restart mysql
Emma Burrows,
@EmmaBurrows Korzystanie z brew services restart mysqldanych wyjściowych Successfully started mysql` (etykieta: homebrew.mxcl.mysql) `, ale nadal jest to adres 127.0.0.1 . Właściwie nie mogłem znaleźć homebrew.mxcl.mysql.plistzamiasthomebrew.mxcl.mysql56.plist
xi.lin
1
Na razie nie działa już tak. Polecenie użyte mysqld_safedla mnie nie ma bind_address. Zamiast tego jest określony w /usr/local/etc/my.cnf.
Timmmm
6

Uruchomienie locate my.cnfznalazło plik/usr/local/etc/my.cnf

  1. Edytuj ten plik i ustaw bind-address = 0.0.0.0
  2. Uruchom ponownie mysql: brew services restart mysql
Pablo Díaz Ogni
źródło
5

Mam nadzieję, że musisz utworzyć użytkownika do zdalnego dostępu za pomocą '%'symboli wieloznacznych i udzielić uprawnień do baz danych.

Krok 1:

W my.cnf ( /server/9107/how-do-i-find-where-mysql-is-loading-its-config-from ) skomentuj swój adres powiązania

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

I uruchom ponownie serwer MySQL.

Krok 2:

Następnie musisz przyznać użytkownikowi uprawnienia do zdalnego dostępu

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

Zobacz, jak włączyć zdalne połączenie.

Abdul Manaf
źródło
Próbowałem już tego ustawienia (komentowanie adresu powiązania) i nie działało. Utworzyłem użytkownika i udzieliłem również wszystkich uprawnień. mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
chepukha
Czy masz zainstalowaną zaporę ogniową? Jeśli tak, wyłącz to.
Abdul Manaf
Tak, mogę uzyskać dostęp do serwera, gdy zapora jest wyłączona. Ale czy mogę skonfigurować zaporę ogniową, aby umożliwić zdalny dostęp do serwera SQL zamiast całkowicie go wyłączyć? Na serwerze, w ustawieniach zapory sieciowej, ustawiłem mysqld na „zezwalanie na połączenia przychodzące”
chepukha
Czy program SQL Server jest również zainstalowany na tym samym komputerze?
Abdul Manaf
Tak. Masz na myśli SQL Server i Firewall na tym samym komputerze?
chepukha
0

Sprawdź iptables jako iptables -L

Jeśli twój adres IP nie jest obecny, dodaj go

W przypadku Ubuntu ADD IP, aby umożliwić dostęp:

iptables -A ALLOWIN -s 192.168.1.XX/32 ! -i lo -j ACCEPT
Priyanka Kariya
źródło