Jak zezwolić na zdalne połączenie z mysql


362

Zainstalowałem MySQL Community Edition 5.5 na moim komputerze lokalnym i chcę zezwalać na połączenia zdalne, aby móc łączyć się ze źródła zewnętrznego.

Jak mogę to zrobić?



1
Jeśli zdarzy ci się korzystać z DigitalOcean, możesz spróbować użyć sudo mysql_secure_installation. Do Twojej wiadomości
Alan Dong

Nie używaj formatowania kodu dla tekstu, który nie jest kodem. Poza tematem.
Markiz Lorne

@EJP dlaczego? szczere pytanie z ciekawości
René Roth,

Odpowiedzi:


776

Jest to domyślnie dozwolone w MySQL.

Domyślnie wyłączony jest rootdostęp zdalny . Jeśli chcesz to włączyć, uruchom lokalnie to polecenie SQL:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Następnie znajdź następujący wiersz i skomentuj go w swoim my.cnfpliku, który zwykle występuje /etc/mysql/my.cnfw systemach Unix / OSX. W niektórych przypadkach lokalizacja pliku to /etc/mysql/mysql.conf.d/mysqld.cnf).

Jeśli jest to system Windows, możesz go znaleźć w katalogu instalacyjnym MySQL, zwykle coś takiego, C:\Program Files\MySQL\MySQL Server 5.5\ a nazwa pliku będzie my.ini.

Zmień linię

 bind-address = 127.0.0.1

do

 #bind-address = 127.0.0.1

I zrestartuj serwer MySQL ( Unix / OSX i Windows ), aby zmiany odniosły skutek.


4
Ok, więc dodałem adres binnd = 127.0.0.1 na końcu pliku i próbowałem połączyć się za pomocą navicat z zewnętrznego hosta i otrzymuję błąd 10060
Leo

7
Hmm, nie musisz go dodawać. Tak jak powiedziała moja odpowiedź, musisz to skomentować, a nie dodać. Domyślnie jest tam jeden, więc musisz go znaleźć i skomentować, poprzedzając go #
mjuarez

7
Hmm, w \ MYsql Server 5.5 \ jest tylko 1 plik ini o nazwie my-default.ini, a jedyny wiersz bez # to: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo

2
ta odpowiedź działa idealnie. thnx @mjuarez - PRZYZNAJ WSZYSTKIE UPRAWNIENIA NA . DO „root” @ „%” IDENTYFIKOWANY PRZEZ „hasło” Z OPCJĄ DOTACJI;
yadavr

66
Tym, którzy szukają my.cnfpliku i nie znajdują bind-addressw nim dyrektywy, zauważ, że w moim przypadku (MySQL wersja 14.14 na Ubuntu 16.04.2) lokalizacja pliku to/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon

49

Po wykonaniu powyższych czynności nadal nie mogłem zalogować się rootzdalnie, ale Telnetting do portu 3306potwierdził, że MySQLakceptuje połączenia.

Zacząłem patrzeć na użytkowników w MySQL i zauważyłem, że było wielu użytkowników root z różnymi hasłami.

select user, host, password from mysql.user;

Więc MySQLmogę ustawić wszystkie hasła do korzenia ponownie i mogłem wreszcie zalogować się zdalnie jako root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
To jest poprawne. Podczas wykonywania innych kroków wydaje się, że tworzone są konta użytkowników z pustym hasłem. Musisz więc dodać do nich hasła.
chhantyal

1
Musiałem połączyć zaakceptowaną odpowiedź z tą, a potem wszystko działało poprawnie.
James

8
SQL dla wersji 5.7 i nowszychupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft,

Akceptowana odpowiedź ustawia hasło i działała dla mnie.
MikeKulls,

1
Dziękuję, podobnie jak @James, musiałem to połączyć z zaakceptowaną odpowiedzią, aby to naprawić.
Ben Everard,

39

Z mojego doświadczenia wynika, że ​​pod tą ścieżką można znaleźć plik konfiguracyjny /etc/mysql/mysql.conf.d/mysqld.cnf.

(Przez jakiś czas walczyłem o znalezienie tej ścieżki)


1
Jest to wysoce zależne od używanej dystrybucji. Najlepszym sposobem jest po prostu to wyszukać:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny,

Doceniam polecenie „znajdź”. Jestem nowy w wierszu poleceń, więc jest to bardzo pomocne. Dzięki!
Heres2u,

Zmagałem się z godzinami edycji pliku /etc/mysq/conf.d/mysql.cnf, dopóki nie znalazłem tej odpowiedzi.
Gayan Kavirathne

26

W moim przypadku próbowałem połączyć się ze zdalnym serwerem mysql na cent OS. Po przejściu wielu rozwiązań (przyznanie wszystkich uprawnień, usunięcie powiązań ip, umożliwienie pracy w sieci) problem nadal nie został rozwiązany.

Jak się okazało, patrząc na różne rozwiązania, natknąłem się na iptables, co uświadomiło mi, że port 3306 mysql nie przyjmuje połączeń.

Oto krótka uwaga na temat sprawdzania i rozwiązywania tego problemu.

  • Sprawdzanie, czy port akceptuje połączenia:
telnet (adres IP serwera MySQL) [portNo]
  • Dodanie reguły tabeli ip, aby umożliwić połączenia na porcie:
iptables -A WEJŚCIE -i eth0 -p tcp -m tcp --port 3306 -j AKCEPTUJ
  • Nie poleciłbym tego w środowisku produkcyjnym, ale jeśli twoje iptables nie są poprawnie skonfigurowane, dodanie reguł może nadal nie rozwiązać problemu. W takim przypadku należy wykonać następujące czynności:
Serwis iptables zatrzymuje się

Mam nadzieję że to pomoże.


17

Wykonaj poniższe kroki, aby ustawić zdalny dostęp do symboli wieloznacznych dla użytkownika MySQL.

(1) Otwórz cmd.

(2) przejdź do ścieżki C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin i uruchom tę komendę.

mysql -u root -p

(3) Wprowadź hasło roota.

(4) Wykonaj następujące polecenie, aby uzyskać pozwolenie.

UDZIELAJ WSZYSTKICH UPRAWNIEŃ NA *. * NA „NAZWA UŻYTKOWNIKA” @ „IP” IDENTYFIKOWANA PRZEZ „HASŁO”;

NAZWA UŻYTKOWNIKA: nazwa użytkownika, z którą chcesz się połączyć z serwerem MySQL.

IP: publiczny adres IP, z którego chcesz zezwolić na dostęp do serwera MySQL.

HASŁO: Hasło użytej nazwy użytkownika.

Adres IP można zastąpić%, aby umożliwić użytkownikowi połączenie z dowolnego adresu IP.

(5) Opróżnij poprzednie poziomy, wykonując polecenie i wyjdź.

PRZYWILEJE PŁUCZĄCE;

wyjście; lub \ q

wprowadź opis zdjęcia tutaj


3
Po zrobieniu tego mój root nadal ma odmowę dostępu. Czego mi brakowało?
teapeng

Możesz spróbować użyć adresu IP lokalnego systemu zamiast% w 4. kroku. To powinno działać. % oznacza dowolny adres IP.
Hiren Parghi

6

Jeśli proces serwera MySQL nasłuchuje tylko w wersji 127.0.0.1 lub :: 1, wówczas nie będzie można połączyć się zdalnie. Jeśli masz bind-addressustawienie w/etc/my.cnf może to być przyczyną problemu.

Będziesz także musiał dodać uprawnienia dla osób niebędących localhostużytkownikami.


Dziwne, w jaki sposób twój serwer może „nasłuchiwać” w innym adresie IP 127.0.0.1?
Pacerier

2
@Pacerier 127.0.0.1 jest powiązany tylko z interfejsem sprzężenia zwrotnego. Połączenia zewnętrzne nie będą działać. System często ma wiele interfejsów sieciowych, z których każdy musi być specjalnie powiązany, lub można użyć adresu powiązania 0.0.0.0.
tadman

6

Jeśli zainstalowałeś z brewniego MySQL, tak naprawdę domyślnie nasłuchuje tylko na lokalnym interfejsie. Aby to naprawić, musisz edytować /usr/local/etc/my.cnfi zmienić bind-addressz 127.0.0.1na *.

Potem biegnij brew services restart mysql.


1
Dla mojego serwera Ubuntu 16.04.4 ustawienie adresu powiązania znajduje się w /etc/mysql/mysql.conf.d/mysqld.cnf
Frank

To nie jest tylko użycie naparu, każdy MySQL będzie miał to ustawienie domyślne, aby zezwalać tylko na połączenia lokalne.
nivs1978

6

Cały proces zdalnego logowania. Zdalne logowanie jest domyślnie wyłączone. Musisz otworzyć je ręcznie dla wszystkich adresów IP .. aby uzyskać dostęp do wszystkich adresów IP

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Specyficzne Ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

następnie

flush privileges;

Możesz sprawdzić swój Host użytkownika i hasło

SELECT host,user,authentication_string FROM mysql.user;

Teraz twoim obowiązkiem jest to zmienić

bind-address = 127.0.0.1

Możesz to znaleźć na

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

jeśli go tam nie znajdziesz, spróbuj tego

sudo nano /etc/mysql/my.cnf

skomentuj w tym

#bind-address = 127.0.0.1

Następnie uruchom ponownie MySQL

sudo service mysql restart

Teraz korzystaj ze zdalnego logowania


3

Tylko do twojej wiadomości Wyciągnąłem włosy z tym problemem przez wiele godzin .. w końcu dzwonię do mojego dostawcy hostingu i stwierdziłem, że w moim przypadku za pomocą serwera w chmurze, że w panelu sterowania dla 1 i 1 mają dodatkową zaporę ogniową, którą musisz sklonować i dodać port 3306. Po dodaniu dostałem się prosto ..


Brzmi to bardzo specyficznie dla twojej sytuacji. Nie jestem niekończącym się źródłem wiedzy na temat sieci, ale czy jesteś pewien, że to rozwiązanie dobrze pasuje do tego problemu?
Sandy Gifford,

2
Też miałem ten problem. Wspólne z serwerami w chmurze,
Matthew Lock

2

Dla kogo potrzebuje, sprawdź, czy port zapory 3306 jest otwarty, jeśli usługa zapory jest uruchomiona.



1

A dla OS X ludzie są świadomi, że parametr bind-address jest zwykle ustawiony w uruchomionej liście, a nie w pliku my.ini. Więc w moim przypadku usunąłem <string>--bind-address=127.0.0.1</string>z /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.


Alternatywna lokalizacja pliku plist:~/Library/LaunchAgents
Dylan Nissley,

1

Jeśli mysqldma adres wiążą zestaw do pętli zwrotnej / adresu lokalnego (na przykład 127.0.0.1), serwer nie jest osiągalny z zdalnych komputerów, ponieważ interfejs ten nie może być osiągnięte z każdego zdalnego komputera.

Ustaw tę opcję na 0.0.0.0( ::dla IPv4 + 6), aby akceptować połączenia z dowolnego hosta, lub na inny dostępny z zewnątrz adres, jeśli chcesz zezwolić na połączenia tylko na jednym interfejsie.

Źródło


0

czasami trzeba użyć nazwy komputera w systemie Windows

pierwszy krok) w pliku konfiguracyjnym mysql:

mysqld.cnf USTAW adres powiązania = 0.0.0.0

(aby umożliwić odbieranie połączeń przez TCP / IP)

drugi krok) uczyń użytkownika w mysql, użytkownikami tabeli, z nazwą komputera w Windowsie, NIE ip

wprowadź opis zdjęcia tutaj


0

Włączenie zdalnego dostępu do katalogu głównego może być niebezpieczne. Lepiej byłoby skonfigurować konta użytkowników z bardziej restrykcyjnymi uprawnieniami. Poniższe trzy kroki powinny to zrobić.

  1. Upewnij się, że linia zaczynająca się od bind-address ...jest przynajmniej skomentowana w pliku my.ini lub my.cnf. Jeśli nie istnieje, przejdź dalej. Ten plik można znaleźć w C:\ProgramData\MySQL\MySQL Server 8.0systemie Windows.

  2. Następnie sprawdź, czy konto użytkownika, z którym nawiązujesz połączenie, nie ma localhostw polu Limit do dopasowania hostów. Chociaż nie jest to zalecane, możesz zamiast tego wpisać %to pole do celów testowych. Możesz to zrobić, otwierając lokalne połączenie z serwerem za pomocą MySQL Workbench, a następnie wybierając opcję Serwer> Użytkownicy i uprawnienia z paska menu i znajdując konto użytkownika, z którym chcesz się połączyć.

Pole „Ogranicz do dopasowania hostów” uniemożliwia połączenie nielokalne. To znaczy ogranicza akceptowane połączenia do wzorca adresów IP. Idealnie byłoby, gdybyś miał dostęp do serwera MySQL ze statycznego adresu IP lub podsieci, abyś mógł być jak najbardziej restrykcyjny.

  1. Oczywiście, twoja zapora ogniowa powinna pozwalać aplikacji MySQL Server na komunikację przez pożądany port. Fizyczny sprzęt sieciowy między tobą a serwerem powinien umożliwiać komunikację na porcie, z którym chcesz się połączyć. (zazwyczaj port 3306)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.