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.