Respaldo de todas las bases de datos del servidor MySQL en un solo script – Bash

00¡Hola a todos! El siguiente script bash lo que pretende es realizar un respaldo de todas las bases de datos del servidor MySQL (GNU/Linux por supuesto) en un solo script y sin mucha complicación; lo que hace es verificar el número de bases de datos que tiene y, con base en éste dato, se crea un bucle para ir respaldando base de datos por base de datos. Lo bonito del script es que de una vez se va comprimiendo el respaldo y luego se transfiere a su destino (otro servidor, recurso compartido, etc.).

Sí, sé que es un script sencillo que se puede realizar desde cero con un poco de tiempo, pero hay pequeños detalles que se olvidan y pues me servirá a mí más que todo como un recordatorio de cómo se hace y no perder el tiempo en hacerlo de cero.

Explico cada parte mediante los colores:

  • Azul. Se establece una variable con la fecha/tiempo actual, de tal manera guardar ésta información en el nombre del archivo.
  • Verde. Verificamos el # de BD’s que tiene nuestro servidor y, con base a éste, haremos el bucle para ir haciendo el respaldo de cada una de ellas. En ésta línea coloco las credenciales (usuario y clave) de acceso al MySQL en línea, pero esto no es adecuado… se puede hacer lo mismo que se verá más adelante.
  • Rojo. Se genera el respaldo de la BD en cuestión. Lo especial de éste paso es que, en lugar de colocar el usuario y contraseña explícitamente en el script, se hace referencia al archivo auth-mysql.cnf , el cual es el que contiene dicha información. En ésta misma línea de comando, comprimimos el respaldo resultante en formato gzip. El contenido del archivo .cnf sería más o menos así (Credenciales de acceso al MySQL como root):
[client]
user=root
password=Mi_Clave2
host=localhost
  • Morado. Copiamos el respaldo de la BD a un recurso compartido de algún Windows. De igual forma que el anterior punto, las credenciales de acceso las dejamos en una archivo de texto (/home/usuario/auth-samba.txt) con el siguiente contenido (Credenciales de acceso al recurso compartido de un Windows):
username=administrador
password=Mi_Clave3
domain=ingdiaz.org
  • Lo demás es para finalizar el bucle y eliminar el respaldo que quedó en el server local (dado que ya lo tenemos en el otro servidor  y para efectos de liberar espacio es mejor eliminarlo).

A continuación, el contenido del script:

#!/bin/bash
fecha=$( date +%Y%m%d-%H%M%S )
mysql -u usuario --password="Mi Clave" -B -N -e 'show databases' | while read db; do
    echo "Respaldando ${db}..."
    mysqldump --defaults-extra-file=/home/usuario/auth-mysql.cnf --lock-tables=false ${db} | gzip -c -9 > /opt/backup/bd-${db}-${fecha}.gz
    echo "Enviando a recurso compartido"
    smbclient //servidor1/respaldos -A /home/usuario/auth-samba.txt -c 'put /opt/backup/bd-'${db}'-'${fecha}'.gz bd-'${db}'-'${fecha}'.gz'
    #scp -u usuario -pMiClave '/opt/backup/mibase-'${db}'-'${fecha}'.gz' usuario2@server2://tmp
done
rm /opt/backup/*
exit 0

También dejé «comentareado» la forma de copiar éste respaldo mediante scp , si digamos se quiera guardar en un servidor GNU/Linux.

¡Saludos!

Comentarios por Facebook

comentarios

5 respuestas a “Respaldo de todas las bases de datos del servidor MySQL en un solo script – Bash”

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*