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` .
Quote

Como deshabilitar el password en linux

Usar password para acceder a sistemas remotos tiene varias desventajas:

  1. Generar una clave fuerte suele ser complicado y siempre tendemos a usar claves basadas en palabras conocidas faciles de recordar ( aunque cambiemos ciertos patrones )
  2. Mientras más facil de recordar mas inseguro estara nuestro sistema find more.

Una forma segura de acceder a sistemas remotos es usar una clave ssh.  Eso si, no olvidar borrar el password de nuestra cuenta ( asi solo sera accesible desde el equipo que tiene la clave ssh )

passwd  -d root