miércoles, 12 de enero de 2011

Como respaldar bases de datos MySQL con un sencillo script hecho en Bash


Si administras el servidor de tu propio blog o cualquier otra aplicación basada en Web bajo Apache/MySQL/PHP, deberías de contar con un sistema de respaldo que mantenga segura la información almacenada en las bases de datos MySQL. Hay varias soluciones que pueden ayudarte para tal efecto, pero nada tan eficiente como un sencillo script hecho en Bash que me tope en un post de blog. A continuación la belleza tal cual del script:

#!/bin/bash

NOW=`date +"%Y-%m"`;
BACKUPDIR="location/of/your/backup/dir/$NOW";

### Server Setup ###
#* MySQL login user name *#
MUSER="user";

#* MySQL login PASSWORD name *#
MPASS="pass";

#* MySQL login HOST name *#
MHOST="your-mysql-ip";
MPORT="your-mysql-port";

# DO NOT BACKUP these databases
IGNOREDB="
information_schema
mysql
test
"

#* MySQL binaries *#
MYSQL=`which mysql`;
MYSQLDUMP=`which mysqldump`;
GZIP=`which gzip`;

# assuming that /nas is mounted via /etc/fstab
if [ ! -d $BACKUPDIR ]; then
mkdir -p $BACKUPDIR
else
:
fi

# get all database listing
DBS="$(mysql -u $MUSER -p$MPASS -h $MHOST -P $MPORT -Bse 'show databases')"

# SET DATE AND TIME FOR THE FILE
NOW=`date +"d%dh%Hm%Ms%S"`; # day-hour-minute-sec format
# start to dump database one by one
for db in $DBS
do
DUMP="yes";
if [ "$IGNOREDB" != "" ]; then
for i in $IGNOREDB # Store all value of $IGNOREDB ON i
do
if [ "$db" == "$i" ]; then # If result of $DBS(db) is equal to $IGNOREDB(i) then
DUMP="NO"; # SET value of DUMP to "no"
#echo "$i database is being ignored!";
fi
done
fi

if [ "$DUMP" == "yes" ]; then # If value of DUMP is "yes" then backup database
FILE="$BACKUPDIR/$NOW-$db.gz";
echo "BACKING UP $db";
$MYSQLDUMP --add-drop-database --opt --lock-all-tables -u $MUSER -p$MPASS -h $MHOST -P $MPORT $db | gzip > $FILE
fi
done


La mejor parte es que solo necesitas especificar unos parámetros para hacer que el script funcione. Estos incluyen BACKUPDIR (directorio donde hacer los respaldos), MUSER (el usuario para MySQL), MPASS (contraseña del usuario MySQL), MHOST(la dirección IP del servidor MySQL) y MPORT (el puerto de la base de datos MySQL donde esta ejecutándose, comúnmente el 3306).

Puedes ejecutar el script manualmente, o puedes configurar un cron job (tarea en el programa Cron) el cual llevara acabo cronológicamente los respaldos. Para realizar esto, ejecuta el comando crontab –e y agrega la siguiente secuencia (reemplaza la ruta de ejemplo con la ruta actual y el nombre del script):

@daily /path/to/mysqlbackupscript.sh

No olvides establecer permisos de ejecución usando el comando chmod a+x mysqlbackupscript.sh



vía:LINUX MAGAZINE / Dmitri Popov

No hay comentarios.:

Publicar un comentario