Copias de seguridad desde Centos a Mega con Rclone

Saludos a todos los apasionados de las tecnologías web. En esta ocasión les voy a compartir como hacer copias de seguridad desde un servidor Centos hacia una cuenta en Mega. Para eso explicaremos cada paso:

La tarea que se nos presento con un cliente fue hacer el respaldo de su sitio web completo y base de datos en mysql.

La ruta donde esta la web se encuentra en el habitual /var/www/html. En esta ruta crearemos una carpeta backup y dentro de esta carpeta crearemos un archivo backup.sh que contendrá el código para hacer el respaldo. A diferencia de otros post de backup de mysql, en esta oportunidad haremos un respaldo full de cada base de datos por separado.

Creamos la carpeta backup y sus respectivos permisos

# cd /var/www/html
# mkdir backup
# chmod 777 -R backup

Creamos el archivo backup.sh

# touch backup.sh

Ingresamos el código para el respaldo de cada base de datos en mysql

#!/bin/bash

USER="usuario-mysql"
PASSWORD="clave-mysql"

FECHA_ACTUAL=`date +%Y-%m-%d`
HORA_ACTUAL=`date +%H:%M`
ARCH_RESP=$FECHA_ACTUAL-$HORA_ACTUAL


databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`

for db in $databases; do
    if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != _* ]] ; then
       # echo "Dumping database: $db"
        mysqldump -u $USER -p$PASSWORD --databases $db | gzip > $db"_"$ARCH_RESP.sql.gz
    fi
done

Ahora le damos permiso a archivo sh creado

# chmod +x /var/www/html/backup/backup.sh

Hasta este paso ya tenemos el script que hará los backups de mysql. Ahora pasamos a rclone.

Primero nos creamos una cuenta en https://mega.nz y creamos una carpeta backup_sitio que sera la carpeta de destino.

Instalamos rclone

# yum install rclone

Una vez instalado lo configuramos

# rclone config

En el sgte. menú seleccionamos New remote, presionando la tecla n

No remotes found - make a new one
n) New remote
s) Set configuration password
q) Quit config
n/s/q> n

Agregamos un nombre a nuestra unidad remota, en mi ejemplo «remoto»

name> remoto

En el sgte. menú le mostrará todos las unidades o servicios de almacenamiento, escriba mega

Type of storage to configure.
Choose a number from below, or type in your own value
[snip]
XX / Mega
   \ "mega"
[snip]
Storage> mega

En el sgte. menú ingrese su cuenta de correo de mega

User name
user> tucorreomega@correo.com

En el sgte. menú ingresamos seleccionamos la opción y) con la tecla «y» y completamos nuestra clave mega

Password.
y) Yes type in my own password
g) Generate random password
n) No leave this optional password blank
y/g/n> y
Enter the password:
password:
Confirm the password:
password:
Remote config
--------------------
[remote]
type = mega
user = you@example.com
pass = *** ENCRYPTED ***
--------------------

En el último menú confirmarmos con «y» y salimos con la tecla «q»

y) Yes this is OK
e) Edit this remote
d) Delete this remote
y/e/d> y

Con esto hemos creado nuestro nombre «remoto» de origen que lo conectaremos con la carpeta en mega «backup».

Ahora procederemos a crear las tareas programadas que harán el trabajo de ejecutar los backups y enviar a mega.

# crontab -e

Añadimos 3 tareas, el primero ejecuta el archivo backup.sh cada 6 horas. El segundo elimina copias de mysql mayor a 7 dias a los 10 minutos sgtes. y el 3ero envía 10 mins. después con rclone todo el contenido de la carpeta html a mega de manera incremental, solo los archivos creados desde el 01-07-2022 ignorando los ya existentes, creando carpetas vacias y excluyendo archivos de una carpeta especifica..

0 */6 * * * cd /var/www/html/backup && sh backup.sh
10 */6 * * * find /var/www/html/backup/*.sql.gz -mtime +7 -exec rm {} \;
20 */6 * * * rclone sync /var/www/html remoto:backup_sitio --max-age 2022-07-01 --ignore-existing --create-empty-src-dirs --exclude "/carpeta_con_contenido_a_excluir/**"

Con esto ya podemos ahora otra vez descansar tranquilos. Servidos!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *


El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.