Publicidad

Cómo excluir datos de algunas tablas al hacer copias de seguridad de MySQL


Por Alex el 25/01/2023, Comentar el artículo

Comparte este artículo:      




En MySql cuando tenemos bases de datos muy grandes y queremos realizar backups podemos excluir los datos de estas tablas pero incluir la estructura de la tabla.


Para realizar este proceso se tienen que combinar dos comandos

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.



Si te ha gustado el artículo compartelo en:      




Añadir un comentarios:

Nombre:
Email: (no se publica el email)




SIGUENOS EN

ARCHIVO

Publicidad

.