Automatizar copias de seguridad de MySQL y sitios web con Bash
Las copias de seguridad son una de las tareas más importantes en la administración de servidores. Un fallo de hardware, un error humano o un ataque informático pueden provocar la pérdida de datos críticos. Por esta razón, es recomendable automatizar los respaldos de sitios web y bases de datos.
En este artículo presentamos un script Bash sencillo que permite:
- Realizar una copia de seguridad de una base de datos MySQL.
- Comprimir los archivos de un sitio web.
- Transferir automáticamente los respaldos a un servidor externo.
- Eliminar los archivos temporales una vez finalizado el proceso.
#!/bin/bash
# Archivo BASH de respaldo
# Delarosa
# 12.04.2024
####### Fecha y rutas #######
fecha=$(date +%Y-%m-%d-%H-%M)
nombre_respaldo=''
ruta_root=''
ruta_web=''
####### Datos de la base de datos ########
nombre_bd=''
usuario_bd=''
contrasena_bd=''
####### Servidor de respaldo #######
servidor=''
usuario_servidor=''
contrasena_servidor=''
#####################################
# Inicio de la copia de seguridad #
#####################################
####### Definir ruta inicial !!! #######
cd ${ruta_root}
####### Respaldar base de datos #####
mysqldump -u ${usuario_bd} -p${contrasena_bd} ${nombre_bd} > ${nombre_respaldo}_${fecha}.sql
####### Respaldar datos #######
cd ${ruta_web}
zip -r ${nombre_respaldo}_${fecha}.zip * .htaccess
mv ${nombre_respaldo}_${fecha}.zip ${ruta_root}
cd ${ruta_root}
####### Subir todo al servidor ######
curl -T ${nombre_respaldo}_${fecha}.sql -u${usuario_servidor}:${contrasena_servidor} ${servidor}
curl -T ${nombre_respaldo}_${fecha}.zip -u${usuario_servidor}:${contrasena_servidor} ${servidor}
####### Eliminar archivos antiguos #######
rm *.zip
rm *.sql
echo "#########################################"
echo "# #"
echo "# Todo respaldado en servidor externo #"
echo "# Por favor verificar ... #"
echo "# #"
echo "#########################################"Variables de configuración – Bash
Antes de ejecutar el script es necesario configurar algunos parámetros:
fecha=$(date +%Y-%m-%d-%H-%M)
nombre_respaldo=''
ruta_root=''
ruta_web=''Estas variables definen la fecha utilizada en los nombres de los archivos, el nombre del respaldo y las rutas de trabajo.
Para la base de datos se utilizan las siguientes variables:
nombre_bd=''
usuario_bd=''
contrasena_bd=''Y para el servidor de almacenamiento externo:
servidor=''
usuario_servidor=''
contrasena_servidor=''Respaldo de la base de datos
El script utiliza mysqldump para exportar el contenido completo de la base de datos MySQL:
mysqldump -u ${usuario_bd} -p${contrasena_bd} ${nombre_bd} > ${nombre_respaldo}_${fecha}.sqlEl resultado es un archivo SQL que contiene toda la estructura y los datos de la base de datos.
Compresión de los archivos del sitio web
Posteriormente se crea un archivo ZIP con todos los archivos del sitio web:
zip -r ${nombre_respaldo}_${fecha}.zip * .htaccessLa opción -r permite incluir todos los directorios y subdirectorios de forma recursiva.
Transferencia al servidor de respaldo
Una vez generados los archivos, el script los envía a un servidor remoto mediante curl:
curl -T ${nombre_respaldo}_${fecha}.sql -u${usuario_servidor}:${contrasena_servidor} ${servidor}
curl -T ${nombre_respaldo}_${fecha}.zip -u${usuario_servidor}:${contrasena_servidor} ${servidor}De esta manera los respaldos se almacenan fuera del servidor principal, aumentando la seguridad frente a fallos o incidentes.
Limpieza automática
Después de la transferencia, los archivos locales son eliminados para evitar que ocupen espacio innecesario:
rm *.zip
rm *.sqlAutomatización con Cron
Para que el proceso se ejecute automáticamente cada día, se puede añadir una tarea programada mediante cron.
Ejemplo para ejecutar el script todos los días a las 03:00 de la madrugada:
0 3 * * * /ruta/al/script/backup.shVentajas de esta solución
- Automatización completa del proceso de respaldo.
- Copia simultánea de archivos y base de datos.
- Almacenamiento externo de los respaldos.
- Reducción del riesgo de pérdida de datos.
- Implementación sencilla en cualquier servidor Linux.
Conclusión
Este script Bash ofrece una solución práctica y eficiente para proteger sitios web y bases de datos MySQL. Aunque se trata de una implementación sencilla, cubre los aspectos fundamentales de una estrategia de respaldo automatizada: generación de copias, almacenamiento externo y limpieza automática.
Para entornos de producción se recomienda complementar esta solución con cifrado de archivos, retención de múltiples versiones y notificaciones automáticas por correo electrónico para verificar el éxito de cada respaldo.
