En algunas ocasiones necesitamos poner al día nuestra base de datos con la de producción, ya sea para trabajar con datos actualizados, o porque nos estamos creando el entorno de desarrollo en local.

Con algunas bases de datos nos podemos encontrar con el problema de que son demasiado grandes y probablemente no necesitemos todo su contenido.

A la hora de realizar un backup excluyendo algunas tablas o el contenido de alguna de ellas, tenemos dos opciones (aunque hay más), y lo vamos a hacer usando el comando mysqldump.

Backup de base de datos MySQL excluyendo una tabla o tablas

Haciendo uso del parámetro --ignore-table, le indicamos cuáles son las tablas que queremos excluir.

Este comando no exportará la estructura de la tabla o tablas excluidas.

$ mysqldump -h [host] -u [usuario] -p [base_de_datos] --ignore-table=base_de_datos.tabla1
--ignore-table=base_de_datos.tabla2 > db-backup.sql

Ejemplo:

$ mysqldump -u root -p blog --ignore-table=blog.posts > db-backup.sql

Este comando exportará todas las tablas de la base de datos blog con su estructura y contenido, excluyendo la tabla posts, tanto estructura como contenido.

Backup de base de datos MySQL excluyendo el contenido de una tabla o tablas

Si lo que queremos es exportar la estructura de todas las tablas pero excluir el contenido de alguna de ellas, vamos a necesitar hacerlo en dos pasos.

Lo hacemos en dos pasos porque mysqldump no permite (con un solo comando) exportar estructura y datos excluyendo parte del contenido.

  1. Exportar la estructura de todas las tablas. Con el parámetro --no-data vamos a excluir el contenido.
    $ mysqldump -h [host] -u [usuario] -p [base_de_datos] --no-data > db-backup.sql
  2. Exportar el contenido de todas las tablas exceptuando las que no necesitemos. Con el parámetro --no-create-info excluimos la estructura.
    $ mysqldump -h [host] -u [usuario] -p [base_de_datos] --no-create-info
    --ignore-table=base_de_datos.tabla1 --ignore-table=base_de_datos.tabla2 >> db-backup.sql

Ejemplo:

$ mysqldump -u root -p blog --no-data > db-backup.sql
$ mysqldump -u root -p blog --no-create-info --ignore-table=blog.posts >> db-backup.sql

Aquí estamos exportando la estructura de todas las tablas de la base de datos blog, y luego el contenido de todas ellas excluyendo la tabla posts.

En el ejemplo, yo concateno la salida del segundo comando al fichero creado por el primero, pero lógicamente esto es opcional.