Respaldo Autómatico Remoto de Bases de Datos (mysql) con secure copy (scp) y Cron
agosto 4, 2009 at 11:35 Deja un comentario
En este documento se explica cómo desde Linux generar un respaldo para una base de datos mysql y copiarlo a una computadora remota que también corre Linux. (probado en Ubuntu)
Tener respaldos de una base de datos siempre es importante, y estos respaldos deberían ser almacenados en un lugar remoto, como otro servidor por ejemplo.
Para llevar a cabo esta tarea nos valeremos del comando scp de Linux para copiar archivos de manera segura y remota y del administrador de tareas Cron de Unix (disponible en Linux).
Lo primero que necesitamos es que el scp nos deje conectarnos desde el cliente al servidor sin solicitarnos contraseña ya que en caso contrario no podemos automatizar la copia de archivos en un script.
Lo que vamos a hacer es sustituir el uso de una contraseña por el método de criptografía asimétrica en el que se utilizan un par de llaves: una pública y una privada.
Para llevar a cabo lo anterior se deben seguir estos pasos:
-
Desde la Máquina Cliente (que es dónde se va a generar el respaldo de la base) verificamos que el archivo /etc/ssh/sshd_config tenga las siguientes líneas (que de manera predeterminada ya están):
RSAAuthentication yes PubkeyAuthentication yes
- Luego escribimos en consola el siguiente comando para generar las llaves:
# sudo ssh-keygen -t rsa
Se mostrará el siguiente texto preguntando adónde se quiere guardar el archivo que contiene las llaves, de manera predeterminada en /root/.ssh/id_rsa:
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa):
Damos enter y ahora se preguntara por una clave, en este caso la dejamos en blanco por lo que damos enter dos veces, se mostrará información referente a los lugares dónde se almacenaron las claves públicas y privadas.
-
Ahora debemos transferir la clave pública recién generada al servidor remoto, para ello utilizamos el comando ssh-copy-id:
ssh-copy-id -i /root/.ssh/id_rsa.pub usuario@ip_servidor
Se nos pedirá la contraseña, la escribimos y damos enter, a partir de este momento ya no se nos solicitará contraseña al conectarnos a esta computadora, por lo tanto el comando scp ahora puede utilizarse libremente en un script que copie archivos.
Lo siguiente es un apunte, probablemente no necesite realizar lo siguiente: el servidor al que me conecto vía ssh utiliza otro puerto que no es el predeterminado 22 por lo tanto el procedimiento anterior debe hacerse de la siguiente manera, desde consola:
sudo vim /root/.ssh/config
Y añadimos:
Host miServidor Hostname ip.del.servidor.deseado User usuario Port puerto
Luego:
sudo ssh-copy-id -i /root/.ssh/id_rsa.pub miServidor
-
Ahora creamos un script para bash que haga un dump de la base de datos a respaldar, la comprima y la transfiera a otra máquina, para ello creamos un nuevo archivo y agregamos lo siguiente:
#!/bin/bash fecha=$(date +%Y%m%d) mysqldump -u[usuario] -p[contraseña] [nombre_base] > /home/usuario/bd_$fecha.sql bzip2 /home/usuario/bd_$fecha.sql scp /home/vas/bd_$fecha.sql.bz2 [miUsuario]@[ip_servidor]:/home/usuario
Se deben sustituir los campos [usuario] y [contraseña] por el nombre de usuario y contraseña utilizados para conectarse al gestor de base de datos mysql y el campo [nombre_base] por el nombre de la base de datos a respaldar, así mismo [miUsuario] y [ip_servidor] por el nombre de usuario e ip del servidor utilizados anteriormente en el comando sh-copy-id e ignorando los [ ].
Guardamos el archivo con el nombre backup_bases.sh en la ruta /home/usuario/Documentos
-
Ahora vamos a agregar el script como una rutina del sistema con el cron, para ello digitamos en consola:
sudo crontab -e
Y añadimos lo siguiente para que los respaldos se hagan martes a las 10 am:
# m h dom mon dow command 0 10 * * 2 /home/usuario/Documentos/backup_bases.sh
Entrada archivada en:bases de datos, linux, red, servidores, sistemas operativos. Etiquetas:cron, mysql, mysqldump, respaldo remoto, scp.

Trackback este articulo | Suscríbete a los comentarios vía RSS Feed