Script Backup MYSQL Databases

En todo servidor propio es necesario preocuparse por disponer de los backups necesarios para restaurar los sistemas. Esto incluye:
  • Codigo fuente ( GIT, github, gitlab )
  • Archivos producidos por los usuarios ( AWS S3 )
  • Base de datos
Mantener seguras, optimizadas y perfectamente backupeadas ( existe esa palabra ? ) las base de datos no es una tarea facil ni despreciable, sino preguntenle a @gitlab. Existe varias formas de pago para realizarlo todas super optimas, pero de pago "extra"
  • Microsoft Azure, empezando desde 80USD mensuales
  • AWS RDS, empezando desde 10.5USD mensuales
  • Google Cloud SQL, empezando desde 8USD mensuales
Todas estas opciones nos permiten tener varias bases de datos y nos aseguran disponibilidad, seguridad y actualizaciones. Si por el contrario nuestra configuración no va por disponer de un servidor de base de datos separado pues bien necesitaremos ocuparnos nosotros mismos de las operaciones de rutina del servidor, sobre todo de los backups. El siguiente script es un procedimiento de backup automatizado que suelo utilizar
databases=`mysql -e 'show databases;' | tr -d "| " | grep -v Database | grep -v information_schema | grep -v performance_schema`

fecha=` date +%Y%m%d`
mkdir -p /backup/$fecha

fechaold=`date -d "7 day ago" +%Y%m%d`

rm /backup/$fechaold -R

for db in $databases; do
 
 if [ -f /backup/$db.clear ]; then
 mysql $db < /backup/$db.clear
 fi
 mysqldump $db > /backup/$fecha/$db.sql
 tar -czf /backup/$fecha/$db.tar.gz backup/$fecha/$db.sql
 rm /backup/$fecha/$db.sql
done
Ahora debemos configurar el script para que se ejecute todos los dias a una hora especifica
crontab -e

0 5 * * * bash backup.sh
Aunque el script ubique los backups en el directorio de mayor seguridad de nuestro servidor ( root ), es recomendable ubicar una copia en otro lugar para evitar cualquier contingencia. Este otro lugar, podria ser otro servidor encargado de gestionar los backups de varios servidores o incluso una maquina personal local. Para configurarlo deberemos habilitar el acceso por ssh de la maquina que guardara los backups
0 6 * * * scp -r backup@servidor.com:/backup/`date +%Y%m%d` .

Add new comment