Uzyskaj dostęp do zdalnej bazy danych mysql z wiersza poleceń

206

Mam serwer z Rackspace. Chcę uzyskać dostęp do bazy danych z wiersza poleceń mojego komputera lokalnego.

Próbowałem:

mysql -u username -h my.application.com -ppassword

Ale daje błąd:

BŁĄD 2003 (HY000):

Nie można połączyć się z serwerem MySQL na „my.application.com” (10061)

Co powoduje ten błąd i jak mogę połączyć się ze zdalną bazą danych?

user1986299
źródło
5
10061= Odmowa połączenia
Danny Beckett

Odpowiedzi:

318

Aby zalogować się bezpośrednio do zdalnej konsoli mysql, użyj poniższego polecenia:

mysql -u {username} -p'{password}' \
    -h {remote server ip or name} -P {port} \
    -D {DB name}

Na przykład

mysql -u root -p'root' \
        -h 127.0.0.1 -P 3306 \
        -D local

bez spacji po -p, jak określono w dokumentacji

Przeniesie Cię bezpośrednio do konsoli mysql, przełączając się na wspomnianą bazę danych.

Venkat M
źródło
2
Aby określić nazwę bazy danych, musimy dodać -D. mysql -u {nazwa użytkownika} -p {hasło} -h {zdalny
adres

1
co jeśli musimy określić konkretny PORT?
Serge

2
Nie działał w Terminalu na MacOS High Sierra w wersji 10.13.3
realPK


Ciekawe, że w dev.mysql.com/doc/refman/8.0/en/command-line-options.html nie wspomina się o -Dparametrze
Manuel Jordan

33

edytuj plik my.cnf:

vi /etc/my.cnf:

Upewnij się, że:

bind-address=YOUR-SERVER-IP

a jeśli masz linię:

skip-networking

koniecznie skomentuj to:

#skip-networking

nie zapomnij o ponownym uruchomieniu:

/etc/init.d/mysqld restart


bind-address = YOUR-SERVER-IP. o którym adresie IP muszę wspomnieć, czy jest to adres IP zdalnego serwera?
user1986299

@ user1986299 nie, twoja potrzeba IP Twojego serwera (nie zdalny)
Nir Alfasi

1
powinieneś przyznać sobie dostęp ... zaloguj się do swojej bazy danych z lokalnego serwera, wpisując mysql, a następnie:grant all privileges on *.* to 'root'@'%' identified by 'your-password'
Nir Alfasi

5
NIGDY nie przyznawaj 'root' @ '%' to jest ogromne zabezpieczenie, nie, nie!
josh123a123

1
@alfasin to mała poprawka o głębokim wpływie, dziękuję!
Christopher Schönfeldt

31

po prostu umieść to na terminalu w Ubuntu:

mysql -u username -h host -p

Teraz wciśnij Enter

terminal zapyta Cię o hasło, wprowadź hasło i jesteś na serwerze bazy danych


14

Spróbuj tego polecenia mysql -uuser -hhostname -PPORT -ppassword.

Miałem do czynienia z podobną sytuacją i później, gdy za pomocą polecenia wprowadzono port mysql dla hosta, problem został rozwiązany.


5
mysql -u testuser -h 192.168.**.* -P 3306 -p passwordpracował dla mnie
Mahebub A Sayyed

14

Na komputerze Mac użyj następującego polecenia:

mysql -u app -h hostaddress -P port -D dbname -p

a następnie wprowadź hasło po wyświetleniu monitu.


12

Jeśli nie chcesz używać tunelu ssh, w my.cnf lub mysqld.cnf musisz zmienić 127.0.0.1 na lokalny adres IP ( 192.168.1.100 ), aby uzyskać dostęp przez sieć LAN. przykład poniżej:

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

Wyszukaj bind-address w my.cnf lub mysqld.cnf

bind-address            =  127.0.0.1

i zmień 127.0.0.1 na 192.168.1.100 (lokalny adres IP)

bind-address            =  192.168.1.100

Aby zastosować dokonaną zmianę, należy zrestartować serwer mysql za pomocą następnego polecenia.

sudo /etc/init.d/mysql restart

Zmodyfikuj root użytkownika dla dostępu do sieci LAN (uruchom zapytanie poniżej na serwerze zdalnym, do którego chcesz mieć dostęp)

root@192.168.1.100:~$ mysql -u root -p

..

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

Jeśli chcesz mieć dostęp tylko z określonego adresu IP, zmień 'root' @ '%' na 'root' @ '(adres IP lub nazwa hosta)'

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

Następnie możesz połączyć:

nobus@xray:~$ mysql -h 192.168.1.100 -u root -p

testowany na serwerze ubuntu 18.04


Najlepsza odpowiedź! Dzięki
Nastro,


6

Zakładam, że masz zainstalowany MySQL na swoim komputerze. Wykonaj poniższe polecenie po uzupełnieniu brakujących danych:

mysql -uUSERNAME -pPASSWORD -hHOSTNAME -P3306 


2

Serwery mysql są zwykle skonfigurowane do nasłuchiwania tylko na localhost (127.0.0.1), gdzie są używane przez aplikacje internetowe.

Jeśli tak jest w Twoim przypadku, ale masz dostęp do serwera przez SSH, możesz utworzyć tunel ssh i połączyć się przez niego.

Na komputerze lokalnym utwórz tunel.

ssh -L 3307:127.0.0.1:3306 -N $user@$remote_host

(w tym przykładzie użyto lokalnego portu 3307, na wypadek gdybyś miał również mysql działający na komputerze lokalnym i korzystający ze standardowego portu 3306)

Teraz powinieneś być ale, z którym możesz się połączyć

mysql -u $user -p -h 127.0.0.1 -P 3307

Jak przekierować wiele portów do różnych serwerów w tym samym czasie? Mój przypadek użycia - mamy kilka produkcyjnych serwerów Wordpress, które są za zaporą ogniową. Załóżmy również, że każdy z nich używa innego klucza SSH, aby umożliwić dostęp.
RodrikTheReader

@RodrikTheReader: po prostu powtórz polecenia z różnymi numerami portów i odpowiednimi zmiennymi hosta $ user @ $. Możesz także dodać inny -i $identity_filedo polecenia ssh, jeśli masz różne klucze.
mivk

2

Jest proste polecenie.

mysql -h {hostip} -P {port} -u {username} -p {database}

Przykład

mysql -h 192.16.16.2 -P 45012 -u rockbook -p rockbookdb

{hostip} nie doda żadnych szczegółów portu, takich jak 192.10.10.26::45124
Manish Goswami
1

to rozwiązanie zadziałało dla mnie:

Na twoim zdalnym komputerze (przykład: 295.13.12.53) ma dostęp do twojego docelowego zdalnego komputera (na którym działa serwer mysql)

ssh -f -L 295.13.12.53:3306:10.18.81.36:3306 user@295.13.12.53

Wyjaśnił:

ssh -f -L your_ssh_mashine_ipaddress:your_ssh_mashine_local_port:target_ipaddress:target_port user@your_ip_address -N

your_ssh_mashine_ipaddress - to nie jest lokalny adres IP, jest to adres IP, na który ssh, w tym przykładzie 295.13.12.53

your_ssh_mashine_local_port - to jest port niestandardowy, a nie 22, w tym przykładzie jest to 3306.

target_ipaddress - adres IP maszyny, z której chcesz zrzucić bazę danych.

target_port - 3306 to jest prawdziwy port dla serwera MySQL.

user @ your_ip_address - to są poświadczenia ssh dla urządzenia ssh, z którym się łączysz

Po wykonaniu tego wszystkiego wróć do swojego komputera i zrób to:

mysqldump -h 295.13.12.53 -P 3306 -u username -p db_name > dumped_db.sql

Poprosi o hasło, poda hasło i jesteś połączony. Mam nadzieję że to pomoże.

violentr
źródło
1

Spróbuj tego, to działa:

mysql -h {nazwa hosta} -u {nazwa użytkownika} -p {hasło} -N -e "{zapytanie do wykonania}"

ravi teja
źródło
1

Ten pracował dla mnie w mysql 8, zamień na hostnameswoją nazwę hosta i port_numbernumer_portu, możesz również zmienić swojego mysql_user, jeśli nie jest rootem

      mysql --host=host_name --port=port_number -u root -p

Więcej informacji tutaj

levis
źródło
0

Powinieneś umieścić swoje hasło za pomocą „p”

mysql -u root -u 1.1.1.1 -p'MyPass'
Karin Lahyani
źródło
0

Otrzymałem ten sam błąd. Ale okazało się to przydatne, tworząc nowego użytkownika mysql na zdalnym serwerze mysql, a następnie łącząc się. Uruchom następujące polecenie na serwerze zdalnym:

CREATE USER 'openvani'@'localhost' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'openvani'@'localhost WITH GRANT 
OPTION;
CREATE USER 'openvani'@'%' IDENTIFIED BY 'some_pass';
GRANT ALL PRIVILEGES ON *.* TO 'openvani'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

Teraz możesz połączyć się ze zdalnym mysql za pomocą następującego polecenia.

mysql -u openvani -h 'any ip address'-p

Oto cały post:

http://openvani.com/blog/connect-remotely-mysql-server/

Davinder Snehi
źródło
0

Jeśli korzystasz z systemu Windows, wypróbuj program Visual Studio Code z wtyczkami MySQL, łatwy i zintegrowany sposób uzyskiwania dostępu do danych MySQL na komputerze z systemem Windows. A tabele bazy danych wymienione i mogą wykonywać dowolne niestandardowe zapytania.

Cosmo Arun
źródło