Come consentire la connessione remota a mysql


362

Ho installato MySQL Community Edition 5.5 sul mio computer locale e voglio consentire connessioni remote in modo da poter connettermi da una fonte esterna.

Come lo posso fare?


1
possibile duplicato di Abilita connessione remota MySQL
utente

1
Se ti capita di usare DigitalOcean, puoi provare a usarlo sudo mysql_secure_installation. FYI.
Alan Dong,

Non utilizzare la formattazione del codice per il testo che non è codice. Fuori tema.
Marchese di Lorne,

@EJP perché? domanda sincera per curiosità
René Roth,

Risposte:


776

Ciò è consentito per impostazione predefinita su MySQL.

Ciò che è disabilitato di default è l' rootaccesso remoto . Se si desidera abilitarlo, eseguire questo comando SQL localmente:

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

Quindi trova la seguente riga e commentala nel tuo my.cnffile, che di solito vive /etc/mysql/my.cnfsu sistemi Unix / OSX. In alcuni casi il percorso per il file è /etc/mysql/mysql.conf.d/mysqld.cnf).

Se si tratta di un sistema Windows, puoi trovarlo nella directory di installazione di MySQL, in genere qualcosa di simile C:\Program Files\MySQL\MySQL Server 5.5\ e il nome del file sarà my.ini.

Cambia linea

 bind-address = 127.0.0.1

per

 #bind-address = 127.0.0.1

E riavvia il server MySQL ( Unix / OSX e Windows ) per rendere effettive le modifiche.


4
Ok, quindi ho aggiunto l'indirizzo binnd = 127.0.0.1 alla fine del file e ho provato a connettermi usando navicat da host esterno e ho ricevuto l'errore 10060
Leo

7
Hmm, non è necessario aggiungerlo. Come diceva la mia risposta, devi commentarla, non aggiungerla. Ce n'è uno lì per impostazione predefinita, quindi dovresti trovarlo e commentarlo aggiungendo il prefisso con #
mjuarez

7
Hmm, in \ MYsql Server 5.5 \ c'è solo 1 file ini chiamato my-default.ini e l'unica riga senza # è questa: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Leo

2
questa risposta funziona perfettamente. thnx @mjuarez - CONCESSIONE DI TUTTI I PRIVILEGI SU . A 'root' @ '%' IDENTIFICATO DA 'password' CON OPZIONE CONCESSIONE;
yadavr,

66
Per coloro che cercano il my.cnffile e non trovano una bind-addressdirettiva in esso, si noti che nel mio caso (versione MySQL 14.14 su Ubuntu 16.04.2) la posizione del file era/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon,

49

Dopo aver fatto tutto quanto sopra, non riesco ancora ad accedere come da rootremoto, ma Telnetting alla porta lo ha 3306confermatoMySQL stava accettando le connessioni.

Ho iniziato a guardare gli utenti in MySQL e ho notato che c'erano più utenti root con password diverse.

select user, host, password from mysql.user;

Quindi in MySQLho impostato nuovamente tutte le password per root e ho potuto finalmente accedere in remoto come root.

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

4
Questo è corretto. Mentre si seguono i passaggi in altre risposte, sembra che vengano creati account utente con password vuota. Quindi è necessario aggiungere password per loro.
chhantyal,

1
Avevo bisogno di combinare la risposta accettata con questa e poi tutto ha funzionato correttamente.
James,

8
SQL per 5.7 e versioni successiveupdate user set authentication_string=password('YOUR_PASSWORD') where user='root';
DalSoft

La risposta accettata imposta la password e ha funzionato per me.
MikeKulls,

1
Grazie, proprio come @James, ho dovuto combinare questo con la risposta accettata per risolvere.
Ben Everard,

39

Solo una nota della mia esperienza, puoi trovare il file di configurazione in questo percorso /etc/mysql/mysql.conf.d/mysqld.cnf .

(Ho lottato per qualche tempo per trovare questo percorso)


1
Questo dipende fortemente dalla distribuzione che stai utilizzando. Il modo migliore è semplicemente cercarlo:sudo find /etc -iname 'mysql*.cnf'
Martin Konecny ​​il

Apprezzo il comando 'trova'. Sono nuovo alla riga di comando, quindi è molto utile. Grazie!
Heres2u,

Ho lottato per ore modificando il file /etc/mysq/conf.d/mysql.cnf fino a quando non ho trovato questa risposta.
Gayan Kavirathne,

26

Nel mio caso stavo cercando di connettermi a un server mysql remoto su cent OS. Dopo aver esaminato molte soluzioni (concessione di tutti i privilegi, rimozione dei collegamenti IP, abilitazione della rete) il problema non veniva ancora risolto.

A quanto pare, mentre cercavo varie soluzioni, mi sono imbattuto in iptables, il che mi ha fatto capire che la porta mysql 3306 non stava accettando le connessioni.

Ecco una piccola nota su come ho verificato e risolto questo problema.

  • Verifica se la porta accetta connessioni:
telnet (mysql server ip) [portNo]
  • Aggiunta della regola della tabella ip per consentire le connessioni sulla porta:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCETTA
  • Non lo consiglierei per l'ambiente di produzione, ma se i tuoi iptables non sono configurati correttamente, l'aggiunta delle regole potrebbe non risolvere il problema. In tal caso, è necessario:
il servizio iptables si ferma

Spero che sia di aiuto.


17

Seguire i passaggi indicati di seguito per impostare l'accesso remoto con caratteri jolly per l'utente MySQL.

(1) Apri cmd.

(2) vai al percorso C: \ Programmi \ MySQL \ MySQL Server 5.X \ bin ed esegui questo comando.

mysql -u root -p

(3) Immettere la password di root.

(4) Eseguire il comando seguente per fornire l'autorizzazione.

CONCESSIONE DI TUTTI I PRIVILEGI SU *. * A "NOME UTENTE" @ "IP" IDENTIFICATO DA "PASSWORD";

NOME UTENTE: nome utente che si desidera connettere al server MySQL.

IP: indirizzo IP pubblico da cui si desidera consentire l'accesso al server MySQL.

PASSWORD: password del nome utente utilizzato.

L'IP può essere sostituito con% per consentire all'utente di connettersi da qualsiasi indirizzo IP.

(5) Svuota i pregiudizi seguendo il comando ed esci.

FLUSH PRIVILEGES;

Uscita; o \ q

inserisci qui la descrizione dell'immagine


3
Dopo averlo fatto, alla mia radice è ancora negato l'accesso. Cosa mi sono perso?
teapeng,

Puoi provare con l'indirizzo IP del tuo sistema locale anziché% nel 4 ° passaggio. Dovrebbe funzionare. % indica qualsiasi indirizzo IP.
Hiren Parghi,

6

Se il processo del server MySQL è in ascolto solo su 127.0.0.1 o :: 1, non sarà possibile connettersi in remoto. Se hai bind-addressun'impostazione/etc/my.cnf questo potrebbe essere la fonte del problema.

Dovrai anche aggiungere privilegi anche per un non localhostutente.


Strano, come potrebbe il tuo server "ascoltare" su un altro IP oltre 127.0.0.1?
Pacerier,

2
@Pacerier 127.0.0.1 è associato solo all'interfaccia di loopback. Le connessioni esterne non funzioneranno. Un sistema avrà spesso più interfacce di rete, ognuna delle quali deve essere associata in modo specifico, oppure è possibile utilizzare l'indirizzo bind-all 0.0.0.0.
Tadman,

6

Se hai installato MySQL da brewesso, in realtà è in ascolto solo sull'interfaccia locale per impostazione predefinita. Per risolvere il problema, è necessario modificare /usr/local/etc/my.cnfe cambiare bind-addressda127.0.0.1 a* .

Quindi corri brew services restart mysql.


1
Per il mio server Ubuntu 16.04.4, l'impostazione dell'indirizzo bind è in /etc/mysql/mysql.conf.d/mysqld.cnf
Frank

Non si tratta solo di utilizzare brew, qualsiasi MySQL avrà questa impostazione predefinita, per consentire solo connessioni locali.
nivs1978,

6

Tutto il processo per l'accesso remoto. L'accesso remoto è disattivato per impostazione predefinita. È necessario aprirlo manualmente per tutti gli IP .. per consentire l'accesso a tutti gli IP

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

Ip specifico

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

poi

flush privileges;

Puoi controllare l'host utente e la password

SELECT host,user,authentication_string FROM mysql.user;

Ora il tuo dovere è cambiare questo

bind-address = 127.0.0.1

Puoi trovarlo su

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

se non lo trovi lì, prova questo

sudo nano /etc/mysql/my.cnf

commenta in questo

#bind-address = 127.0.0.1

Quindi riavviare Mysql

sudo service mysql restart

Ora goditi l'accesso remoto


3

Cordiali saluti Mi sono tolto i capelli con questo problema per ore .. finalmente ho chiamato il mio provider di hosting e ho scoperto che nel mio caso usando un server cloud che nel pannello di controllo per 1 e 1 hanno un firewall secondario che devi clonare e aggiungere porta 3306. Una volta aggiunto sono entrato subito ..


Sembra molto specifico per la tua situazione. Non sono una fonte infinita di conoscenze sulla rete, ma sei sicuro che questa soluzione si applichi bene a questo problema?
Sandy Gifford,

2
Ho avuto anche questo problema. Comune con i server ospitati su cloud,
Matthew Lock,

2

Per chi ne ha bisogno, controlla che anche la porta del firewall 3306 sia aperta, se il servizio firewall è in esecuzione.



1

E per le persone di OS X là fuori bisogna essere consapevoli del fatto che il parametro bind-address è in genere impostato nella finestra di avvio e non nel file my.ini. Quindi nel mio caso, ho rimosso <string>--bind-address=127.0.0.1</string>da /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.


Posizione alternativa per il file del plist:~/Library/LaunchAgents
Dylan Nissley,

1

Se mysqldun indirizzo di bind è impostato su un indirizzo loopback / locale (ad es127.0.0.1 ), Il server non sarà raggiungibile dagli host remoti, poiché non è possibile raggiungere un'interfaccia di loopback da nessun host remoto.

Impostare questa opzione su 0.0.0.0(:: per IPv4 + 6) per accettare connessioni da qualsiasi host o verso un altro indirizzo raggiungibile esternamente se si desidera consentire connessioni solo su un'interfaccia.

fonte


1

L'abilitazione dell'accesso root remoto può essere pericolosa. Sarebbe preferibile impostare account utente con autorizzazioni più restrittive. I seguenti tre passaggi dovrebbero farlo.

  1. Assicurati che la riga che inizia con bind-address ...sia almeno commentata nel tuo file my.ini o my.cnf. Se non esiste, vai avanti. Puoi trovare questo file C:\ProgramData\MySQL\MySQL Server 8.0su Windows.

  2. Successivamente, controlla che l'account utente con cui stai stabilendo la connessione non sia presente localhostnel campo Corrispondenza agli host. Sebbene non sia raccomandato, puoi invece inserirlo %in quel campo a scopo di test. Puoi farlo aprendo una connessione locale al server con MySQL Workbench, quindi andando su Server> Utenti e privilegi dalla barra dei menu e trovando l'account utente con cui vuoi connetterti.

Il campo "Limita la corrispondenza degli host" è ciò che ti impedisce di connetterti non localmente. Cioè limita le connessioni accettate a un modello di indirizzi IP. Idealmente, dovresti accedere al server MySQL da un indirizzo IP statico o da una sottorete, in modo da poter essere il più restrittivo possibile.

  1. Ovviamente, il firewall dovrebbe consentire all'applicazione MySQL Server di comunicare sulla porta desiderata. L'apparecchiatura di rete fisica tra l'utente e il server dovrebbe consentire la comunicazione sulla porta con cui si desidera connettersi. (porta 3306 in genere)

port (3306) l'inoltro nel router mi ha aiutato a ringraziarti.
Programmatore curdo

0

alcune volte è necessario utilizzare il nome del PC su Windows

primo passo) inserisci il file di configurazione di mysql:

mysqld.cnf SET bind-address = 0.0.0.0

(per consentire di ricomporre le connessioni su tcp / ip)

secondo passo) rendere l'utente in mysql, utenti della tabella, con il nome del pc su Windows propierties, NON ip

inserisci qui la descrizione dell'immagine

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.