Connessione persa al server MySQL durante la 'lettura del pacchetto di comunicazione iniziale', errore di sistema: 0


127

Ricevo un errore:

"Connessione persa al server MySQL durante la lettura del pacchetto di comunicazione iniziale, errore di sistema: 0"

mentre ho intenzione di collegare il mio db.

Se sto usando localhost tutto funziona bene. Ma quando sto usando il mio indirizzo IP live come di seguito, viene visualizzato l'errore:

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());

Risposte:


104

Qualcuno qui suggerisce che potrebbe essere un problema con il firewall:

Ho appena avuto questo problema e ho scoperto che era il mio firewall. Uso PCTools Firewall Plus e non consentivo l'accesso completo a MySQL. Una volta ho cambiato che andava bene. Spero che aiuti.

Potrebbe essere?

Inoltre, qualcuno qui suggerisce che potrebbe essere perché il server MySQL è legato all'IP di loop-back (127.0.0.1 / localhost) che ti impedisce effettivamente di collegarti dall'esterno.

In tal caso, è necessario caricare lo script sul server Web (che probabilmente esegue anche il server MySQL) e mantenere l'host del server come "localhost"


7
cosa intendi localhost? Inoltre sto affrontando lo stesso problema e utilizzo solo localhost. L'applicazione si trova sullo stesso computer del database. Cosa intendevi localhost?
oneofakind

6
@oneofakind Intende connettersi a 'localhost "invece di' 127.0.0.1 '
Alex Holsgrove,

2
Ho avuto lo stesso problema su OSX con mamp pro. L'ho risolto disabilitando / riattivando la casella di controllo "consenti accesso alla rete a mysql" nella scheda mamp pro mysql.
Ousmane,

43

Apri il file di configurazione mysql chiamato my.cnf e prova a trovare "bind-address", qui sostituisci l'impostazione (127.0.0.1 OR localhost) con il tuo IP del server live (l'ip che stai usando nella funzione mysql_connect)

Questo risolverà definitivamente il problema.

Grazie


2
Assicurati di usare bind-address = 127.0.0.1 o localhost quando usi ssh tunnel. Ha avuto questo problema con Bitnami, dove l'indirizzo di bind era IP macchina.
z2z,

1
Lo stesso problema e soluzione per il server dedicato standalone Debian 10 + MySQL.
Vilq,

Va detto che potrebbe essere generalmente preferibile associare il servizio mysql a 127.0.0.1dove applicabile, quindi l'accesso diretto da altri host non è possibile. Questo impedisce attacchi di forza bruta remota e non espone possibili problemi di sicurezza alla rete. Se l'applicazione si trova sullo stesso computer (che è una configurazione di hosting molto comune), utilizzare 127.0.0.1resp. localhostcome host mysql e funzionerà allo stesso modo dell'associazione del servizio all'interfaccia esterna e dell'utilizzo come host mysql. Se l'applicazione si trova altrove, se possibile, utilizzare una rete interna.
David,

36

1) Consenti connessione remota a MySQL. Modifica file:

>sudo nano /etc/mysql/my.cnf

Riga di commento:

#bind-address       = 127.0.0.1

Riavvia MySQL:

>sudo service mysql restart

2) Crea utente per connessione remota.

>mysql -uroot -p

CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';

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

3) Nel mio caso ho bisogno di connettermi in remoto da Windows alla macchina VirtualBox con Ubuntu. Quindi devo consentire la porta 3306 in iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

1
Per me dimentico di verificare l'indirizzo di bind su my.cnf. Grazie.
abkrim,

1
Questo ha aiutato totalmente. Grazie!
osehgol,

1
Funzionava perfettamente, ma stavo usando il banco di lavoro su Windows, quindi non ho fatto il passaggio 3. Ma ha funzionato. Grazie!
RohitAneja

Sebbene l'ultimo comando non abbia funzionato per me, la creazione di un nuovo utente a modo tuo ha risolto il mio problema. Posso accedere a mysql su raspberry pi dal mio laptop. Grazie!
Eyyüp Alkış,

ricordati di FLUSH PRIVILEGESdopo aver creato un nuovo utente.
Tasso Hong Tat,

15

Si è verificato questo problema durante l'impostazione di un nuovo server slave. Trovato che l'indirizzo IP del server slave mancava dal /etc/hosts.allowfile del server principale . Aggiunto l'indirizzo IP e mi ha permesso di connettermi al server principale.

Si noti che io uso hosts.allowe hosts.denyper controllare l'accesso.


il mio problema con il connettore / c ++. Ora, se solo potessi trovare ciò esigenze impostazione per essere in allowquando denyha ALL: ALL...

questo mi ha davvero salvato la vita, avevo problemi di connessione a mysql da workbench, dovevo aggiungere "ALL: 127.0.0.1" al file /etc/hosts.allow e ha iniziato a funzionare
Tomáš Tibenský

Nel mio caso, / etc / hosts aveva una voce (vecchia) errata per l'IP host. Quando è stato rilasciato un nuovo IP, è passato sotto quello precedente e apparentemente è stato ignorato. L'eliminazione del vecchio IP ha corretto l'errore.
David Ramirez,

7

Ho avuto questo problema e alla fine è stato l'amministratore di sistema precedente a cambiare la porta su cui era in esecuzione MySQL. MySQL Workbench stava cercando di connettersi al 3306 predefinito ma il server era in esecuzione su 20300.


1
Buona cosa per questa risposta. A quanto pare, l'ho fatto da solo.
cautionbug

5

Il problema sul mio caso era che MySQL si legava solo a Lo su Linux. per risolvere il problema ho modificato my.cnf (disponibile in /etc/mysql/my.cnf) rimuovendo la riga bind-address = 127.0.0.1

questo consente a mysql di collegarsi a qualsiasi interfaccia di rete


5

Questo errore si è verificato durante il tentativo di connessione a Google Cloud SQL tramite MySQL Workbench 6.3.

Dopo una piccola ricerca, ho scoperto che il mio indirizzo IP è stato modificato dal provider di Internet e non è stato autorizzato nel Cloud SQL.

L'ho autorizzato e sono tornato al lavoro.


4

Mi sono imbattuto nello stesso identico errore durante la connessione dal workbench di MySQL. Ecco come l'ho risolto. Il mio file di configurazione /etc/my.cnf aveva il valore dell'indirizzo di bind impostato sull'indirizzo IP del server. Questo doveva essere fatto per impostare la replica. Comunque, l'ho risolto facendo due cose:

  1. creare un utente che può essere utilizzato per connettersi dall'indirizzo bind nel file my.cnf

per esempio

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. modificare il valore del nome host MySQL nei dettagli della connessione nel workbench MySQL in modo che corrisponda all'indirizzo bind

Grazie mille, abbiamo avuto anche la replica di MySQL e l'indirizzo di bind era locale: 10.0.0.x. Ho lottato per giorni per questa soluzione.
iFadi

3

Il problema per me era che le query DNS venivano bloccate dall'FW all'interno della sottorete. La soluzione era disabilitare le ricerche DNS all'interno di MySQL.


Sospetto che anche nel mio caso sia colpa del DNS.
Zenexer,

3

Ho appena installato mysql su una finestra di Windows. Ho riscontrato l'errore OP nel tentativo di connettermi con il client MySQL Navicat sulla stessa scatola. Ho dovuto specificare 127.0.0.1 come host e ho capito.

localhost o l'indirizzo IP effettivo del server non funzionavano entrambi.


3

L'errore indica che non ha ricevuto una risposta dalla porta su cui si aspettava di trovare il server. Le cause vanno dal contattare la macchina sbagliata (per una serie di ragioni) al server che non si trova sulla porta prevista.

Controlla a quale porta è associato il tuo server in /etc/mysql/my.cnf. Ciò corrisponde a ciò che è presente nell'istruzione connect. Se corrispondono, prova a connetterti con mysql dal server stesso e dalla riga di comando della macchina su cui stai eseguendo il client. Se funziona da un posto e non da un altro, potresti avere un problema di configurazione del firewall / router.


Non penso sia corretto, se non c'è niente in ascolto su quella porta, otterrai la risposta ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), non il Lost connection to MySQL servermessaggio.
Ken Williams,

2

nel mio caso, avevo ALL: ALL in hosts.deny. Cambiando questo in ALL: PARANOID ha risolto il mio problema durante la connessione tramite ssh


2

Il problema è stato abbastanza stupido per me.

Avevo lo stesso problema con la macchina Ubuntu AWS EC2 (per il momento MariaDB è installato localmente), quindi ho provato a realizzare il tunneling SSH e ho avuto lo stesso problema. Quindi ho provato a ssh tunnel sul terminale:

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

E mi ha detto questo:

Effettua il login come utente "ubuntu" anziché come utente "root".

Ho cambiato l'utente ssh da root a ubuntu, proprio come la mia configurazione ssh, e si è collegato perfettamente.

Quindi controlla il tuo utente di connessione SSH.

Ho supervisionato questo, quindi anche questa mezz'ora del mio tempo, quindi spero che questo ti sarà utile.


2

Per me il file di configurazione è stato trovato "/etc/mysql/mysql.conf.d/mysqld.cnf" commentando l'indirizzo di bind ha funzionato.

Come possiamo vedere qui: invece di saltare la rete, il valore predefinito ora è ascoltare solo su localhost che è più compatibile e non meno sicuro.


Per la mia più grande sorpresa, questo ha funzionato sotto Debian 10. Ho dato una possibilità per esso e FUNZIONA! Modificato mysql config sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfe invece di bind-address = 111.112.113.114me usato bind-address = 127.0.0.1. Le impostazioni del tunnel SSH sono impostate come descritto su hostpresto.com/community/tutorials/… Ottimo lavoro! Grazie!
Klor,

1

Ho affrontato questo stesso problema, legare l'indirizzo avanti e indietro senza risultati. La soluzione per me era scaricare i privilegi .

mysql> FLUSH PRIVILEGES;

1

Per me l'impostazione bind-address = 0.0.0.0in mysql/my.cnffunzionato. Praticamente ascolta tutti gli indirizzi (ma comunque una porta).

E non dimenticare di riavviare il server: systemctl restart mysql


6
Tutti gli indirizzi / interfacce, ma solo una singola porta.
Zenexer,

1

Ho avuto lo stesso problema, ma nel mio caso l'ho risolto

servizio mysqld start


1

Un motivo in più ...

Mi sono imbattuto in un server Ubuntu in cui tutto era personalizzato e non poteva connettersi a causa dello stesso errore.

Questa impostazione era dentro /etc/ssh/sshd_config

PermitTunnel no

Dopo essersi trasformato in

PermitTunnel yes

Sono stato in grado di connettermi in remoto al mio database MySQL


1

Sto cercando di collegare il mio contenitore docker db su Ubuntu 18.04, stesso problema.

Prima controlla il tuo dispositivo eseguendo nmcli devper verificare se il dispositivo docker0è collegato.

Se non è connesso, provare a riavviare il servizio docker:

sudo service docker restart


1

Nel mio caso era la porta 3306 di blocco wifi dell'università. Sono stato in grado di connettermi utilizzando un hotspot mobile.

Passa a un hotspot mobile o a un'altra rete e, se funziona lì, allora sai che la rete originale sta bloccando la porta 3306. Se ricevi lo stesso errore su più di una rete, sai che è specifico per il tuo computer.


1

Firewalldblocca l'indirizzo IP. quindi per dare accesso, usa questi comandi:

firewall-cmd --permanent --zone = trusted --add-source = YOUR_IP / 32

firewall-cmd --permanent --zone = trusted --add-port = 3306 / tcp

firewall-cmd - ricaricare


0

Durante la connessione a Mysql da remoto, ho ricevuto l'errore. Ho ricevuto questo avviso in /var/log/mysqld.log:

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

Ho appena aggiunto questa riga al /etc/hostsfile:

X.X.X.X some_name

Problema risolto! Il mancato utilizzo ha skip-name-resolvecausato alcuni errori nella mia app locale durante la connessione a MySQL.


0

Ho avuto lo stesso problema. Per risolvere il problema, ho appena cambiato l'host da localhost: 3306 a solo localhost. Quindi l'errore può essere avvertito quando si setta la porta non proprietaria per la connessione. È meglio lasciarlo predefinito.


1
Ciò è probabilmente dovuto al fatto che mysql non accetta la porta come parte del nome host, ma è necessario utilizzare l'argomento-P 3306
Clay H,

0

Anche il permesso di lettura / scrittura della directory del database è stato riscontrato. Assicurati solo che la tua applicazione sia in grado di rw file nella posizione del db. Prova chmod 777 per i test.


0

Ho affrontato lo stesso problema. Ho controllato e provato a impostare AllowTcpForwarding Sì ma mancava nel mio sshd_config, quindi nessun aiuto. Non ho cambiato sshd_config o my.cnf. Assicurarsi che il nome host ssh NON sia lo stesso con il nome host mysql (usa localhost).

In workbench, scegli + per aggiungere una nuova connessione e impostare quanto segue:

  • metodo di connessione: TCP / IP standard su SSH
  • Nome host SSH: 192.168.0.50:22 (sostituisce IP e porta del server SSH remoto (opzionale))
  • Nome utente SSH: sshuser
  • È possibile impostare la password o aggiungere al prompt
  • Nome host MYSQL: localhost o 127.0.0.1
  • Porta del server MYSQL: 3306
  • È possibile impostare la password o aggiungere al prompt

Test di connessione. Dovrebbe avere successo, quindi premi OK.Viola!


0

Se bind-address non è presente nel file di configurazione e mysql è ospitato sull'istanza AWS, controllare il proprio gruppo di sicurezza. In condizioni ideali, le regole in entrata dovrebbero accettare tutte le connessioni dalla porta 3306 e la regola in uscita dovrebbe rispondere a tutti gli IP validi.


0

Ho seguito 3 passaggi e poi ho lavorato per me.

  1. bind-address = "YOUR MACHINE IP"nel my.cnffile su /etc/my.cnf

  2. Riavvia il servizio con il comando: service httpd restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YPUR_PASSWORD' WITH GRANT OPTION;


0

Ho avuto un errore simile (connettendomi a MYSQL su aws tramite MYSql Workbench). Prima mi collegavo bene e all'improvviso ha smesso di funzionare e non funzionava più). La mia connessione era tramite SSH protetta da file di chiavi.

Ho scoperto che stavo scadendo. Quindi ho aumentato il timeout della connessione SQL a 30 secondi (da 10 predefiniti) ed è stato bello andare di nuovo. cose da provare (se hai una configurazione simile)

  1. Puoi ssh direttamente dal terminale al server (rileva problemi con i permessi dei file chiave ecc.)?
  2. È quindi possibile connettersi a MySQL tramite lo stesso utente / pwd tramite terminale usando qualcosa di simile mysql -u [username] -p [database] ? Questo verificherà la presenza di problemi relativi ai diritti dell'utente, ecc
  3. se entrambi funzionano allora i tuoi parametri non sono il problema e forse lo stesso problema di timeout come me (tranne che non ha mai detto errore di timeout, ma piuttosto ha chiesto di verificare le autorizzazioni, ecc.)

0

Lo spazio su disco limitato può causare questo errore.

Controlla lo spazio su disco

$ df -h

Prova ad aumentare lo spazio se ci sono dischi usati al 100%.

Nel mio caso: ho una scatola Vagrant (8.0.1) (Ubuntu 16.04) La mia capacità del disco mysql era di 10 GB, l'ho aumentata a 20 GB

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

Quindi riavviare mysql

$ sudo service mysql restart

0

Se stai affrontando questo errore durante la connessione da remoto, vai all'opzione mysql remota in cpanel e quindi aggiungi% in Host (% jolly% consentito).

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.