El caso de perder todos los datos de una o varias web por algún hackeo o por errores de disco es uno de las peores pesadillas de cualquier webmaster. Aquí les dejo un tutorial de como realizar correctamente un sistema de copia de seguridad basado en bash en un entorno Linux muy práctico y fácil de poder aplicar a todos los sistemas.

En este ejemplo trabajaremos con una web a medida realizada con php y mysql. Empezamos con el bash que se va a encargar de hacer todo el sistema.

Lo primero que remarco para hacer un buen sistema de copias de seguridad es colcar en una variable la fecha

Lo realizamos de esta forma

d=$(date +%Y-%m-%d)

 

Bien lo segundo que realizo es las copias de seguridad de las bases de datos, aquí siempre tuve el problema que me pedía la contraseña de la base de datos y como en realidad lo que necesitaba que sea automático entonces encontré una solución sencilla capaz incluso se encuentre en la documentación misma del mysql y nunca lo llegue a leer quedaría algo así.

 

mysqldump -u USUARIO -pCONTRASEÑA NOMBRE_BD > DIRECCION_DE_BACKUP.sql

 

Lo seguido seria realizar un comprimido para ahorrar tiempo y espacio al momento de realizar una transferencia a otro equipo

 

tar -zcvf DIRECCION_DE_BACKUP/$d-sql.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO

 

Esto nos dará un resultado de nombre de archivo 2019-12-02.tar.gz

Bien una vez que tengamos el archivo sql comprimido pasamos a comprimir todos los archivos que tiene nuestro sitio web asi que utilizaremos la misma forma de comprimir como lo hicimos con la base de datos.

 

tar -zcvf DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO

 

Esto nos dará como resultado 2019-12-02-NOMBRE_DE_LA_WEB.tar.gz es muy importante que coloques el nombre para poder luego diferenciar.

 

Con eso ya tenemos un sistema de copia de seguridad pero aún no se encuentra terminado ya que si por algún problema de servidor o de disco duro tiene alguna falla pues estaríamos en graves problemas aun. Para esto lo que haremos es utilizar la función SCP que nos trae los sistemas Linux.

Pasamos ahora a la configuración del servidor para eso con las siguientes líneas, en el servidor de producción nos vamos a nuestro home y colocamos lo siguiente.

 

Ssh-keygen –b 4096 –t rsa

 

Esto nos va a generar un .ssh/id_rsa y otro archivo .ssh/id_rsa.pub que serían nuestras llaves publicas y privadas.

Lo que nos sigue es copiar la llave publica a nuestro servidor de copias de seguridad

 

Scp .ssh/id_rsa.pub root@servidor:.ssh/nueva_clave

 

En el lado del servidor de copia de seguridad realizamos lo siguiente nos podemos conectar por medio de ssh desde el servidor de producción para esto.

 

Ssh root@servidor
Cd  .ssh/
Cat nueva_clave >> authorized_keys

 

Luego nos queda asignar los permisos correspondientes

 

Chmod 0700 .ssh/
Chmod 0600 .ssh/authorized_keys

 

Con esto ya tenemos configurado nuestro scp para que no nos pida contraseña cada vez que se conecte.

Ahora estamos listos para poder enviar los archivos al servidor de copias de seguridad y realizamos lo siguiente en nuestro bash

 

scp DIRECCION_DE_BACKUP/$d-sql.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-sql.tar.gz

scp DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-NOMBRE_DE_LA_WEB.tar.gz

 

Nuestro ultimo paso para todo esto es eliminar los archivos generados en todo el sistema de copia de seguridad para servidores Linux para los sistemas web o paginas web.

Utilizamos un rm para todos los archivos de esta manera

 

rm DIRECCION_DE_BACKUP.sql
rm DIRECCION_DE_BACKUP/$d-sql.tar.gz
rm DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz

 

El último paso y más importante que debemos hacer es utilizar la maravillosa herramienta del cron. Con esto estaríamos indicando con que frecuencia realizar la copia de seguridad.

Iniciamos de esta manera en la consola escribimos

sistema de copia de seguridad para sistema web en linux

 

Contrab –e

 

Y colocamos en la última línea lo siguiente:

 

0 */12 * * * /DIRECCION_DEL_BASH.sh

 

Así está configurado para que cada 12 horas todos los días realice la copia de seguridad.

 

Aqui dejo el codigo completo del archivo bash

#!/bin/bash


d=$(date +%Y-%m-%d)

mysqldump -u USUARIO -pCONTRASEÑA NOMBRE_BD > DIRECCION_DE_BACKUP.sql

tar -zcvf DIRECCION_DE_BACKUP/$d-sql.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO

tar -zcvf DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz DIRECCION_DONDE_GUARDAR_COMPRIMIDO
scp DIRECCION_DE_BACKUP/$d-sql.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-sql.tar.gz

scp DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz root@servidor:/DIRECCION_DONDE_GUARDAR_LA_COPIA/$d-NOMBRE_DE_LA_WEB.tar.gz

rm DIRECCION_DE_BACKUP.sql
rm DIRECCION_DE_BACKUP/$d-sql.tar.gz
rm DIRECCION_DE_BACKUP/$d-NOMBRE_DE_LA_WEB.tar.gz

 

 




1 Comentarios

avatar

Luis

Martes 31 de Marzo de 2020 Responder

Asi es como se realiza correctamente una copia de seguridad en un ambiente seguro

Deja un Comentario

Tu dirección de correo no sera publicado. Los campos obligatorios están marcados con *

Nombre *
Correo *
Web