Bueno este seria el script a ejecutar. Tenemos que tener en cuenta que es necesario tener montada la un unidad de NAS en una carpeta local y configurar el crontab para que se ejecute cuando consideremos necesario.
#!/bin/bash
# Script de terminal para realizar backups de todas las Bases de Datos de MySQL
# Volcado cada hora al servidor Nas /nasServer/mysql
# Descripcion detallada de los datos:
# Directorio: /nasServer/mysql/yyyy-mm-dd
# Fichero: mysql-DBNAME.2009-07-23-14:23:40.gz
# Ruta completa: /nasServer/mysql/yyyy-mm-dd/mysql-DBNAME.2009-07-23-14:23:40.gz
# -------------------------------------------------------------------------
# GNU GENERAL PUBLIC LICENSE
# Version 3, 29 June 2007
#
# Copyright (C) 2007 Free Software Foundation, Inc.
# Everyone is permitted to copy and distribute verbatim copies
# of this license document, but changing it is not allowed.
# -------------------------------------------------------------------------
# Ultima actualización: Jul-23-2009 - Asegurarse que NAS esta realmente montado en $NAS
# -------------------------------------------------------------------------
NOW=$(date +"%Y-%m-%d") # Formato yyyy-mm-dd
FILE="" # Uso en el bucle
NASBASE="/nasServer" # Punto de montage de NAS
BAK="${NASBASE}/mysql/${NOW}" # Ruta del directorio backup en $NAS
### Configuración del Server ###
#* Usuario de MySQL *#
MyUser="root"
#* PASSWORD del usuario de MySQL *#
MyPass="PASSWORD"
#* Host de MySQL *#
MyHost="127.0.0.1"
#* Binarios de MySQL *#
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
GZIP="$(which gzip)"
# Asegurarse que nas esta realmente montado
mount | awk '{ print $3}' |grep -w $NASBASE >/dev/null
if [ $? -ne 0 ]
then
echo "Error: NAS no montado en $NASBASE, por favor monta el Servidor NAS el un direcotio local local y vuelve a intentarlo."
exit 99
fi
### NAS debe montarse de forma avanzada ###
# Se asume que /nasServer esta montado via /etc/fstab
if [ ! -d $BAK ]; then
mkdir -p $BAK
else
:
fi
# Obtener la lista de todas las BBDD
DBS="$($MYSQL -u $MyUser -h $MyHost -p$MyPass -Bse 'show databases')"
# Comenzar volcado de la base de datos una a una
for db in $DBS
do
FILE=$BAK/mysql-$db.$NOW-$(date +"%T").gz
# Comprimir todas los ficheros con gzip.
$MYSQLDUMP -u $MyUser -h $MyHost -p$MyPass $db | $GZIP -9 > $FILE
done
Comentarios