MySQL rifiuta di accettare connessioni remote


13

Ho appena installato un nuovo server Ubuntu con mysql (percona 5.5), ma rifiuta di accettare connessioni da host remoti

Ecco cosa succede se provo a connettermi a questo server in remoto:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Quando ho verificato se mysql ascolta le connessioni remote ho visto questo:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Come puoi vedere dice 127.0.0.1:3306che significa "Accetto solo connessioni locali".

Ho controllato il mio skip_networkinge le bind-addressvariabili - tutto è spento:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

Ho un altro server con la stessa configurazione e funziona benissimo:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Quale può essere la ragione di ciò? Come faccio a far rispondere mysql alle connessioni remote?


Si noti che la variabile bind_addressè disponibile solo dalla versione 5.6 ( bugs.mysql.com/bug.php?id=44355 ), quindi restituirà un set vuoto nella v5.5 anche se è impostato.
falso

Mostraci le tue impostazioni my.cnf.
user9517

Hai verificato eventuali problemi al di fuori di mySQL, come un firewall o un problema di routing?
Stese,

Risposte:


20

Prova ad aggiungere bind-address = 0.0.0.0alla tua [mysqld]sezione del tuo my.cnfe riavvia mysqld .


2
Il file è su/etc/mysql/mysql.conf.d/mysqld.cnf
Eduardo Cuomo il

Il mio era in /etc/my.cnf.d/bind-addr.cnf
joseph

0

Potrebbe essere dovuto alla tabella utente del database mysql (usare mysql; show tables;). Se l'associazione a 0.0.0.0 non funziona per te, prova a fornire al tuo utente l'host '%' al posto di 'localhost' in quella tabella.

Ad esempio, prova a creare un utente come:

CREA UTENTE yourusername @ '%' IDENTIFICATO DA 'yourpassword'

la formica prova a connettersi con quell'utente.


3
La connessione rifiutata generalmente significa che nulla è in ascolto sull'IP pertinente: porta.
user9517

È vero, sono stato trasmesso da "Impossibile connettersi al server MySQL", non ricordo sul telnet. Scusate.
periket2000,

"Impossibile connettersi a MySQL" non proviene da un privilegio non disponibile per un utente. È una coppia {IP: port} che non corrisponde a un tentativo di connessione.
Fabien Haddadi,

0

Quando tutto il resto fallisce e sei sicuro che il server sia in ascolto sulla porta predefinita e stai provando a connetterti disperatamente con il client mysql da un altro host, prova a specificare la porta sull'URL del comando mysql.

Per quanto strano, ho dovuto usare la sintassi seguente:

mysql -h someHost --port=3306 -u someUser -p someDb

Ho trovato questo (bug?) Totalmente per caso (dopo aver perso i capelli :)).

La mia configurazione: debian jessie, mysql fresco 5.7.18, utenti / db creati, bind-address commentato, mysqld riavviato


Una spiegazione razionale è che il server someHost MySQL stia effettivamente ascoltando il 3306, come dimostrato dalla direttiva --port. Ma il file binario del client mysql proviene dalla versione MariaDB ... pertanto utilizza la porta 3307 come impostazione predefinita, se non diversamente specificato. Controlla l'origine del file binario del client mysql che stai utilizzando. Suggerimento: controlla anche la tua variabile d'ambiente PATH ...
Fabien Haddadi

0

Ho appena avuto questo problema e il mio problema sembrava essere legato al firewall. A proposito, grazie @Temnovit per i comandi di risoluzione dei problemi di Mysql.

Ho usato netstat per dire che il server era in esecuzione e sulla porta corretta. Potrei anche dire che il mio server non accettava connessioni su quella porta con un semplice comando telnet.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

A seguito di un'altra utile risposta sui comandi del firewall Fedora ho potuto aprire le porte corrette.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Il mio comando telnet ha avuto esito positivo.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

Se i problemi persistono, è probabile che si tratti di un permesso utente.


0

Ho mariadbinstallato. L'anima era di modificare il bind-addresssituato a/etc/mysql/mariadb.conf.d/50-server.cnf


-1

La soluzione descritta nel seguente link dovrebbe risolvere il tuo problema http://www.debianhelp.co.uk/remotemysql.htm


2
bml13, citare un link a supporto della tua risposta è una pratica eccellente, ma preferiamo di gran lunga le persone a scrivere la risposta qui e aggiungere un link, non solo mettere il link e lasciarlo a quello.
MadHatter,

1
... soprattutto perché ora è un collegamento non funzionante.
haz
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.