You are not logged in.
¡Bienvenido al tutorial "Cómo hacer backup automático de bases de datos"!
Este tutorial te enseñará cómo crear un sistema de backup automático para tus bases de datos, lo que te permitirá proteger tus datos importantes en caso de fallas en el hardware, errores humanos o ataques cibernéticos.
Esta guía demostrará cómo hacer una copia de seguridad automática de las bases de datos MySQL utilizando el script Bash, paso a paso.
¡Prepárate para aprender todo lo que necesitas saber para asegurar tus datos y mantener la tranquilidad!
Roberto Flores
Telegram: @rcfloresh
Grupo de GLPI Español (Telegram): https://t.me/glpisp // Discord: https://discord.gg/NXwp2UjC
Offline
Creación del directorio
Para poder llevar un orden de nuestros archivos, personalmente recomiendo crear un directorio donde este alojado nuestro archivo bash, y donde los backups (copias de seguridad sean guardados luego de ser generados), para hacer esto, debemos hacer uso de los siguientes comandos:
mkdir mysqlbackup
cd mysqlbackup/
mkdir files
Roberto Flores
Telegram: @rcfloresh
Grupo de GLPI Español (Telegram): https://t.me/glpisp // Discord: https://discord.gg/NXwp2UjC
Offline
Configuración de archivo Bash
Ahora crearemos el script bajo el nombre "backup.sh", eso lo haremos usando el editor de texto nano.
nano backup.sh
Cuando se haya agregado, debemos de agregar la linea, con esto le indicas al sistema operativo que invoque el shell especificado para ejecutar los comandos que siguen en el script
#!bin/bash
Ahora deberemos de crear las variables de conexión hacia la base de datos, estas son el usuario, contraseña, y base de datos a la cual haremos la copia de seguridad.
Esta información cambiará de acuerdo a la información de su servidor de base de datos
dbUser="user"
dbPass="password"
dbName="database-name"
Se debe de configurar un directorio en donde la información o copia de seguridad será almacenada. Para ello tambien debemos de declarar una variable.
backupDir="/path/to/your/backup/directory"
Para poder llevar un mejor control sobre la fecha y hora que se creo la copia de seguridad, debemos de crear una variable fecha, en donde estaremos colocando en el nombre del archivo.
dateTime=$(date +"%Y-%m-%d_%H-%M-%S")
Ahora usaremos el comando mysqldump con las credenciales base de datos para crear el archivo de nuestra copia de seguridad.
mysqldump --user=$dbUser --password=$dbPass $dbName > $backupDir/$dbName-$dateTime.sql
Para poder ahorrar espacio en nuestro servidor, se usará el siguiente comando para comprimir la copia recien realizada.
gzip $backupDir/$dbName-$dateTime.sql
Y para finalizar, con el objetivo de no almacenar copias de más de 7 dias procederemos a buscar e eliminar.
find $backupDir-type f -name "*.gz" -mtime +7 -delete
Finalmente tendremos un archivo similar a este:
#!/bin/bash
#Declaración de variables para las credenciales de bases de datos
#Nombre del Usuario
dbUser="user"
#Contraseña del Usuario
dbPass="password"
#Nombre de la base de datos
dbName="database-name"
#Creacion de variable del directorio de archivos generados
backupDir="/home/glpi/mysqlbackup/files"
#Creación de la variable para la fecha
dateTime=$(date +"%Y-%m-%d_%H-%M-%S")
#Comando que genera la copia de seguridad
mysqldump --user=$dbUser --password=$dbPass $dbName > $backupDir/$dbName-$dateTime.sql
#Comando que comprime archivo generado
gzip $backupDir/$dbName-$dateTime.sql
#Comando que elimina archivos antiguos
find $backupDir-type f -name "*.gz" -mtime +7 -delete
Para finalizar cambiaremos los permisos del script para que este pueda ser ejecutable:
chmod +x backup.sh
Roberto Flores
Telegram: @rcfloresh
Grupo de GLPI Español (Telegram): https://t.me/glpisp // Discord: https://discord.gg/NXwp2UjC
Offline
Ejecución de archivo bash
Para efectos de la prueba se puede ejecutar el archivo de la siguiente forma.
Dentro de la carpeta en donde creamos el archivo "backup.sh", deberá de ejecutar el siguiente comando:
sudo bash backup.sh
En la imagen primero se muestra la carpeta files vacia, luego se ejecuta el comando mencionado anteriormente, una vez finalizó revisamos los archivos creados.
Roberto Flores
Telegram: @rcfloresh
Grupo de GLPI Español (Telegram): https://t.me/glpisp // Discord: https://discord.gg/NXwp2UjC
Offline
Configuración de crontab
Si el archivo se ha creado de forma satisfactoria, ahora es momento de automatizar el proceso de backup usando crontab.
Como un pequeño recordatorio un cron se configura de la siguiente manera:
* * * * *
| | | | + dias de la semana (0-6, donde 0 es Sunday, o use los nombres)
| | | +---- meses (1-12)
| | +-------- día del mes (1-31)
| +------------ hora (0-23)
+--------------- min (0 - 59)
Para este ejemplo ejecutaremos nuestra tarea todos los días a las 2AM de la mañana, lo primero que debemos de ejecutar es el comando:
crontab -e
Esto nos abrirá el archivo de configuración de las tareas ejecutadas por medio del cron, luego agregaremos la siguiente linea. La cual indicará que se ejecute el archivo bash previamente realizado, para la copia de seguridad, de esta forma estaremos automatizando la copia de seguridad.
0 2 * * * /path/to/backup_mysql.sh
Para efectos de prueba y dado que mi base es relativamente pequeña lo ejecutaré cada minuto, para que pueda generar unos cuantos archivos de prueba.
Cuando el cron haya sido registrado nos mostrará el mensaje "crontab: installing new crontab". Una vez ejecutada nuestra tarea, estaremos viendo los archivos creados de la siguiente forma:
Roberto Flores
Telegram: @rcfloresh
Grupo de GLPI Español (Telegram): https://t.me/glpisp // Discord: https://discord.gg/NXwp2UjC
Offline
Reservado...
Roberto Flores
Telegram: @rcfloresh
Grupo de GLPI Español (Telegram): https://t.me/glpisp // Discord: https://discord.gg/NXwp2UjC
Offline
Master, Agradecido por el tutorial.
Muy claro y facil de entender.
Lo unico que debes corregir es que -type debe ir separado, pasando de estar asi:
find $backupDir-type f -name "*.gz" -mtime +7 -delete
a esto:
find $backupDir -type f -name "*.gz" -mtime +7 -delete
ya que el script arroja error al tratar de eliminar los registros antiguos.
Saludos desde chile
Offline