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!
Enamorado del blues, la trova y el rock. Un apasionado a tiempo completo de la tecnología, pivoteo y me adapto a cada nuevo paso que se da. Busco continuamente las mejores prácticas y metodologías para asegurar la calidad en el software y los procesos de negocio. Algunas horas las dedico a buscar conocimiento en filosofía y teología.