Copia de seguridad de la BD Mysql hacia un servidor FTP

Imagen de plcabgut

Tema: 

Hace mucho que no pongo nada de lo que he hecho asi que
voy a postear un script que uso para las copias de seguridad de la base de datos que tengo en un servidor.
los datos del servidor son:
Linux ubuntu12-XXXX 3.2.0-29-generic-pae #46-Ubuntu SMP
Apache/2.2.22 (Ubuntu)
mysql 5.5.24-0ubuntu0.12.04.1

Fuente: http://www.cyberciti.biz/faq/ubuntu-linux-mysql-nas-ftp-backup-script/ entre otras aunque lo he tenido que adaptar un poco para mi servidor.

Durante el desarrollo la primera linea era #!/bin/bash -x para debugear luego he quitado.


#!/bin/bash
### MySQL Server Login Info ###
MUSER="root"
MPASS="pwd_root_bd"
MHOST="localhost"
MYSQL="mysql"
MYSQLDUMP="mysqldump"
GZIP="gzip"
# Carpeta sobre la que realizo los backups dentro del servidor
BAK="/var/backups/mysql"
# Para llevar registro del las copias en el LOG
LOG="/var/log/backups.log"
### FTP SERVER Login info: Usuario/Password IP_servidor:Puerto ###
FTPU="usuario_ftp"
FTPP="pwd_ftp"
FTPS="10.10.10.66"
FTPPORT="9876"
# Fecha para anadir al nombre del fichero y para crear la carpeta destino en el servidor FTP para no mezclar copias de dias distintos
NOW=$(date +"%d-%m-%Y")

echo "" >> $LOG
echo "_______________________________________________" >> $LOG
echo "Inicio del backup de la BD Mysql $NOW $(date +"%T")" >> $LOG

# Borro los fichero de backup previos.
# En caso de fallo de la maquina siempre tendre alli
# los ficheros del ultimo backup
cd $BAK
rm *.gz
echo "Borrado de backups anteriores de $BAK" >> $LOG

# Recorro las bases de datos haciendo un fichero con su contenido
# --single-transaction Me permite hacer la copia de la base de datos evitando los bloqueos
echo "Creacion de los ficheros de cada base de datos:" >> $LOG
DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases')"
for db in $DBS
do
FILE=$BAK/$db.$NOW.gz
$MYSQLDUMP --single-transaction -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE
echo -e "\t$db\t->\t$FILE" >> $LOG
done

# Realizo una conexion por FTP a otro servidor donde almaceno
# las copias de seguridad de la base de datos
# cada una se almacena en una carpeta correspondiente al dia en que se hizo
ftp -in <> $LOG

Los resultados del fichero de log en /var/log/backups.log:



__________________________________________
Inicio del backup de la BD Mysql 15-04-2014 10:04:34
Borrado de backups anteriores de /var/backups/mysql
Creacion de los ficheros de cada base de datos:
information_schema -> /var/backups/mysql/information_schema.15-04-2014.gz
DESA -> /var/backups/mysql/DESA.15-04-2014.gz
DPSA -> /var/backups/mysql/DPSA.15-04-2014.gz
mysql -> /var/backups/mysql/mysql.15-04-2014.gz
performance_schema -> /var/backups/mysql/performance_schema.15-04-2014.gz
phpmyadmin -> /var/backups/mysql/phpmyadmin.15-04-2014.gz
Copias de seguridad trasferidas al servidor ftp://10.10.10.66/15-04-2014/

La ejecucion esta planficada dentro del cron
segun sigue

# Backup
0 0 * * * root /usr/share/DPSA/copiabd.sh >> /dev/null 2 >> /dev/null

Como colofón he metido la carpeta del servidor FTP donde se hacen las copias en la nube.

Para restaurar algun fichero de copia de base de datos hacemos:

Copiar el fichero DPSA.15-04-2014.gz a restaurar en el servidor de BD en /tmp
# ir a la carpeta /tmp
cd /tmp
gunzip DPSA.15-04-2014.gz -> el resultado será DPSA.15-04-2014
# cargamos el fichero en la base de datos DPSA
mysql --user=root --password=pwd_root_bd DPSA < DPSA.15-04-2014

Comentarios

Excelente, algo así hacía yo

Imagen de Epe

Excelente, algo así hacía yo pero además le hacía al vuelo, es decir, no hacía el respaldo inicialmente hacia el disco sino que de una le enviaba al server remoto.

para esto usaba ncftpput ahora no tengo un ejemplo a la mano pero no es difícil modificar incluso este mismo que tienes

Saludos
epe

EcuaLinux.com

+(593) 9 9924 6504

Servicios en Software Libre