Comó configurar respaldos automaticos con cronjob en amazon ec2 linux ami 2


Recientemente empezamos a darle mantenimiento a varios sitios web y aplicaciones que se ejecutan en servidores algunos con ubuntu y otros con amazon EC2 ami 2 y necesitamos hacer respaldos automacticos una vez o varias veces al dia dependiendo el tipo de aplicación.

En la mayoria de las distribuciones de linux vienen con un cron preinstalado por defecto en el caso de amazon EC2 el servicio viene como crond

Cómo configurar el respaldo automatico en mysql

Creamos el archivo backup-mysql.sh en alguna carpeta de nuestro servidor con el siguiente codigo:

#!/bin/sh
DIR=`date +%m-%d-%y`
DBUSER="username"
DBNAME="dbname"
PASSWORD="PASSWORD"

mysqldump -u $DBUSER -p$PASSWORD --databases $DBNAME > /home/ec2-user/db_backups/$DBNAME.$DIR.sql

El codigo que estas viendo lo unico que hace es ejecutar mysqldump y guardar el archivo SQL en la ruta sin embargo solo se pued ejecutar con sudo sh backup-mysql.sh debemos configurar el cron para que al menos se realice 1 vez al dia

Ejecutamos el siguiente comando para añadir la configuración del cron

sudo crontab -e

Vamos añadir la siguiente linea de codigo en el edito VIM para guardar debes ejecutar el comando wq.

20 14 * * * sh /home/ec2-user/scripts/backup-mysql.sh

el codigo anterior va ejecutar todos los dias a las 14:20 min (hora de mexico) el script para hacer el respaldo automatico

La sintaxis de la entrada crontab debe ser la siguiente:

* * * * * comando a ejecutar
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

Como enviar una notificación del respaldo generado por el cron

Ahora debemos asegurar que los respaldos se estan haciendo todos los dias para esto vamos enviar una notificacion en slack para que nos avice que se acaba de hacer el respaldo automatico añadimos al final del script el siguiente codigo:

#!/bin/sh
DIR=`date +%m-%d-%y`
DBUSER="username"
DBNAME="dbname"
PASSWORD="PASSWORD"

mysqldump -u $DBUSER -p$PASSWORD --databases $DBNAME > /home/ec2-user/db_backups/$DBNAME.$DIR.sql

channel="#general"
text="Se realizo el respaldo automatico de la base de datos  $DBNAME.$DIR.sql";

escapedText=$(echo $text | sed 's/"/\"/g' | sed "s/'/\'/g" )
json="{\"channel\": \"#$channel\", \"text\": \"$escapedText\"}"

curl -s -d "payload=$json" "https://hooks.slack.com/services/YOUR_TOKEN";

Te comparto el siguiente enlace para que veas como configurar un webhook y añadas la url donde debe enviar el hook y llegue la notificacion a tu canal:

El resultado debe ser el siguiente:

En otro tutorial les mostrate como recibir notificaciones si el sitio esta activo o cuanto tiempo falta para que el ssl expire y lo cambien a tiempo.

Ahora solo debemos ejecutar el siguiente comando para que se reinicie el servicio y espera a que sea la hora correcta para que nos llegue la notificacion.

sudo service crond status

Como extra te recomiendo subir el respaldo en amazon S3 o drive estoy preparando un tutorial para subas el archivo a google drive.

Gracias por compartir y comentar nos vemos en otro tutorial!