MySQL: Cómo hacer una copia de seguridad de todas las bases de datos

Con este script en bash podremos crear un backup fácil y genérico de todas las bases de datos de un servidor, o de aquellas que le indiquemos. Usando la herramienta mysqldump de MySQL nos aseguramos un volcado de las ‘databases’ que podemos recuperar más adelante a lo bruto usando el comando ‘source’ de mysqladmin, etc. y también garantizamos que las copias no tengan problemas con cachés o inserciones que estén realizándose durante el volcado.

Además, cada base de datos se comprime con gzip, quedando una serie de archivos con extensión “gz” que después se empaqueta en un solo archivo TAR que incluye la fecha en que se ha realizado la copia de seguridad. Llevarte esos archivos TAR o los “gzip” a un lugar seguro, ya sea de forma automatizada o no, es otra historia.

[SCRIPT]
#!/bin/sh
# Crea un snapshot de todas las bases de datos en archivos *.sql.gz
# Las empaqueta en un archivo TAR que incluye la fecha
echo ---------------------------------
echo  mysqlbackup v2   by Juanga 2009
## password mysql (asume usuario root)
MY_MYSQLPWORD=xxxxxx
## usuario:grupo al que forzar todos los
## archivos de MY_PATH_TAR al final del proceso
MY_USER_GROUP=root:root
## Elegir (descomentar) un metodo para
## determinar las bases de datos a dumpear
## metodo 1) especificar las bases de datos
## que se quieren, separados por espacios
###### MY_BACKUP_DB="BASE1 BASE2 BASE3"
## metodo 2) TODAS las bases de datos
###### MY_BACKUP_DB=`find /var/lib/mysql/ -type d -printf "%f\n"`
## Directorio donde dejar el archivo TAR
MY_PATH_TAR=/path/to/carpetadecopias
## Directorio donde dejar los *.sql.gz
## de las bases de datos
MY_PATH_GZ=/path/to/gzfiles
## Un prefijo del nombre del archivo TAR
MY_FILENAME=backupMySQL
## Nombre final del Archivo TAR a generar
MY_BACKUP_FILE=${MY_PATH_TAR}/${MY_FILENAME}\
$(date +"%d-%b-%Y")
## De donde cóger los archivos sql.gz
MY_BACKUP_TAR_PATH=${MY_PATH_GZ}/*.sql.gz
### LISTO
echo
echo Removing old \
${MY_FILENAME}* files...
rm -f ${MY_PATH_TAR}/${MY_FILENAME}*
echo
echo Removing old *.sql.gz files...
rm -rf ${MY_PATH_GZ}/*
echo
echo MYSQLDUMPing databases...
for FF in $MY_BACKUP_DB
do
echo gzipping database $FF to \
${MY_PATH_GZ}/$FF.sql.gz...
mysqldump --opt -u root --password=${MY_MYSQLPWORD} \
--databases "$FF" | gzip -9 -f --rsyncable \
> ${MY_PATH_GZ}/$FF.sql.gz
done
echo
echo Packaging *.sql.gz into \
${MY_BACKUP_FILE}.tar...
# empaquetar backup
tar -cf ${MY_BACKUP_FILE}.tar \
${MY_BACKUP_TAR_PATH}
echo
echo Chowning public files to $MY_USER_GROUP
chown -R ${MY_USER_GROUP} ${MY_PATH_TAR}
echo
echo DB dump finished!
echo
echo Listing ${MY_PATH_GZ}
echo
ls -la ${MY_PATH_GZ}
echo
echo Listing ${MY_PATH_TAR}
echo
ls -la ${MY_PATH_TAR}
echo
echo EOF
[/SCRIPT]

Hago notar que el script no va a funcionar si no se rellenan correctamente las variables necesarias, especialmente la elección del método para elegir las bases de datos. Echa un vistazo al código para saber qué poner en cada caso.

Esta entrada fue publicada en MySQL y etiquetada , , , . Guarda el enlace permanente.

Deja un comentario