Se perdió la conexión con el servidor MySQL al "leer el paquete de comunicación inicial", error del sistema: 0

128

Recibo un error:

"Se perdió la conexión con el servidor MySQL al" leer el paquete de comunicación inicial, error del sistema: 0 "

mientras voy a conectar mi db.

Si estoy usando localhost, todo funciona bien. Pero cuando estoy usando mi dirección IP en vivo como se muestra a continuación, aparece un error:

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

Respuestas:

104

Alguien aquí sugiere que podría ser un problema de firewall:

Acabo de tener este problema y descubrí que era mi firewall. Utilizo PCTools Firewall Plus y no permitía el acceso completo a MySQL. Una vez que cambié eso estuvo bien. Espero que ayude.

¿Podría ser eso?

Además, alguien aquí sugiere que podría deberse a que el servidor MySQL está vinculado a la IP de bucle invertido (127.0.0.1 / localhost) que efectivamente impide que se conecte desde "afuera".

Si este es el caso, debe cargar el script en el servidor web (que probablemente también esté ejecutando el servidor MySQL) y mantener el host del servidor como 'localhost'

Thomas Daugaard
fuente
77
a que te refieres localhost? También estoy enfrentando el mismo problema y solo uso localhost. La aplicación está en la misma máquina que la base de datos. ¿Qué quisiste decir localhost?
oneofakind
66
@oneofakind Él quiere conectarse a 'localhost "en lugar de' 127.0.0.1 '
Alex Holsgrove
2
Tuve el mismo problema en OSX con mamp pro. Lo arreglé deshabilitando / volviendo a habilitar la casilla de verificación "permitir acceso de red a mysql" en la pestaña mamp pro mysql.
Ousmane
43

Abra el archivo de configuración de mysql llamado my.cnf e intente encontrar "bind-address", aquí reemplace la configuración (127.0.0.1 OR localhost) con la IP de su servidor en vivo (la ip que está usando en la función mysql_connect)

Esto resolverá el problema definitivamente.

Gracias

intekhab rizvi
fuente
2
Asegúrese de usar bind-address = 127.0.0.1 o localhost cuando use el túnel ssh. Tenía este problema con bitnami, donde bind-address era la máquina ip.
z2z
1
El mismo problema y solución para el servidor dedicado independiente Debian 10 + MySQL.
Vilq
Cabe mencionar que en general puede ser preferible vincular el servicio mysql a 127.0.0.1donde corresponda, por lo que no es posible el acceso directo desde otros hosts. Esto evita ataques remotos de fuerza bruta y no expone posibles problemas de seguridad a la red. Si su aplicación se encuentra en la misma máquina (que es una configuración de alojamiento muy común), use 127.0.0.1resp. localhostcomo host mysql y funcionará de la misma manera que unir el servicio a su interfaz externa y usarlo como host mysql. Si su aplicación se encuentra en otro lugar, use una red interna si es posible.
David
36

1) Permitir conexión remota a MySQL. Editar archivo:

>sudo nano /etc/mysql/my.cnf

Línea de comentario:

#bind-address       = 127.0.0.1

Reiniciar MySQL:

>sudo service mysql restart

2) Crear usuario para conexión 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) En mi caso, necesito conectarme de forma remota desde Windows a la máquina VirtualBox con Ubuntu. Entonces necesito permitir el puerto 3306 en iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT
sNICkerssss
fuente
1
Para mí, olvidé verificar la dirección de enlace en my.cnf. Gracias.
abkrim
1
Esto ayudó totalmente. ¡Gracias!
osehgol
1
Funcionó perfectamente, pero estaba usando workbench en Windows, así que no hice el paso 3. pero funcionó. ¡Gracias!
RohitAneja
Aunque el último comando no funcionó para mí, crear un nuevo usuario a tu manera resolvió mi problema. Puedo acceder a MySQL en Raspberry Pi desde mi computadora portátil. ¡Gracias!
Eyyüp Alkış
recuerde FLUSH PRIVILEGESdespués de crear un nuevo usuario.
Yew Hong Tat
15

Tuve este problema al configurar un nuevo servidor esclavo. Descubrí que faltaba la dirección IP del servidor esclavo del servidor maestro/etc/hosts.allow archivo del . Se agregó la dirección IP y me permitió conectarme al servidor maestro.

Tenga en cuenta que uso hosts.allowy hosts.denypara controlar el acceso.

marca
fuente
mi problema con el conector / c ++. ahora, si solo pudiera encontrar en qué configuración debe estar allowcuando denyha ALL: ALL...
esto realmente me salvó la vida, estaba teniendo problemas para conectarme a mysql desde workbench, necesitaba agregar "ALL: 127.0.0.1" al archivo /etc/hosts.allow y comenzó a funcionar
Tomáš Tibenský
En mi caso, / etc / hosts tenía una entrada incorrecta (antigua) para la IP del host. Cuando se emitió una nueva IP, quedó debajo de la anterior y aparentemente se ignoró. Eliminar la IP anterior curó el error.
David Ramirez
7

Tuve este problema y terminó siendo el administrador del sistema anterior que cambió el puerto en el que se ejecutaba MySQL. MySQL Workbench intentaba conectarse al 3306 predeterminado pero el servidor se ejecutaba en 20300.

usuario3347295
fuente
1
Buena cosa por esta respuesta. Resulta que me hice esto a mí mismo.
precaución error
5

El problema en mi caso fue que MySQL se unía solo a lo en linux. Para resolver el problema, edité my.cnf (que se encuentra en /etc/mysql/my.cnf) eliminando la línea bind-address = 127.0.0.1

esto permite que mysql se una a cualquier interfaz de red

Renato Mendes
fuente
5

Este error se me ocurrió al intentar conectarme a Google Cloud SQL usando MySQL Workbench 6.3.

Después de un poco de investigación, descubrí que el proveedor de Internet ha cambiado mi dirección IP y que no estaba permitido en Cloud SQL.

Lo autoricé y volví a trabajar.

Paulo Occaso
fuente
4

Me encontré con este mismo error exacto al conectarme desde el banco de trabajo MySQL. Así es como lo arreglé. Mi archivo de configuración /etc/my.cnf tenía el valor de dirección de enlace establecido en la dirección IP del servidor. Esto tuvo que hacerse para configurar la replicación. De todos modos, lo resolví haciendo dos cosas:

  1. cree un usuario que pueda usarse para conectarse desde la dirección de enlace en el archivo my.cnf

p.ej

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. cambie el valor del nombre de host de MySQL en los detalles de conexión en MySQL workbench para que coincida con la dirección de enlace
Tishan
fuente
Muchas gracias, también tuvimos replicación MySQL y la dirección de enlace era local: 10.0.0.x. Estuve luchando durante días por esta solución.
iFadi
3

El problema para mí fue que las consultas DNS fueron bloqueadas por el FW dentro de la subred. La solución fue deshabilitar las búsquedas de DNS en MySQL.

Bill Grady
fuente
Sospecho que el DNS también tiene la culpa en mi caso.
Zenexer
3

Acabo de configurar mysql en un cuadro de Windows. Obtuve el error del OP al intentar conectarme con el cliente Navicat MySql en el mismo cuadro. Tuve que especificar 127.0.0.1 como el host, y eso lo consiguió.

localhost o la dirección IP real de los servidores no funcionaron.

Paul B
fuente
3

El error significa que no recibió una respuesta del puerto en el que esperaba encontrar el servidor. Las causas varían desde ponerse en contacto con la máquina incorrecta (por una de varias razones) hasta que el servidor no se encuentre en el puerto esperado.

Compruebe a qué puerto está vinculado su servidor en /etc/mysql/my.cnf. ¿Corresponde a lo que está en su declaración de conexión? Si coinciden, intente conectarse con mysql desde el servidor y desde la línea de comandos de la máquina donde está ejecutando el cliente. Si funciona de un lugar y no de otro, es posible que tenga un problema de configuración de firewall / enrutador.

ClearCrescendo
fuente
No creo que esto sea correcto, si no hay nada escuchando en ese puerto, recibirá la respuesta ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), no el Lost connection to MySQL servermensaje.
Ken Williams
2

en mi caso, tenía ALL: ALL en hosts.deny. Cambiando esto a ALL: PARANOID resolvió mi problema al conectarme a través de ssh

domoarigato
fuente
2

El problema fue bastante estúpido para mí.

Solía ​​tener el mismo problema en la máquina Ubuntu AWS EC2 (MariaDB está instalada localmente por el momento), así que intenté hacer un túnel SSH y tuve el mismo problema. Así que intenté ssh tunnel over terminal:

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

Y me dijo esto:

Inicie sesión como usuario "ubuntu" en lugar de usuario "root".

Cambié el usuario ssh de root a ubuntu, al igual que mi configuración ssh, y se conectó muy bien.

Así que verifique su usuario de conexión SSH.

Supervisé esto, así que esto también es media hora de mi tiempo, así que espero que esto sea útil para ti.

Arda
fuente
2

Para mí, el archivo de configuración se encontró "/etc/mysql/mysql.conf.d/mysqld.cnf" comentando la dirección de enlace hizo el truco.

Como podemos ver aquí: en lugar de omitir las redes, el valor predeterminado ahora es escuchar solo en localhost, que es más compatible y no menos seguro.

Scott
fuente
Para mi mayor sorpresa, esta funcionó con Debian 10. Le di una oportunidad y ¡FUNCIONA! Edité la configuración de mysql sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfy en lugar de la bind-address = 111.112.113.114que usé bind-address = 127.0.0.1. La configuración del túnel SSH se establece como se describe en hostpresto.com/community/tutorials/… ¡ Buen trabajo! ¡Gracias!
klor
1

Me encontré con este mismo problema, enlazar dirección de un lado a otro en vano. La solución para mí fue descargar privilegios .

mysql> FLUSH PRIVILEGES;
Marko Bajlovic
fuente
1

Para mí establecer bind-address = 0.0.0.0enmysql/my.cnf trabajado. Básicamente, escucha todas las direcciones (pero aún un puerto) entonces.

Y no olvide reiniciar su servidor: systemctl restart mysql

Jahanzeb Khan
fuente
66
Todas las direcciones / interfaces, pero solo un puerto.
Zenexer
1

Simplemente tuve el mismo problema, pero en mi caso lo resolví con

servicio mysqld start

GunSky7
fuente
1

Una razón más ...

Me encontré con un servidor Ubuntu donde todo estaba personalizado y no podía conectarme debido a ese mismo error.

Esta configuración estaba adentro /etc/ssh/sshd_config

PermitTunnel no

Después de convertirse en

PermitTunnel yes

Pude conectarme remotamente a mi base de datos MySQL

lewis4u
fuente
1

Estoy tratando de conectar mi contenedor de base de datos db en Ubuntu 18.04, el mismo problema.

Primero verifique su dispositivo ejecutando nmcli devpara verificar si el dispositivodocker0 está conectado.

Si no está conectado, intente reiniciar el servicio docker:

sudo service docker restart

Belter
fuente
1

En mi caso, era el puerto 3306 de bloqueo de wifi de la universidad. Pude conectarme usando un punto de acceso móvil.

Cambie a un punto de acceso móvil u otra red, y si funciona allí, entonces sabrá que la red original está bloqueando el puerto 3306. Si obtiene el mismo error en más de 1 red, entonces sabe que es específico de su máquina.

R Diaz
fuente
1

Firewalldbloquea la dirección IP para dar acceso, use estos comandos:

firewall-cmd --permanente --zone = confiable --add-source = YOUR_IP / 32

firewall-cmd --permanente --zone = confiable --add-port = 3306 / tcp

firewall-cmd --reload

Rodniko
fuente
0

Al conectarme a Mysql de forma remota, recibí el error. Tenía esta advertencia en /var/log/mysqld.log:

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

Acabo de agregar esta línea al /etc/hostsarchivo:

X.X.X.X some_name

¡Problema resuelto! No usarlo skip-name-resolvecausó algunos errores en mi aplicación local al conectarme a MySQL.

Amin Sh
fuente
0

Tuve un problema idéntico Para solucionarlo, acabo de cambiar el host de localhost: 3306 a solo localhost. Por lo tanto, el error puede desaparecer cuando se realiza la conexión de un puerto inadecuado. Es mejor dejarlo por defecto.

Barto
fuente
1
Esto es probable porque mysql no acepta el puerto como parte del nombre de host, sino que necesita usar el argumento-P 3306
Clay H
0

El permiso de lectura y escritura del directorio de la base de datos también fue un problema que encontré. Solo asegúrese de que su aplicación pueda rw archivos en la ubicación db. Prueba chmod 777 para probar.

Abbas
fuente
0

Me enfrenté al mismo problema. Verifiqué e intenté configurar AllowTcpForwarding Sí, pero faltaba en mi sshd_config, así que no hay ayuda. No cambié sshd_config o my.cnf. Asegúrese de que el nombre de host ssh NO sea el mismo que el nombre de host mysql (use localhost).

En workbench, elija + para agregar una nueva conexión y configure lo siguiente:

  • método de conexión: TCP / IP estándar sobre SSH
  • Nombre de host SSH: 192.168.0.50:22 (reemplace el IP y el puerto del servidor SSH remoto (opcional))
  • Nombre de usuario SSH: sshuser
  • Puede establecer una contraseña o agregar en el indicador
  • Nombre de host MYSQL: localhost o 127.0.0.1
  • Puerto del servidor MYSQL: 3306
  • Puede establecer una contraseña o agregar en el indicador

Conexión de prueba. Debería tener éxito y luego presionar OK.Viola!

Reagan Ochora
fuente
0

Si la dirección de enlace no está presente en su archivo de configuración y mysql está alojado en la instancia de AWS, verifique su grupo de seguridad. En condiciones ideales, las reglas de entrada deben aceptar todas las conexiones desde el puerto 3306 y la regla de salida debe responder a todas las IP válidas.

Aman Bansal
fuente
0

He hecho a continuación 3 pasos y luego trabajé para mí.

  1. bind-address = "YOUR MACHINE IP"en my.cnfarchivo en /etc/my.cnf

  2. Reinicie el servicio por comando: service httpd restart

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

Kamal Oberoi
fuente
0

Tuve un error similar (conectando a MYSQL en aws a través de MYSql Workbench). Solía ​​conectarme bien antes y, de repente, dejó de funcionar y simplemente no volvería a funcionar). Mi conexión fue a través de SSH protegida por keyfile.

Resulta que estaba agotando el tiempo. Así que aumenté el tiempo de espera de la conexión SQL a 30 segundos (desde el valor predeterminado 10) y estaba listo para volver. cosas para probar (si tiene una configuración similar)

  1. ¿Puede ssh directamente desde la terminal al servidor (detecta problemas con los permisos de archivos clave, etc.)?
  2. ¿Puede entonces a través del terminal conectarse a MySQL con el mismo usuario / pwd usando algo como mysql -u [username] -p [database] ? Esto verificará si hay problemas de derechos de usuario, etc.
  3. si ambos funcionan, entonces sus parámetros no son el problema y tal vez el mismo problema de tiempo de espera como yo (excepto que nunca dijo error de tiempo de espera, sino que se le pidió que verificara los permisos, etc.)
Burges K
fuente
0

El espacio en disco limitado puede causar este error.

Comprueba tu espacio en disco

$ df -h

Intente aumentar el espacio si hay discos 100% usados.

En mi caso: tengo la caja Vagrant (8.0.1) (Ubuntu 16.04) Mi capacidad de disco mysql era de 10GB, la aumenté a 20GB

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

Luego reinicie mysql

$ sudo service mysql restart
Sadee
fuente
0

Si enfrenta este error al conectarse desde un control remoto, vaya a la opción mysql remota en cpanel y luego agregue% en Host (se permite el comodín%).

Juan
fuente