Código de error: 2013. Se perdió la conexión al servidor MySQL durante la consulta


251

Obtuve el código de error: 2013. Perdí la conexión al servidor MySQL durante el error de consulta cuando intenté agregar un índice a una tabla usando MySQL Workbench. También noté que aparece cada vez que ejecuto una consulta larga.

¿Hay alguna posibilidad de aumentar el tiempo de espera?

Respuestas:


472

Las nuevas versiones de MySQL WorkBench tienen una opción para cambiar tiempos de espera específicos.

Para mí, estaba en Edición → Preferencias → Editor SQL → Tiempo de espera de lectura de conexión DBMS (en segundos): 600

Cambió el valor a 6000.

También las filas de límite sin marcar, ya que poner un límite cada vez que quiero buscar en todo el conjunto de datos se vuelve agotador.


2
¿Es posible aumentar este límite en 99,999 segundos? El DBMS connection read time outcampo solo acepta hasta 5 cifras, y establecer el campo en 0 es equivalente al parámetro predeterminado (600 segundos). (Windows 7 64-bit Ultimate, MySQL Workbench 5.2.47 CE)
Franck Dernoncourt

2
Después de stackoverflow.com/q/16877574/395857 , este problema ahora está resuelto ( bugs.mysql.com/bug.php?id=69395 )
Franck Dernoncourt

44
desmarque filas de límite en Edición → Preferencias → Consultas SQL
Jon

77
Después de reiniciar, muestra Error 2013 nuevamente, incluso con el tiempo de espera de lectura establecido en 6000, por lo que esto no parece ser una solución.
Davicus

44
¡Recuerde reiniciar Workbench Y cerrar todas las ventanas de consulta abiertas primero!
pimbrouwers

32

Iniciar el servidor de base de datos con la opción comandline net_read_timeout/ wait_timeouty un valor adecuado (en segundos) - por ejemplo: --net_read_timeout=100.

Para referencia ver aquí y aquí .


1
Esto es correcto, pero la respuesta con la mayor cantidad de ups me ayudó en realidad
Sambit Tripathy

66
¿Cómo proporciono este parámetro en la línea de comando? Cuando intento conectarme a la base de datos: mysql -u root -p --net_read_timeout = 60 o cuando intento iniciar el servicio? servicio de sudo mysql start? En ambos lugares está dando error: variable desconocida 'net_read_timeout'
Vikas Goel

@VikasGoel Es un parámetro del lado del servidor. Es decir mysqld.
Chloe

29

Si su consulta tiene datos de blob, este problema se puede solucionar aplicando un my.inicambio como se propone en esta respuesta :

[mysqld]
max_allowed_packet=16M

Por defecto, esto será 1M (el valor máximo permitido es 1024M). Si el valor suministrado no es un múltiplo de 1024K, se redondeará automáticamente al múltiplo más cercano de 1024K.

Mientras que el hilo se hace referencia es sobre el error de MySQL 2006 , fijando el max_allowed_packetde 1M a 16M hizo corregir el error 2013, que se presentó para mí cuando se ejecuta una consulta larga.

Para usuarios de WAMP: encontrará la bandera en la [wampmysqld]sección.


Este fue exactamente mi problema. Estaba importando una copia de seguridad de la base de datos desde un archivo y MySQL Workbench informaba este error de 2013 seguido de "La operación falló con el código de salida 1". Resulta que la copia de seguridad tenía grandes columnas de blob que superaban el tamaño predeterminado máximo de MySQL max_allowed_packet de 4M. El aumento de esto lo arregló. (MySQL 5.6 y Workbench 6.2.3). ¡Gracias!
zAlbee

Esta fue la solución para mí también. Aunque lo configuré en 256M para una máquina con Windows.
smoore4

Tenía 16M, obtuve ese error con un archivo de importación varias veces, cambió a 32M y luego funcionó.
Hakre

15

Agregue lo siguiente al archivo / etc / mysql / cnf:

innodb_buffer_pool_size = 64M

ejemplo:

key_buffer              = 16M
max_allowed_packet      = 16M
thread_stack            = 192K
thread_cache_size       = 8
innodb_buffer_pool_size = 64M

66
¿Estás seguro de que el nombre del archivo /etc/mysql/cnfes correcto? ¿No debería ser /etc/my.cnf?
Peter VARGA el

12
SET @@local.net_read_timeout=360;

Advertencia: Lo siguiente no funcionará cuando lo esté aplicando en una conexión remota:

SET @@global.net_read_timeout=360;

¿Qué es 360? Milisegundos, segundos, minutos?
MasterJoe2

10

Hay tres causas probables para este mensaje de error

  1. Por lo general, indica problemas de conectividad de red y debe verificar el estado de su red si este error ocurre con frecuencia
  2. A veces, el formulario "durante la consulta" ocurre cuando se envían millones de filas como parte de una o más consultas.
  3. Más raramente, puede suceder cuando el cliente está intentando la conexión inicial al servidor

Para más detalles lea >>

Causa 2:

SET GLOBAL interactive_timeout=60;

desde su valor predeterminado de 30 segundos a 60 segundos o más

Causa 3:

SET GLOBAL connect_timeout=60;

2 me da este error - Código: 1227. Acceso denegado; necesita (al menos uno de) los privilegios SUPER para esta operación
MasterJoe2

9

Gracias, funcionó. Pero con las actualizaciones de mysqldb, la configuración se ha convertido en:

max_allowed_packet

net_write_timeout

net_read_timeout

doc mysql


8

Debe establecer las propiedades 'interactive_timeout' y 'wait_timeout' en el archivo de configuración mysql a los valores que necesita.


Esto me ayuda. 'interactive_timeout' en my.cnf se estableció en 100, eso es demasiado corto. después de cambiarlo a 3600 s (o cualquier valor lo suficientemente grande para usted), problema resuelto
Thx

7

Simplemente realizar una actualización de MySQL que volver a construir INNODB junto con la reconstrucción de muchas tablas necesarias para el buen funcionamiento de MySQL tales como performance_schema, information_schema, etc.

Emita el siguiente comando desde su shell:

sudo mysql_upgrade -u root -p

El error no se presentó hasta MySQL Workbench 6.1.4 (y solo después de un tiempo) y también ocurre en 6.1.6 (aunque solo después de algunos usos), así que no estoy seguro de cómo reconstruir múltiples servidores es una solución para Un problema que solo se ha presentado recientemente en una GUI.
Davicus

Esto solucionó mi problema. Acababa de usar Ansible para configurar la base de datos sobre una existente, y las cosas se volvieron locas. La ejecución de este comando restauró todo al funcionamiento.
Jubz

4

Sé que es viejo pero en Mac

1. Control-click your connection and choose Connection Properties.
2. Under Advanced tab, set the Socket Timeout (sec) to a larger value.

4

Cambie el tiempo de "tiempo de espera de lectura" en Edición-> Preferencias-> Editor SQL-> sesión MySQL


3

Intente desmarcar filas de límite en Edición → Preferencias → Consultas SQL

porque debe establecer las propiedades 'interactive_timeout' y 'wait_timeout' en el archivo de configuración de mysql a los valores que necesita.


3

Si experimenta este problema durante la restauración de un gran archivo de volcado y puede descartar el problema de que tiene algo que ver con la red (por ejemplo, ejecución en localhost), entonces mi solución podría ser útil.

Mi mysqldump contenía al menos un INSERT que era demasiado grande para que mysql lo calculara. Puede ver esta variable escribiendo show variables like "net_buffer_length";dentro de su mysql-cli. Tienes tres posibilidades:

  • aumentar net_buffer_length dentro de mysql -> esto necesitaría un reinicio del servidor
  • crear volcado con --skip-extended-insert, por inserción se usa una línea -> aunque estos volcados son mucho más agradables de leer, esto no es adecuado para volcados grandes> 1 GB porque tiende a ser muy lento
  • cree un volcado con inserciones extendidas (que es el valor predeterminado) pero limite la longitud de búfer de red, por ejemplo, --net-buffer_length NR_OF_BYTESdonde NR_OF_BYTES es más pequeño que la longitud de búfer de red del servidor -> Creo que esta es la mejor solución, aunque más lento no es necesario reiniciar el servidor.

Usé el siguiente comando mysqldump: mysqldump --skip-comments --set-charset --default-character-set=utf8 --single-transaction --net-buffer_length 4096 DBX > dumpfile


2

Tengo el mismo problema al cargar un archivo .csv. Convierte el archivo a .sql.

Usando el siguiente comando, me las arreglo para solucionar este problema.

mysql -u <user> -p -D <DB name> < file.sql

Espero que esto ayude.


2

Si todas las otras soluciones aquí fallan, verifique su syslog (/ var / log / syslog o similar) para ver si su servidor se está quedando sin memoria durante la consulta.

Tuve este problema cuando innodb_buffer_pool_size se configuró demasiado cerca de la memoria física sin un archivo de intercambio configurado. MySQL recomienda para una configuración de servidor específica de la base de datos innodb_buffer_pool_size en un máximo de alrededor del 80% de la memoria física , lo configuré en alrededor del 90%, el núcleo estaba matando el proceso mysql. Se movió innodb_buffer_pool_size de nuevo a alrededor del 80% y eso solucionó el problema.


2

En mi caso, establecer el intervalo de tiempo de espera de conexión a 6000 o algo más alto no funcionó.

Acabo de hacer lo que el banco de trabajo dice que puedo hacer.

La cantidad máxima de tiempo que la consulta puede tomar para devolver datos del DBMS. Establezca 0 para omitir el tiempo de espera de lectura.

En las Preferencias de Mac -> Editor SQL -> Ir a la sesión MySQL -> establecer el intervalo de tiempo de espera de lectura de conexión a 0.

Y funciona 😄


1

Me enfrenté a este mismo problema. Creo que sucede cuando tienes claves foráneas para tablas más grandes (lo que lleva tiempo).

Intenté volver a ejecutar la instrucción de creación de tabla sin las declaraciones de clave externa y descubrí que funcionaba.

Luego, después de crear la tabla, agregué las restricciones de clave externa utilizando la consulta ALTER TABLE.

Espero que esto ayude a alguien.


1

Esto me sucedió porque mi innodb_buffer_pool_size estaba configurado para ser más grande que el tamaño de RAM disponible en el servidor. Las cosas se interrumpieron debido a esto y emite este error. La solución es actualizar my.cnf con la configuración correcta para innodb_buffer_pool_size.


1

Vaya a Edición de Workbench → Preferencias → Editor SQL → Tiempo de espera de lectura de conexiones DBMS: hasta 3000. El error ya no se produjo.


0

Ir:

Editar -> Preferencias -> Editor SQL

Allí puede ver tres campos en el grupo "Sesión de MySQL", donde ahora puede establecer los nuevos intervalos de conexión (en segundos).


0

Resulta que nuestra regla de firewall estaba bloqueando mi conexión a MYSQL. Después de levantar la política de firewall para permitir la conexión, pude importar el esquema con éxito.


0

Tuve el mismo problema, pero para mí la solución era un usuario de DB con permisos demasiado estrictos. Tenía que permitir la Executehabilidad sobre la mysqlmesa. Después de permitir eso, ya no tenía más conexiones.


0

Compruebe si los índices están en su lugar primero.

SELECT *
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = '<schema>'

0

Me encontré con esto mientras ejecutaba un proceso almacenado que creaba muchas filas en una tabla en la base de datos. Pude ver el error justo después de que el tiempo cruzó el límite de 30 segundos.

Intenté todas las sugerencias en las otras respuestas. Sin embargo, estoy seguro de que algo ayudó, lo que realmente hizo que funcionara para mí fue cambiar a SequelPro desde Workbench.

Supongo que fue una conexión del lado del cliente que no pude detectar en Workbench. ¿Quizás esto ayude a alguien más también?


0

Si está usando SQL Work Bench, puede intentar usar Indexing, agregando un índice a sus tablas, para agregar un índice, haga clic en el símbolo de llave inglesa (llave) en la tabla, debería abrir la configuración de la tabla, a continuación , haga clic en la vista de índice, escriba un nombre de índice y establezca el tipo en índice. En las columnas de índice, seleccione la columna principal en su tabla.

Realice el mismo paso para otras claves primarias en otras tablas.


0

Parece que falta una respuesta aquí para aquellos que usan SSH para conectarse a su base de datos MySQL. Debe marcar dos lugares, no 1, como sugieren otras respuestas:

Workbench Editar → Preferencias → Editor SQL → DBMS

Workbench Editar → Preferencias → SSH → Tiempos de espera

Mis tiempos de espera de SSH predeterminados se establecieron muy bajos y causaron algunos (pero aparentemente no todos) de mis problemas de tiempo de espera. Después, ¡no olvide reiniciar MySQL Workbench!

Por último, puede valer la pena contactar a su administrador de base de datos y pedirles que aumenten las propiedades wait_timeout & interactive_timeout en mysql a través de my.conf + mysql restart o haciendo un conjunto global si reiniciar mysql no es una opción.

¡Espero que esto ayude!


0

Tres cosas a seguir y asegúrese de:

  1. ¿Si varias consultas muestran una conexión perdida?
  2. ¿Cómo usas set query en MySQL?
  3. ¿Cómo eliminar + actualizar consulta simultáneamente?

Respuestas:

  1. Siempre intente eliminar el definidor ya que MySQL crea su propio definidor y si hay varias tablas involucradas para la actualización, intente hacer una sola consulta ya que a veces la consulta múltiple muestra la conexión perdida
  2. Siempre configure el valor en la parte superior, pero después de ELIMINAR si su condición no involucra el valor de ESTABLECER.
  3. Utilice ELIMINAR PRIMERO Y LUEGO ACTUALIZAR SI AMBAS OPERACIONES SE REALIZAN EN DIFERENTES TABLAS

-1

consultar sobre

OOM on /var/log/messages ,
modify innodb_buffer_pool_size value ; when load data , use 50% of os mem ; 

Espero que esto ayude


-1

Esto generalmente significa que tiene "incompatibilidades con la versión actual de MySQL Server", consulte mysql_upgrade. Me encontré con este mismo problema y simplemente tuve que ejecutar:

mysql_upgrade --password La documentación indica que "mysql_upgrade debe ejecutarse cada vez que actualice MySQL".

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.