mysqldump -u root -proot --no-data DATABASE table > file_backup.sql
mysqldump -u root -proot DATABASE --ignore-table=DATABASE.table >> file_backup.sql
En el ejemplo utilizaré la base de datos de pruebas sakila, y las instrucciones quedarían así suponiendo que queremos toda la estructura de la base de datos y datos excluyendo los datos de la tabla film, esta tabla estará vacía:
mysqldump -u root -proot --no-data sakila film >> file_backup.sql
mysqldump -u root -proot sakila --ignore-table=sakila.film >> file_backup.sql
La primera instrucción crea la estructura de la tabla film en el fichero de backup y la segunda instrucción crea un backup de toda la base de datos excluyendo la tabla film que no la pondrá en el backup, pero nosotros ya la hemos puesto antes en el fichero vacía de datos.
Pero también podemos querer excluir multiples tablas y seria de la siguiente forma, por ejemplo también excluimos la tabla film_actor y rental, entonces tendremos que poner las tablas seguidas separadas por espacios
mysqldump -u root -proot --no-data sakila film film_actor rental >> file_backup.sql
mysqldump -u root -proot DATABASE --ignore-table=sakila.film --ignore-table=sakila.film_actor --ignore-table=sakila.rental>> file_backup.sql
Y si la base de datos es muy grande y/o queremos automatizar el proceso para hacer backups periódicamente podemos crearnos un script como el siguiente:
#!/bin/bash
# Obtenemos la fecha para usarla como nombre de fichero
date=`date +%Y-%m-%d_%Hh`
# Creamos un array para guardar las tablas a escluir
excludeTables=(film film_actor rental)
# Seteamos dos variables donde pondremos el nombre de las tablas con las
# sentencia que necesita MySql para procesarla
schemaTables=""
ignoreTables=""
# Recorremos el array y por cada elemento lo añadimos a la variable para crear
# el esquema y a la variable para excluirlas del backup
for i in "${excludeTables[@]}"
do
schemaTables+="$i "
ignoreTables+="--ignore-table=sakila.$i "
done
# Ejecutamos las dos instrucciones del backup, primero creamos la estructura de las tablas
# que queremos vacias y despues creamos el backup completo excluyendos las tablas, todo
# en el mismo fichero de backup
echo "Backup solo estructura: $schemaTables"
mysqldump -u root -proot --no-data sakila $schemaTables >> ${date}_clean.sql
echo "Tablas a ingnorar datos: $ignoreTables"
mysqldump -u root -proot sakila $ignoreTables >> ${date}_clean.sql
Si utilizáis el motor InnoDB una buena opción es utilizar --lock-tables=false para no bloquear las tablas mientras se hacer el backup.
mysqldump --lock-tables=false -u root -proot --no-data DATABASE table > file_backup.sql
Y esto es todo, feliz programming
Saludos
Alex.