Logo
You
Code

Realizar Backup de muestras bases de datos MySql

Autor YouCode - http://www.youcode.com.ar/linux/realizar-backup-de-muestras-bases-de-datos-mysql-308

Simple script que permite hacer backups automáticos de todas las bases de datos de nuestro MySql , este script fue probado y esta corriendo en un Linux Debian Squezee.

Ya sabemos que tenemos muchos script para realizar los backups, en esta ocacion podemos usar este script para hacer backup de nuestras bases de datos en cuaqluier servidor, solo basta con poner el ip o dominio y listo.

Relizado en Debian Squezee x64.

Que es lo que hace?

1- Creamos una carpeta para poner los backups.
2- Dentro de esta (punto 1) creamos carpetas para cada dia
3- Cada vez que se ejecute el script, borrara los archivos con mas de 3 dias para evitar tener cientos de backups.
4- MySqlDump a medida que se realiza el backup de cada base, comprimimos con gzip

El script ejecuta una consulta SQL ( show databases) para asi tener todas las bases para hacer el backup, luego en un bucle bamos haciendo el mysqldump de cada base, mysqldump tiene en cuenta los triggers , vista,funciones y procedimientos almacenados, no los SCHEDULERS que pudieran existir en nuestra base.

Una vez realizado, le damos los permisos necesarios de ejecucion al script y podemos ponerlo en /etc/cron.daily para que se ejecute diariamente, sino, pueden ponerlo en su crontab para que se ejecute a la hora que ustedes prefieran, en mi caso estando en /etc/cron.daily se ejecuta a las 6AM.

Vamos al Script....
#!/bin/bash
#Script para backapear las bases en mysql

#Variables
DBHOST="tu.server.com";
USER="root";
PASS="tu_clave";

QUERY="SHOW DATABASES;";
DESTINO="/backupmysql/";
DESTINODIA=$(date +"%d-%m-%Y");

#Elimino todos los archivos con mas de 3 dias
find "$DESTINO" -type d -ctime +3 | xargs rm -rf

#Si no existe la carpeta destino, la creamos
if ! [ -d "$DESTINO" ];
then
    mkdir "$DESTINO";
fi

#Verifico si la carpeta del dia existe, sino la creo
if ! [ -d "$DESTINO$DESTINODIA" ];
then
    mkdir "$DESTINO$DESTINODIA";
fi

#Ejecuto el query para obtener todas las bases de datos
#Notar -ss y -N , esto hace que no tengamos los nombres de campos en el resultado del query
result=$(mysql -h "$DBHOST" -u "$USER" -p"$PASS" -ss -N -e "$QUERY");

#Ejecuto mysqldump para cada base y comprimo en gzip cada archivo
for row in $result
do
    #Comienzo el dump de las bases de datos y las guardo en el destino
    basegz="$DESTINO$DESTINODIA/$row.sql.gz";
    dump=$(mysqldump -h "$DBHOST" -u "$USER" -p"$PASS"  --routines --triggers $row | gzip > ${basegz});
done
http://www.youcode.com.ar/linux/realizar-backup-de-muestras-bases-de-datos-mysql-308