En general el error:
Error: 2006 ( CR_SERVER_GONE_ERROR
) - El servidor MySQL se ha ido
significa que el cliente no pudo enviar una pregunta al servidor .
mysql
importar
En 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
) para mysql
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 para mysql
.
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:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
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.
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
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:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
En Linux, use strace
. En BSD / Mac use dtrace
/ dtruss
, p. Ej.
sudo dtruss -a -fn mysqld 2>&1
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 el CR_SERVER_GONE_ERROR
error para el comando del cliente.
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}