Copia de seguridad periodica de MySQL
#4
Hola

He creado un nuevo script mas elaborado que con sencillas modificaciones. Puede servir no solo para backup de MySQL, sino que para otras tareas periódicas.

Lo que hace es crear dentro de  la carpeta /share/CACHEDEV1_DATA una carpeta llamada "MySQL" que va a contener copias de seguridad de todas las BBDDs de MySQL en archivos separados.
Además creará una carpeta "diaX" en función del día del mes, además los domingos deja la copia en la carpeta "semanaX" en función de la semana en curso y el primer domingo del mes la deja en la carpeta "mesX" en función del mes en curso.

Para cada copia, lo que hace es:
-comprobar si existe la carpeta, si no existe la crea base.
-comprobar si existe la carpeta del día/semana o mes y si no existe, la crea.
-Comprueba si hay contenido en la carpeta del día/semana o mes de extensión sql y lo borra puesto que son datos antiguos.
-crea la copia del día en archivos separados de extensión sql

He optimizado un poco mas el script inicial para no depender de archivos externos los cuales nos servían de log de actividad.

El script, para ir centralizando todos los que uso, le he dejado en la carpeta /share/CACHEDEV1_DATA/Scripts/MySQLBackUp.sh y es llamado desde el crontab de forma diaria a una hora determinada.

Lo he comentado bastante para que se pueda entender lo que hace, e incluso podéis descomentar algunas líneas para que veáis que actividades va realizando si es que lo ejecutáis por consola.

Evidentemente no lo he podido comprobar a lo largo de un año  [emoji6]


#! /bin/bash
# si vuestra qnap usa otra ruta, has de cambiar CACHEDEV1_DATA por la que tengas
ruta="/share/CACHEDEV1_DATA/MySQL"
dia=$(date +%-d)
dsemana=$(date +%-u)
mes=$(date +%-m)
mes="mes$mes"
if [ ! -d $ruta/ ]; then
# si no existe la carpeta base, la creo
 mkdir $ruta
fi

#compruebo y creo la carpeta del día en curso si no existe
if [ ! -d $ruta/dia$dia/ ]; then
 # no existe la carpeta del $dia y la creo
 mkdir $ruta/dia$dia
else
 #si la carpeta del día existe, borro su contenido
 ls -1 -d $ruta/dia$dia/*.sql | while read archivo
 do
   #echo "ARCHIVO ELIMINADO: ""$archivo"
   rm $archivo
 done
fi
# hago backup de todas las bases de datos en archivos separados
for DB in `/usr/local/mysql/bin/mysql -e "show databases" -u root -pclaveMySQL| grep -v Database`; do /usr/local/mysql/bin/mysqldump -u root -pclaveMySQL $DB --events > "$ruta/dia$dia/$DB.sql"; done

semana=$(((dia+6)/7))
#echo "hoy es $dia y el dia de la semana es $dsemana, semana numero $semana y el mes es $mes"

#compruebo que es domingo
if [[ $dsemana -eq 7 ]]; then

# hoy es domingo y saco la semana del mes
semana=$(((dia+6)/7))

if [[ $semana -eq 1 ]]; then
# compruebo si existe la carpeta del mes, y si no está, la creo como mes+numero del mes
if [ ! -d $ruta/$mes/ ]; then
mkdir $ruta/$mes
fi
# compruebo si mes en curso tiene algo de *.sql y la vacío
ls -1 -d $ruta/$mes/*.sql | while read archivo
do
# echo "ARCHIVO ELIMINADO: ""$archivo"
rm $archivo
done
# copia  el backup de HOY a la carpeta mes en curso
cp $ruta/dia$dia/*.sql $ruta/$mes/

elif [[ $semana -eq 2 ]]; then
# compruebo si existe la carpeta semana2, y si no está, la creo
if [ ! -d $ruta/semana2/ ]; then
mkdir $ruta/semana2
fi
# compruebo si semana2 tiene algo de *.sql y la vacío
ls -1 -d $ruta/semana2/*.sql | while read archivo
do
# echo "ARCHIVO ELIMINADO: ""$archivo"
rm $archivo
done
# copia  el backup de HOY a la carpeta semana2
cp $ruta/dia$dia/*.sql $ruta/semana2/
elif [[ $semana -eq 3 ]]; then
# compruebo si existe la carpeta semana3, y si no está, la creo
if [ ! -d $ruta/semana3/ ]; then
mkdir $ruta/semana3
fi
# compruebo si semana3 tiene algo de *.sql y la vacío
ls -1 -d $ruta/semana3/*.sql | while read archivo
do
# echo "ARCHIVO ELIMINADO: ""$archivo"
rm $archivo
done
# copia  el backup de HOY a la carpeta semana3
cp $ruta/dia$dia/*.sql $ruta/semana3/
elif [[ $semana -eq 4 ]]; then
# compruebo si existe la carpeta semana4, y si no está, la creo
if [ ! -d $ruta/semana4/ ]; then
mkdir $ruta/semana4
fi
# compruebo si semana4 tiene algo de *.sql y la vacío
ls -1 -d $ruta/semana4/*.sql | while read archivo
do
# echo "ARCHIVO ELIMINADO: ""$archivo"
rm $archivo
done
# copia  el backup de HOY a la carpeta semana4
cp $ruta/dia$dia/*.sql $ruta/semana4/
else
# compruebo si existe la carpeta semana5, y si no está, la creo
if [ ! -d $ruta/semana5/ ]; then
mkdir $ruta/semana5
fi
# compruebo si semana5 tiene algo de *.sql y la vacío
ls -1 -d $ruta/semana5/*.sql | while read archivo
do
# echo "ARCHIVO ELIMINADO: ""$archivo"
rm $archivo
done
# copia  el backup de HOY a la carpeta semana5
cp $ruta/dia$dia/*.sql $ruta/semana5/
fi
fi

Como siempre, si veis algún fallo o errata me avisáis por privado para corregirlo.
Un saludo

Agur eta ondo ibili

Ganekogorta (TS-469Pro, TVS-673e, QBoat Sunny, TS-453Be, TR-002 y QHora-301w) Ʀɐɯ0η
  Responder


Mensajes en este tema
Copia de seguridad periodica de MySQL - por Ganekogorta - 05-04-2018, 07:59 PM



Usuarios navegando en este tema: 2 invitado(s)