Recibo este error cuando intento obtener un archivo SQL grande (una INSERT
consulta grande ).
mysql> source file.sql
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 2
Current database: *** NONE ***
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 3
Current database: *** NONE ***
Nada en la tabla se actualiza. Intenté eliminar y recuperar la tabla / base de datos, así como reiniciar MySQL. Ninguna de estas cosas resuelve el problema.
Aquí está el tamaño máximo de mi paquete:
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 1048576 |
+--------------------+---------+
Aquí está el tamaño del archivo:
$ ls -s file.sql
79512 file.sql
Cuando pruebo el otro método ...
$ ./mysql -u root -p my_db < file.sql
Enter password:
ERROR 2006 (HY000) at line 1: MySQL server has gone away
Respuestas:
Agregar esta línea al
my.cnf
archivo resuelve mi problema.Esto es útil cuando las columnas tienen valores grandes, que causan los problemas, puede encontrar la explicación aquí .
fuente
set global max_allowed_packet=64*1024*1024;
- no requiere un reinicio de MySQL, asísudo service mysql restart
para que los cambios en el archivo my.cnf surtan efecto.Puede aumentar el paquete máximo permitido
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html#sysvar_max_allowed_packet
fuente
La actualización global y la configuración de my.cnf no me funcionaron por alguna razón. Pasar el
max_allowed_packet
valor directamente al cliente trabajó aquí:fuente
--max_allowed_packet
solo afecta al cliente. Considere modificar el servidor mysql (mysqld) también editandomax_allowed_packet
el/etc/my.cnf
archivo y reiniciando su servidor mysql.En general el error:
significa que el cliente no pudo enviar una pregunta al servidor .
mysql
importarEn su caso específico al importar el archivo de la base de datos a través de
mysql
, esto probablemente significa que algunas de las consultas en el archivo SQL son demasiado grandes para importar y no se pudieron ejecutar en el servidor, por lo tanto, el cliente falla en el primer error ocurrido.Entonces tienes las siguientes posibilidades:
Agregue la opción force (
-f
) paramysql
continuar y ejecutar el resto de las consultas.Esto es útil si la base de datos tiene algunas consultas grandes relacionadas con la memoria caché que de todos modos no son relevantes.
Aumente
max_allowed_packet
ywait_timeout
en la configuración de su servidor (por ejemplo~/.my.cnf
).Volcar la base de datos usando la
--skip-extended-insert
opción para desglosar las consultas grandes. Luego impórtalo de nuevo.Intenta aplicar la
--max-allowed-packet
opción paramysql
.Razones comunes
En general, este error podría significar varias cosas, como:
una consulta al servidor es incorrecta o demasiado grande,
Solución: aumentar la
max_allowed_packet
variable .Asegúrese de que la variable esté debajo de la
[mysqld]
sección, no[mysql]
.No tenga miedo de usar números grandes para las pruebas (como
1G
).No olvide reiniciar el servidor MySQL / MariaDB.
Verifique dos veces que el valor se haya establecido correctamente:
Se agotó el tiempo de espera de la conexión TCP / IP en el lado del cliente.
Solución: aumentar la
wait_timeout
variable .Intentó ejecutar una consulta después de que se cerró la conexión al servidor.
Solución: Se debe corregir un error lógico en la aplicación.
Las búsquedas de nombres de host fallaron (p. Ej., Problema del servidor DNS) o el servidor se inició con la
--skip-networking
opción.Otra posibilidad es que su firewall bloquee el puerto MySQL (por ejemplo, 3306 por defecto).
El subproceso en ejecución se ha eliminado, así que vuelva a intentarlo
Ha encontrado un error en el que el servidor murió mientras ejecutaba la consulta.
Un cliente que se ejecuta en un host diferente no tiene los privilegios necesarios para conectarse.
Y muchos más, así que aprenda más en: B.5.2.9 El servidor MySQL se ha ido .
Depuración
Aquí hay algunas ideas de depuración de nivel experto:
Verifique los registros, p. Ej.
Pruebe su conexión a través de
mysql
,telnet
o funciones de ping (por ejemplo,mysql_ping
en PHP).Úselo
tcpdump
para detectar la comunicación MySQL (no funcionará para la conexión de socket), por ejemplo:En Linux, use
strace
. En BSD / Mac usedtrace
/dtruss
, p. Ej.Ver: Primeros pasos con DTracing MySQL
Obtenga más información sobre cómo depurar el servidor o cliente MySQL en: 26.5 Depuración y portabilidad de MySQL .
Como referencia, verifique el código fuente en el
sql-common/client.c
archivo responsable de arrojar elCR_SERVER_GONE_ERROR
error para el comando del cliente.fuente
Por si acaso, para verificar las variables puede usar
Esto mostrará las variables actuales, en este caso max_allowed_packet, y como alguien dijo en otra respuesta, puede configurarlo temporalmente con
En mi caso, el archivo cnf no se tuvo en cuenta y no sé por qué, por lo que el código SET GLOBAL realmente ayudó.
fuente
Resolví el error
ERROR 2006 (HY000) at line 97: MySQL server has gone away
y migré con éxito un archivo sql> 5GB realizando estos dos pasos en orden:Creó /etc/my.cnf como otros lo han recomendado, con los siguientes contenidos:
Agregar las banderas
--force --wait --reconnect
al comando (es decirmysql -u root -p -h localhost my_db < file.sql --verbose --force --wait --reconnect
).Nota importante: Era necesario realizar ambos pasos, porque si no me molestaba en hacer los cambios en el archivo /etc/my.cnf y en agregar esas marcas, faltaban algunas de las tablas después de la importación.
Sistema utilizado: OSX El Capitan 10.11.5; mysql Ver 14.14 Distrib 5.5.51 para osx10.8 (i386)
fuente
my.cnf
, debe reiniciar su servicio mysql.Tuve el mismo problema, pero cambiar max_allowed_packet en el archivo my.ini / my.cnf en [mysqld] hizo el truco.
agregar una línea
ahora reinicie el servicio MySQL una vez que haya terminado.
fuente
También puede iniciar sesión en la base de datos como root (o privilegio SUPER) y hacer
no requiere un reinicio de MySQL también. Tenga en cuenta que debe corregir su
my.cnf
archivo como se describe en otras soluciones:Y confirme el cambio después de reiniciar MySQL:
También puede usar la línea de comandos, pero eso puede requerir la actualización de los scripts de inicio / detención que pueden no sobrevivir a las actualizaciones y parches del sistema.
Según lo solicitado, agrego mi propia respuesta aquí. Me alegra ver que funciona!
fuente
La solución es aumentar los valores dados
wait_timeout
y losconnect_timeout
parámetros en su archivo de opciones, debajo de la[mysqld]
etiqueta.Tuve que recuperar una copia de seguridad de MySQL de 400 MB y esto funcionó para mí (los valores que he usado a continuación son un poco exagerados, pero entiendes el punto):
fuente
Un par de cosas podrían estar sucediendo aquí;
INSERT
está ejecutando mucho tiempo y el cliente se está desconectando Cuando se vuelve a conectar, no está seleccionando una base de datos, de ahí el error. Una opción aquí es ejecutar su archivo por lotes desde la línea de comandos y seleccionar la base de datos en los argumentos, así;php
o algún otro idioma. Después de cada declaración de larga duración, puede cerrar y volver a abrir la conexión, asegurándose de estar conectado al comienzo de cada consulta.fuente
source
comandoSi está en Mac e instaló mysql a través de brew como yo, lo siguiente funcionó.
cp $(brew --prefix mysql)/support-files/my-default.cnf /usr/local/etc/my.cnf
Fuente: para las instalaciones de mysql de homebrew, ¿dónde está my.cnf?
agregar
max_allowed_packet=1073741824
a/usr/local/etc/my.cnf
mysql.server restart
fuente
Encontré este error cuando uso Mysql Cluster, no sé si esta pregunta es de un uso de clúster o no. Como el error es exactamente el mismo, da mi solución aquí. Obteniendo este error porque los nodos de datos se bloquean de repente. Pero cuando los nodos se bloquean, aún puede obtener el resultado correcto usando cmd:
Y el mysqld también funciona correctamente. Entonces, al principio, no puedo entender lo que está mal. Y unos 5 minutos después, el resultado ndb_mgm muestra que no funciona ningún nodo de datos. Entonces me doy cuenta del problema. Entonces, intente reiniciar todos los nodos de datos, luego el servidor mysql está de vuelta y todo está bien.
Pero una cosa es extraña para mí, después de que perdí el servidor mysql por algunas consultas, cuando uso cmd like
show tables
, todavía puedo obtener la información de retorno33 rows in set (5.57 sec)
, pero no se muestra la información de la tabla.fuente
Para Amazon RDS (es mi caso), puede cambiar el
max_allowed_packet
valor del parámetro a cualquier valor numérico en bytes que tenga sentido para los datos más grandes en cualquier inserción que pueda tener (por ejemplo: si tiene algunos valores de blob de 50mb en su inserción, establezcamax_allowed_packet
a 64M = 67108864), en una nueva o existenteparameter-group
. Luego aplique ese grupo de parámetros a su instancia de MySQL (puede requerir reiniciar la instancia).fuente
max_allowed_packet parameter
y establezca el tamaño apropiado (o si tiene blobs realmente grandes, simplemente configúrelo en el valor máximo 1073741824 ) deberia de funcionar.Si se está reconectando y obteniendo la conexión ID 2, el servidor casi definitivamente se ha bloqueado.
Póngase en contacto con el administrador del servidor y pídales que diagnostiquen el problema. Ningún SQL no malicioso debería bloquear el servidor, y la salida de mysqldump ciertamente no debería.
Es probable que el administrador del servidor haya cometido un gran error operativo, como asignar tamaños de búfer mayores que los límites de espacio de direcciones de la arquitectura, o más que la capacidad de memoria virtual. El registro de errores de MySQL probablemente tendrá información relevante; supervisarán esto si son competentes de todos modos.
fuente
Este es un problema más raro, pero lo he visto si alguien ha copiado todo el directorio / var / lib / mysql como una forma de migrar su base de datos a otro servidor. La razón por la que no funciona es porque la base de datos se estaba ejecutando y usando archivos de registro. A veces no funciona si hay registros en / var / log / mysql. La solución es copiar también los archivos / var / log / mysql.
fuente
Para usuarios de Drupal 8 que buscan una solución para la falla de importación de DB:
Al final del archivo de volcado sql puede haber comandos que insertan datos en la tabla "webprofiler". Supongo que es un archivo de registro de depuración y no es realmente importante para que el sitio funcione, por lo que todo esto se puede eliminar. Eliminé todas esas inserciones, incluidas LOCK TABLES y UNLOCK TABLES (y todo lo demás). Está en la parte inferior del archivo sql. El problema se describe aquí:
https://www.drupal.org/project/devel/issues/2723437
Pero no hay solución para esto además de truncar esa tabla.
Por cierto, probé todas las soluciones de las respuestas anteriores y nada más me ayudó.
fuente
He intentado todas las soluciones anteriores, todas fallaron.
Terminé usando en
-h 127.0.0.1
lugar de usar el predeterminadovar/run/mysqld/mysqld.sock
.fuente
Este mensaje de error también aparece cuando creó el SCHEMA con una COLLATION diferente a la que se utiliza en el volcado. Entonces, si el volcado contiene
también debe reflejar esto en la recopilación de SCHEMA:
Había estado usando utf8mb4_general_ci en el esquema, porque mi script provenía de una nueva instalación de V8, ahora cargaba un DB en el viejo 5.7 y se volvía loco.
Entonces, tal vez esto te ayude a ahorrar algunas horas frustrantes ... :-)
(MacOS 10.3, mysql 5.7)
fuente
Si ninguna de estas respuestas resuelve el problema, lo resolví eliminando las tablas y volviéndolas a crear automáticamente de esta manera:
luego use esta copia de seguridad con su base de datos y eliminará y volverá a crear las tablas que necesita.
Luego hace una copia de seguridad de los datos y hace lo mismo, y funcionará.
fuente
¿Qué tal usar el cliente mysql de esta manera?
fuente