Páginas

martes, 10 de mayo de 2011

Respaldar basedatos MySQL

Después de instalar MySQL, php5, apache2, phpMyAdmin y el gestor de contenidos joomla! (versión 1.6) corriendo en una máquina linux, realizar copias de seguridad de la base de datos y mantener las últimas 10, cron y este script serán suficiente.
En un CMS el contenido y continente son independientes y es en la base de datos donde se guarda el contenido del sitio. Cabe recordar que desde phpMyAdmin es posible realizar copias y restaurar base de datos.

Script original modificado.
Autores Script: Mauricio Vergara y Carlos Molina de la Universidad Técnica Federico Santa María de Valparaiso, hace mucho, mucho tiempo.

#################Inicio script##############
#!/bin/bash
#mysql backup
# declaracion de variables
EMAIL="admin@misitio.com"
HOST="localhost"
DB="joomla16"
USER="dina45r3_jo151"
PASSWD="8vb#4uA*7Sv"
DIR="/opt/backup"
FECHA="$(date +%Y.%m.%d)"
CONT=10
FILE="$DIR/testin-bak-$FECHA.sql"
MAQ=$(uname -n)
GZIP="1" #0 no, 1 yes

# comprobar que existe $DIR y si no existe crearlo
# con permiso rwx solo para root
if [ ! -d $DIR ] ; then
    mkdir -p $DIR &> /dev/null
    chmod 700 $DIR &> /dev/null
fi

# Haciendo el Dump
mysqldump --add-drop-table -h$HOST -u$USER -p$PASSWD $DB > $FILE 2> $DIR/error

# comprimir el archivo resultante
if [ "$GZIP" = "1" ] ; then
   gzip -9 $FILE &> /dev/null
fi

# cuantos backups existen?
num=$(ls $DIR/*.sq* | wc -l) &> /dev/null

# dejando solo los $CONT archivos
cd $DIR
while ( [ $num -gt $CONT ] ); do
   rm -f $(ls -t | tail -n 1)
   num=$(ls $DIR/*.sq* | wc -l) &> /dev/null
done

# enviar email si hay erro en $DIR
tam_error=$(du $DIR/error|cut -d '/' -f 1)

if ( [ $tam_error -ne 0  ] ); then
    echo -e "\nError (auto)" >> $DIR/error
    cat $DIR/error|mail -s"Backup :(" $EMAIL
fi
##################Fin script##################

Permisos de ejecución al archivo
# chmod +x mysql.backup.sh

  Para ejecutar todos los días a las 8:00 de la mañana:
# mv mysql.backup.sh /opt/backup/mysql.backup.sh
# export EDITOR=vim
# crontab -e
# 0 8 * * *  /opt/backup/mysql.backup.sh
# :wq

Pasan de las 8:00 A.M. Ejecuto el script por primera vez. (Si deseo ejecutarlo nuevamente durante el mismo día tendré que borrar manualmente el realizado con anterioridad, vigilando que corresponda a la fecha deseada).
# ./mysql.backup.sh

Para comprobar que la copia ha ido bien entro en phpMyAdmin y desde la pestaña exportar realizar una copia de la basedatos comprimida con gzip. Al comparar ambos dos archivos comprueba que son idénticos. Si no, revisa que los parámetros user db passwd sean correctos. :-)

Linux es genial!.

No hay comentarios:

Publicar un comentario