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.cnf
plik na serwerze, komentując adres powiązania lub przypisując go, 0.0.0.0
ale 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?
ssh
jest 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.Odpowiedzi:
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.cnf
plikach, które wszystkie zostały określonebind-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 mysql
i zauważyłem, że adres powiązania był przekazywany w poleceniu uruchomienia (w ten sposób przesłaniając jakiekolwiekmy.cnf
pliki), 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.plist
w--bind-address=127.0.0.1
celu--bind-address=0.0.0.0
rozwią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 mysql
spowoduje 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:/usr/local/Cellar/mysql/<yourversion>/homebrew.mxcl.mysql.plist
i wymienić--bind-address=127.0.0.1
zbind-address=*
lub--bind-address=0.0.0.0
( patrz dokumentacja MySQL o bind-address )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.
źródło
brew install mysql56
i zmieniłem pliki~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist
i/usr/local/Cellar/mysql56/5.6.32/homebrew.mxcl.mysql56.plist
. Ale nadal, gdy uruchamiam mysqlmysql.server start
, polecenie ps pokazuje, żebind-address=127.0.0.1
. Czy są jakieś inne pliki do edycji?mysql.server start
pomija LaunchAgent, więc prawdopodobnie ustawia się gdzie indziej. Aby użyć ustawienia wplist
, prawdopodobnie musisz użyćbrew services restart mysql
brew services restart mysql
danych wyjściowychSuccessfully started
mysql` (etykieta: homebrew.mxcl.mysql) `, ale nadal jest to adres127.0.0.1
. Właściwie nie mogłem znaleźćhomebrew.mxcl.mysql.plist
zamiasthomebrew.mxcl.mysql56.plist
mysqld_safe
dla mnie nie mabind_address
. Zamiast tego jest określony w/usr/local/etc/my.cnf
.Uruchomienie
locate my.cnf
znalazło plik/usr/local/etc/my.cnf
bind-address = 0.0.0.0
brew services restart mysql
źródło
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
I uruchom ponownie serwer MySQL.
Krok 2:
Następnie musisz przyznać użytkownikowi uprawnienia do zdalnego dostępu
Zobacz, jak włączyć zdalne połączenie.
źródło
mysql> show grants for 'home'; | Grants for home@% | GRANT ALL PRIVILEGES ON *.* TO 'home'@'%' IDENTIFIED BY PASSWORD '...' WITH GRANT OPTION |
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:
źródło