2013-03-27 12 views
76

Per qualche motivo, non riesco a collegarmi in remoto al mio server MySQL. Ho provato tutto e sto ancora ricevendo errori.Connessioni remote Mysql Ubuntu

[email protected]:/home/administrator# mysql -u monty -p -h www.ganganadores.cl 
Enter password: 
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using   password: YES) 

Ora, ho provato a fare funzionare

`GRANT ALL ON *.* to [email protected] IDENTIFIED BY 'XXXXX'; 
GRANT ALL ON *.* to [email protected]'%' IDENTIFIED BY 'XXXXXX';` 

e ancora niente! Cosa sto facendo male?

MODIFICA: my.cnf ha commentato l'IP di bind.

+0

quale versione di MySQL stai usando? – Steve

+0

Versione server: 5.5.29-0ubuntu0.12.10.1 (Ubuntu) –

+0

cosa restituisce questo comando? ubuntu ~ $ sudo lsof -i -P | grep: 3306 – apesa

risposta

266

Per esporre MySQL a qualcosa di diverso da localhost si dovrà avere la seguente riga

per MySQL versione 5.6 e di seguito

commentate in /etc/mysql/my.cnf e assegnato al proprio indirizzo IP del computer e non loopback

per MySQL versione 5.7 e superiori

commentate in /etc/mysql/mysql.conf.d/mysqld.cnf e assegnato al vostro indirizzo IP dei computer e non loopback

#Replace xxx with your IP Address 
bind-address  = xxx.xxx.xxx.xxx 

Oppure aggiungi un bind-address = 0.0.0.0 se non si desidera specificare l'IP

Quindi arrestare e riavviare MySQL con la nuova voce my.cnf. Una volta eseguito, vai al terminale e inserisci il seguente comando.

lsof -i -P | grep :3306 

Questo dovrebbe tornare qualcosa di simile con il tuo attuale IP del xxx

mysqld 1046 mysql 10u IPv4 5203 0t0 TCP xxx.xxx.xxx.xxx:3306 (LISTEN) 

Se la dichiarazione di cui sopra restituisce correttamente sarà quindi in grado di accettare utenti remoti. Tuttavia, per un utente remoto di connettersi con i privilegi corretti è necessario disporre di tale utente creato sia nel localhost e '%' come in.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass'; 
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass'; 

poi,

GRANT ALL ON *.* TO 'myuser'@'localhost'; 
GRANT ALL ON *.* TO 'myuser'@'%'; 

e, infine,

FLUSH PRIVILEGES; 
EXIT; 

Se non si dispone dello stesso utente creato come sopra, all'accesso locale è possibile ereditare i privilegi di localhost di base e avere problemi di accesso. Se si desidera limitare l'accesso a myuser, è necessario leggere la sintassi dell'istruzione GRANT HERE Se si riesce a risolvere il problema e si riscontrano ancora problemi, pubblicare un output di errore aggiuntivo e le righe appropriate di my.cnf.

NOTA: Se lsof non viene restituito o non viene trovato, è possibile installarlo HERE in base alla propria distribuzione Linux. Non hai bisogno di lsof per far funzionare le cose, ma è estremamente utile quando le cose non funzionano come previsto.

+1

Grazie, anche se ho seguito correttamente questa procedura la prima volta, li ho fatti di nuovo come hai postato e lavorato come un incantesimo! –

+10

Per tutti gli altri che stanno lottando con 'lsof -i -P | grep: 3306', che non ha funzionato, ma la connessione remota funziona ancora bene senza quella conferma, ignorare se non si vede l'output corretto. –

+0

@Mike Slutsky Grazie per la nota, ho modificato la mia risposta. È possibile installare lsof se non è già installato. – apesa

24

Aggiungi pochi punti in cima ottimo post di APESA:

1) È possibile utilizzare il comando seguente per controllare il server indirizzo IP mysql ascolta

netstat -nlt | grep 3306 

sample result: 

tcp 0 0 xxx.xxx.xxx.xxx:3306 0.0.0.0:* LISTEN 

2) Utilizzare FLUSH PRIVILEGES per forzare le tabelle grant a essere caricato se per qualche motivo le modifiche non prendono effetto immediato

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION; 
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION; 
FLUSH PRIVILEGES; 
EXIT; 

3) Se il firewall netfilter è abilitata (sudo ufw enable) su mysql macchina server, effettuare le seguenti operazioni per aprire la porta 3306 per l'accesso remoto:

sudo ufw allow 3306 

stato di verifica utilizzando

sudo ufw status 

4) Una volta stabilita la connessione remota, si può verificare nel client o computer server utilizzando i comandi

netstat -an | grep 3306 
netstat -an | grep -i established 
+2

Questo mi ha salvato tutto il giorno! Grazie per "sudo ufw status' !! –

+0

'netstat -nlt | grep 3306' restituisce vuoto –

2

MySQL ascolta solo localhost, se vogliamo abilitare l'accesso remoto ad esso, quindi abbiamo bisogno di fatto alcuni cambiamenti nel file my.cnf:

sudo nano /etc/mysql/my.cnf 

Abbiamo bisogno di commentare la bind-indirizzo e saltare-esterna-bloccaggio linee:

#bind-address = 127.0.0.1 
# skip-external-locking 

Dopo aver effettuato queste modifiche, abbiamo bisogno di riavviare il servizio mysql:

sudo service mysql restart 
0

Se si prova su Windows, non dimenticare di aprire la porta 3306.

Problemi correlati