# rm-rf.es | Administración de sistemas

Bitácora personal de un SysAdmin Gnu/Linux, Windows, BSD...

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table


Este error se suele producir cuando hacemos un mysqldump de una base de datos MySQL con tablas de gran tamaño:

mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table XXXX

Para solucionarlo, podemos aumentar temporalmente el tamaño máximo del buffer de comunicación de mysql a través de la variable max_allowed_packet. El valor se puede establecer en K, M ó G para indicar er kilobytes, megabytes, o gigabytes. Probad a aumentar el límite y verificar si el error queda solucionado, sino, es posible que tengáis que aumentarlo más:

$ mysqldump --opt --max_allowed_packet=128M base_de_datos > bd.sql

Backup de todas las bases de datos MySQL con una sola línea de comandos


Probablemente la mayoría de vosotros trabajéis con bases de datos MySQL y tengáis scripts personalizados para hacer copias de seguridad de las mismas. Por ello, y por si os fuera de utilidad os dejo esta línea de comandos  que hace un dump de todas las bases de datos de un servidor MySQL separadas en ficheros .sql independientes.

for DB in `mysql -e "show databases" -u USUARIO -pPASSWORD | grep -v Database`; do mysqldump -u USUARIO -pPASSWORD $DB > "$DB.sql"; done

Como podéis ver es bastante sencillo, hacemos un bucle con la salida del comando “show databases” que vuelca por pantalla todas las bases de datos del servidor, eliminamos la única línea que no nos interesa (la que contiene Database) y vamos haciendo una a una la copia de seguridad de cada una de las bases de datos con mysqldump. Únicamente tendréis que modificar el usuario y clave con el que conectar al servicio.

Mysqldump: excluir una tabla en el backup


Si queremos hacer un backup de una base de datos MySQL excluyendo una o varias tablas del mismo, simplemente tenemos que usar el parámetro –ignore-table=bd.tabla. Unos ejemplos:

Hacemos un backup de la base de datos test excluyendo la tabla prueba1:

mysqldump --ignore-table=test.prueba1 test > test.sql 

Hacemos un backup de la base de datos test excluyendo las tablas prueba1 y prueba2:

mysqldump --ignore-table=test.prueba1 --ignore-table=test.prueba2 test > test.sql

Esta opción también puede utilizarse para ignorar vistas (views)

MySQL: Volcar determinadas filas con mysqldump


Probablemente en ciertas ocasiones no necesites volcar en un fichero todo el backup de una base de datos MySQL, sino que solamente necesites volcar ciertas filas de la bbdd. Con la herramienta de backup y volcado de bases de datos mysqldump podemos hacer esta tarea de un modo sencillo.

En el siguiente ejemplo podéis observar como mediante la cláusula –where podemos especificar las condiciones que deben cumplir las filas para ser volcadas en el backup:

mysqldump -u <usuario> -p  --tables <tablas>  --where="<condición>" > dumptest.sql

Un ejemplo real de –where:

--where="user='test'"

Sencillo y muy útil en bases de datos de gran tamaño de las cuales necesitamos recuperar solamente una parte de los registros.

Exportar estructura de base de datos MySQL en formato XML


Para exportar la estructura (sin datos) de una base de datos MySQL a formato XML hay que utilizar el comando mysqldump con los parámetros –no-data y –xml:

mysqldump --no-data --xml base_de_datos > base_de_datos.xml

Backup de una sola tabla con mysqldump


Es posible hacer un backup de una sola tabla en vez de toda la base de datos, para ello, utiliza el siguiente comando mysqldump:

mysqldump -p --user usuario basededatos tabla > backuptabla.sql

Vía | Uno-Code

Backups MySQL con mysqldump


Mysqldump, como la mayoría sabéis, es una herramienta de mysql que sirve para realizar copias de seguridad de bases de datos. Es esencial conocer el uso básico de esta herramienta, como es esencial tener un sistema de backups adecuado para cualquier dato almacenado con un mínimo de importancia.

Os voy a poner los ejemplos más básicos y comunes para realizar backups desde línea de comandos con mysqldump.

Realizar backup de una única base de datos:

mysqldump -u root -p nombre_base_de_datos > fichero.sql

De este modo, realizará el backup de la base de datos, solicitando la clave del usuario root mysql, si queréis también se puede especificar pegado a la letra “p” -pclave.

Y si quisieramos restaurar esa base de datos, haríamos lo siguiente:

mysql -u root -p  nombre_base_de_datos < fichero.sql

Lo mismo ocurre con la clave del usuario root, la podemos especificar o esperar a que la pregunte.

Si quisieramos realizar un backup de todas las bases de datos:

mysqldump -u root -p --all-databases > fichero.sql

Y si solo quisieramos hacer backup de un par de bases de datos:

mysqldump -u root -p --databases base_datos1 base_datos2 > fichero.sql

Para hacer backup de una sola tabla, dentro de una base de datos:

mysqldump -u root -p base_datos tabla > fichero.sql

Esto es, a grandes rasgos, lo más básico de la herramienta mysqldump, en la propia ayuda de la herramienta encontraréis mucha más información:

mysqldump --help

mysqldump: Errcode: 24 when using LOCK TABLES


Hoy tenía que dumpear una base de datos con una gran cantidad de tablas (>1000) y al tratar de hacer un mysqldump recibía el siguiente error:

# mysqldump xxxx > xxxx.sql
mysqldump: Got error: 1105: File './xxxx/wp_comments.MYD' not found (Errcode: 24) when using LOCK TABLES

Una de las soluciónes pasa por hacer un skip las tablas LOCK, de este modo el dump se realiza correctamente:

# mysqldump --lock-tables=false xxxx_xxx > xxxx.sql

El error es debido a lo siguiente:

$ perror 24
OS error code 24: Too many open files

Demasiados ficheros abiertos…

Otra opción es limitar el nº de ficheros abiertos a una tabla cada vez:

mysqldump --single-transaction