Connessioni remote Mysql Ubuntu


95

Per qualche motivo, non sono stato in grado di connettermi in remoto al mio server MySQL. Ho provato di tutto e continuo a ricevere errori.

root@server1:/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 correre

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

e ancora niente! Cosa sto sbagliando?

EDIT : my.cnfha commentato l'ip bind.


quale versione di MySQL stai usando?
Steve

Versione server: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Cristian Eduardo Lehuede Lione

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

Risposte:


345

Per esporre MySQL a qualcosa di diverso da localhost dovrai avere la seguente riga

Per mysql versione 5.6 e precedenti

non commentato /etc/mysql/my.cnfe assegnato al tuo computer indirizzo IP e non loopback

Per mysql versione 5.7 e successive

non commentato /etc/mysql/mysql.conf.d/mysqld.cnfe assegnato al tuo computer indirizzo IP e non loopback

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

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

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

lsof -i -P | grep :3306

Dovrebbe tornare qualcosa del genere con il tuo IP effettivo nel xxx

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

Se l'istruzione sopra viene restituita correttamente, sarai quindi in grado di accettare utenti remoti. Tuttavia, affinché un utente remoto si connetta con i privilegi corretti, è necessario che tale utente venga creato sia nell'host locale che in '%' 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 hai lo stesso utente creato come sopra, quando accedi localmente potresti ereditare i privilegi di localhost di base e avere problemi di accesso. Se si desidera limitare l'accesso a myuser, sarà necessario leggere la sintassi dell'istruzione GRANT QUI .

NOTA: Se lsof non ritorna o non viene trovato, puoi installarlo QUI in base alla tua distribuzione Linux. Non è necessario lsof per far funzionare le cose, ma è estremamente utile quando le cose non funzionano come previsto.


1
Grazie, anche se ho seguito correttamente questi passaggi la prima volta, li ho fatti di nuovo come hai postato e hanno funzionato a meraviglia!
Cristian Eduardo Lehuede Lione

14
Per chiunque altro abbia problemi lsof -i -P | grep :3306, non ha funzionato ma la connessione remota funziona ancora bene senza quella conferma, ignorare se non si vede l'output corretto.
Mike S

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

2
FWIW su molti sistemi sudo lsof -i -Psarà molto più utile di lsof -i -P(supponendo che tu abbia effettuato l'accesso come utente non privilegiato).
Dan Passaro

2
lsof -i -P | grep :3306non restituisce nulla!
Verde

39

Aggiungi alcuni punti in cima all'eccellente post di apesa:

1) È possibile utilizzare il comando seguente per verificare che l'indirizzo IP del server mysql sia in ascolto

netstat -nlt | grep 3306

sample result:

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

2) Utilizzare FLUSH PRIVILEGESper forzare il caricamento delle tabelle di concessione se per qualche motivo le modifiche non hanno 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;

user == l'utente che usi per connetterti a mysql ex.root
passwd == la password che usi per connetterti a mysql con

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

sudo ufw allow 3306

controllare lo stato utilizzando

sudo ufw status

4) Una volta stabilita una connessione remota, è possibile verificarla su una macchina client o server utilizzando i comandi

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

3
Questo mi ha salvato l'intera giornata! Grazie per sudo ufw status!!
Riddhiman Adib

netstat -nlt | grep 3306ritorna vuoto
João Pimentel Ferreira

@ João Pimentel Ferreira assicurati che mysql sia in esecuzione prima, usa il comando "/etc/init.d/mysql status" per verificare
Jonathan L

8

MySQL ascolta solo localhost, se vogliamo abilitare l'accesso remoto ad esso, allora dobbiamo apportare alcune modifiche nel file my.cnf:

sudo nano /etc/mysql/my.cnf

Abbiamo bisogno di commentare le righe di bind-address e skip-external-locking:

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

Dopo aver apportato queste modifiche, è necessario riavviare il servizio mysql:

sudo service mysql restart

1
assicurati di commentareskip-external-locking
calebeaires

1
Non ho commentato il blocco del salto esterno e funziona ancora.
Marcia Ong

Ho dovuto cambiarlo in /etc/mysql/mysql.conf.d
Bartando

il mio è questo luogo:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Lester

1

Se si esegue il test su Windows, non dimenticare di aprire la porta 3306.


Ah sei un genio, questo è SUPER importante se stai usando il sottosistema Windows per Linux, devi aprire la porta 3306 per il traffico in entrata attraverso il firewall di Windows e nessuna delle cose precedenti per controllare se MySQL sta ascoltando funziona con il sottosistema
Brian Leishman

1

Stai usando Ubuntu 12 (piuttosto vecchio)

Innanzitutto, apri il file /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf in Ubuntu 14.04 e versioni precedenti

Sotto [mysqld] individuare la riga, bind-address = 127.0.0.1 e cambiarla in, bind-address = 0.0.0.0 o commentarla

Quindi, riavvia Ubuntu MysQL Server systemctl restart mysql.service

Ora Ubuntu Server consentirà l'accesso remoto al server MySQL, ma è comunque necessario configurare gli utenti MySQL per consentire l'accesso da qualsiasi host.

L'utente deve 'username'@'%'disporre di tutte le concessioni richieste

Per assicurarti che il server MySQL sia in ascolto su tutte le interfacce, esegui il comando netstat come segue.

netstat -tulnp | grep mysql

Spero che funzioni!

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.