En esta guía te contaremos cómo hacer y programar un backup de los datos de tu servidor con Linux.
Para seguir estos pasos es necesario que tengas acceso root al servidor, y creamos estos scripts geniales en ayuda a usuarios de servidores que manejan su propio server, que deseen resguardar sus datos, por ejemplo, en un disco adicional agregado, y puede usarse en cualquier distribución de Linux.
💡 Si estás alojando tu servidor en WNPower y compraste el addon de disco de backup, entonces lo verás montado en /backup dentro de tu sistema de archivos. Y si no, ¿Qué estás esperando para agregar tu nuevo disco de backup para guardar tus datos?
Esta guía aplica tanto a servidores Cloud VPS como para un Servidor Dedicado, o mismo si mantienes un servidor local (que te recomendamos mudarlo de ahí).
Cloud VPS SSD más simple
¿Cansado de lidiar con tu server? Cloud VPS SSD administrado: cPanel, herramientas exclusivas y un soporte galardonado. ¡Ahora con descuento!
Ver ofertas
Cómo programar un backup en un servidor con Linux
Dividimos esta sección entre archivos y carpetas, y bases de datos MySQL, ya que es muy probable que tu sitio y/o apps utilicen de estos dos recursos para funcionar.
🗄️ Cómo programar un backup de archivos y carpetas
En este script que preparamos listo para usar programará un backup diario de tus contenidos con una retención de 7 días. ✅
- Crea archivo /root/backup_carpetas_diario.sh con el editor de texto de tu preferencia como Nano o Vim:
Variables:
👉 backup_files: En esta variable puedes especificar las carpetas que quieres resguardar, separadas por un espacio.
👉 des: La carpeta de destino donde se guardarán los backups (por defecto: /backup).
🚨DATO IMPORTANTE: Trata de seleccionar carpetas específicas. No hagas backup de más ya que puede generarte problemas de espacio y/o performance
#!/bin/bash
# What to backup.
backup_files="/home /var/www"
# Where to backup to.
dest="/backup"
# Create archive filename.
day=$(date +%A)
archive_file="files-$day.tar.gz"
# Print start status message.
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
# Backup the files using tar.
tar czf $dest/$archive_file $backup_files
# Print end status message.
echo
echo "Backup finished"
date - Ahora guarda el archivo, sal del editor y dale permisos de ejecución con este otro comando a continuación.
chmod u+x /root /root/backup_carpetas_diario.sh
- Ejecútalo una primera vez:
root@local:~# /root/backup_carpetas_diario.sh
Backing up /home /var/www to /backup/files-Thursday.tar.gz
Thu Jan 19 17:11:07 -03 2023
tar: Removing leading `/' from member names
tar: Removing leading `/' from hard link targets
Backup finished - Chequea que el backup se haya creado correctamente. El backup llevará el nombre "files-DIA.tgz"; donde DIA es el día actual.
root@local:~# ls -l /backup/
total 4
-rw-r--r-- 1 root root 3314 Jan 19 17:11 files-Thursday.tar.gz - Ahora crearemos una tarea Cron para que se ejecute todos los días a las 12 de la noche.
👉 Esta tarea guardará un log en /var/log/backup_carpetas_diario.log con el resultado, de manera que puedas controlar luego si se están haciendo las copias correctamente.
echo "0 0 * * * root bash /root/backup_carpetas_diario.sh 2>&1 >> /var/log/backup_carpetas_diario.log" > /etc/cron.d/backup_carpetas_diario
- ¡Todo listo! ✔️ Si todo salió bien, en una semana verás los backups de los últimos 7 días en el punto de montaje /backup.
💡 Puedes verificar el contenido de los archivos ejecutando el siguiente comando:
root@prueba:~# tar -tzvf /backup/files-Thursday.tar.gz
drwxr-xr-x root/root 0 2022-07-28 12:29 home/
drwxr-xr-x root/root 0 2023-01-19 15:10 var/www/
drwxr-xr-x root/root 0 2023-01-19 15:10 var/www/html/
-rw-r--r-- root/root 10671 2023-01-19 15:10 var/www/html/index.html
📦 Cómo programar un backup de las bases de datos MySQL
Hasta aquí aprendimos a crear un backup programado de tus carpetas y los archivos dentro. Ahora faltan las bases de datos que es la otra mitad del trabajo.
- Crea el archivo /root/.my.cnf con este contenido y complétalo con la contraseña de root de MySQL (reemplaza la palabra "contraseña" por la correcta, manteniendo las comillas).
[client]
user=root
password="contraseña" - Crea el archivo /root/backup_mysql_diario.sh con este contenido que ves debajo.
Variables:
👉 backup_dbs: en esta variable especificaremos las bases de datos a resguardar, separadas por un espacio.
👉 des: será la carpeta de destino donde se guardarán los backups (por defecto es /backup).
#!/bin/bash
backup_dbs="test1 test2"
# Where to backup to.
dest="/backup"
# Create archive filename.
day=$(date +%A)
archive_file="mysql-$day.sql.gz"
# Print start status message.
echo "Backing up $backup_dbs to $dest/$archive_file"
date
echo
mysqldump --defaults-extra-file=/root/.my.cnf --skip-comments --add-drop-table --databases $backup_dbs | gzip -9 > $dest/$archive_file
echo
echo "Backup finished"
date - Sal del editor y dale permisos de ejecución de esta manera:
chmod u+x /root /root/backup_mysql_diario.sh
- Crearemos ahora una tarea Cron para que se ejecute todos los días a la 1 de la madrugada en diferido al backup de los archivos.
👋 Esta tarea también guardará un log en /var/log/backup_mysql_diario.log con la salida del comando.
echo "0 1 * * * root bash /root/backup_mysql_diario.sh 2>&1 >> /var/log/backup_mysql_diario.log" > /etc/cron.d/backup_mysql_diario
- ✔️ Si todo salió según lo esperado, en unos días verás las copias de seguridad de tus bases de datos MySQL en /backup nombradas como "mysql-DIA.gz"; donde DIA es el día cuando se realizó el backup.
🔙 Cómo restaurar un backup con el script que acabamos de implementar
Hora de poner a prueba las copias de seguridad que realizamos. Te detallamos a continuación cómo hacer un restore.
🔁 Cómo restaurar archivos o carpetas
- Listamos los backups generados y anotemos el nombre/fecha del que nos interesa.
root@prueba:~# ls -lh /backup/files-*
-rw-r--r-- 1 root root 3.3K Jan 19 00:00 /backup/files-Thursday.tgz
-rw-r--r-- 1 root root 3.3K Jan 20 00:00 /backup/files-Friday.tgz
-rw-r--r-- 1 root root 3.3K Jan 21 00:00 /backup/files-Saturday.tgz - Si quieres revisar las carpetas que tiene dentro cada archivo de backup, puedes ejecutar el siguiente comando sobre el archivo de respado sobre el que queramos trabajar.
root@local:~# tar -tzvf /backup/files-Thursday.tar.gz
drwxr-xr-x root/root 0 2022-07-28 12:29 home/
drwxr-xr-x root/root 0 2023-01-19 15:10 var/www/
drwxr-xr-x root/root 0 2023-01-19 15:10 var/www/html/
-rw-r--r-- root/root 10671 2023-01-19 15:10 var/www/html/index.html - Si deseas restaurar sólo una carpeta en específico (en el siguiente ejemplo sería /var/www), ejecutamos.
root@local:~# tar xvfz /backup/files-Friday.tgz -C / var/www
var/www/
var/www/html/
var/www/html/index.html - También podemos restaurar el backup completo de las carpetas del backup ejecutando:
root@local:~# tar xvfz /backup/files-Friday.tgz -C /
home/
var/www/
var/www/html/
var/www/html/index.html
➡️ Cómo restaurar las bases de datos MySQL respaldadas
Te mostraremos en este apartado cómo restaurar una base de datos desde el backup que programamos.
- Lista los backups y toma nota del nombre del que te interese.
root@local:~# ls -lh /backup/mysql-*
-rw-r--r-- 1 root root 3.3K Jan 19 00:00 /backup/mysql-Thursday.sql.tgz
-rw-r--r-- 1 root root 3.3K Jan 20 00:00 /backup/mysql-Friday.sql.tgz
-rw-r--r-- 1 root root 3.3K Jan 21 00:00 /backup/mysql-Saturday.sql.tgz - Descomprime la copia de seguridad.
gunzip /backup/mysql-Friday.sql.gz
- Nos quedará un archivo .sql en la carpeta de backup:
root@local:~# ls -lh /backup
total 16K
-rw-r--r-- 1 root root 3.3K Jan 20 00:00 files-Friday.tgz
-rw-r--r-- 1 root root 3.3K Jan 20 11:38 files-Saturday.tgz
-rw-r--r-- 1 root root 3.3K Jan 20 11:38 files-Thursday.tgz
-rw-r--r-- 1 root root 1.4K Jan 20 11:30 mysql-Friday.sql - Ejecuta el siguiente comando para restaurar una base en específico (en el ejemplo:, la bases es "base_1").
mysql --defaults-extra-file=/root/.my.cnf --one-database base-1 < /backup/mysql-Friday.sql
- Y si quieres restaurar todas las bases de datos juntas, ejecuta esto:
mysql --defaults-extra-file=/root/.my.cnf < /backup/mysql-Friday.sql
Conclusión final
Hacer backup de tu servidor con Linux es crítico y si no lo estás haciendo, deberías comenzar ya mismo. Nuestra recomendación es que lo hagas en una unidad de disco adicional para que si algo ocurre con el disco de producción, puedas restaurar rápidamente luego de reinstalar el SO. ¡No esperes más! 👍
Esperamos haber podido ayudarte, y si conoces a alguien a quien pueda serle útil esta guía, no dudes en compartirla. 😍
Comentarios
0 comentarios
Inicie sesión para dejar un comentario.