Copia de seguridad periodica de MySQL
#1
Hola

Como ya lo preguntó JoseDTF y tenía pendiente hacerlo para mi uso. He creado un script en bash que hace copias de seguridad de todas nuestras bases de datos de MySQL/MariaDB.

Para ello uso tres archivos:
  1. el script propiamente dicho que hace copia de la base de datos, de nombre MySQLBackup.sh
  2. un archivo de texto donde tengo el listado de todas las copias anteriores, de nombre listado.txt
  3. un archivo de script que borra las copias mas antiguas hasta quedar solo las "n" mas recientes, de nombre borrarMySQLold.sh
El script es muy mejorable por ejemplo evitando el uso de los archivos listado.txt y borrarMySQLold.sh, pero estos nos sirven para saber lo último que se hizo, es efectivo y fácil de entender.

Recordad que al archivo listado.txt hay que darle permisos de escritura para que el script pueda escribirle líneas y que al script secundario ademas de permisos de escritura, hay que dárselos también de ejecución.

El script MySQLBackup.sh es el siguiente:

#! /bin/bash
#defino una variable para tener la fecha y hora de creación
fecha=$(date +"%Y%m%d_%H%M")

#defino la ruta base,

ruta="/share/CACHEDEV1_DATA/"

#defino la ruta donde guardaremos las copias de seguridad

ruta1=$ruta"MSSQL/MySQL"

#defino la ruta donde estará el script secundario

ruta2=$ruta"Scripts"

# defino limite de copias a g
uardar
limite=30

#hago backup de todas las bases de datos con usuario root

/usr/local/mysql/bin/mysqldump -u root -pclavemysql --all-databases > $ruta1/MySQL_$fecha.sql

#listo los archivo de copia con extension .sql y los escribo en el archivo listado.txt

ls -t -1 $ruta1/*.sql > $ruta2/listado.txt

#cuento archivos .sql

fin=$(ls -t -1 $ruta1/*.sql | wc -l)

#creo cabecera de archivo del script secundario
echo "#! /bin/bash" > $ruta2/borrarMySQLold.sh

#añado líneas de archivos a borrar, los mas viejos a partir del número límite
if [ $fin -gt $limite ] ; then
 for ((i=$limite+1;i<=$fin;i++)); do
    linea0=$(echo -n "rm "'"')
    linea1=$(awk "NR==$i{print;exit}" listado.txt)
    linea2=$(echo '"')
    linea="$linea0$linea1$linea2"
    echo $linea >> $ruta2/borrarMySQLold.sh
 done
fi

#Ejecuto archivo con comandos de borrado
$ruta2/borrarMySQLold.sh

Este script lo agrego al crontab de forma diaria y en la carpeta, según el ejemplo, obtendré siempre las últimas 30 copias.
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 - 27-03-2018, 11:55 PM



Usuarios navegando en este tema: 1 invitado(s)