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

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

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