Autor Tema: Script BASH para respaldar una base de datos MySQL y enviarla por email.  (Leído 4231 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado rdoggsv

  • Administrator
  • The Communiter-
  • *
  • Mensajes: 6530
  • "Once you go arch , u never go back"
    • SV CommunitY
Ok queridos communiters el dia de hoy me levante con ganas de hacer algo nuevo para respaldar la base de datos de la comunidad.

Resulta que he estado haciendo los respaldos y los he estado moviendo al hosting en donde estaba antes el foro , pero ese hosting vence en 2 meses, asi que me puse a investigar acerca de otras partes en donde pudiera almacenar este archivo.

Entonces me dije a mi mismo ! si tengo gmail porque no le saco mas provecho del que ya le estoy sacando :D , asi es que he optado por mandar los backups hacia mi cuenta de gmail.

Ahora bien Gmail tiene como maximo tamaño de los attachments 10M , el backup de la comunidad anda rondando los 60 mb en archivo .sql, una vez esta en gzip ocupa un aproximado de 25mb, asi es que tengo que hacer algo al respecto para repartir los archivos en varios pedazos.

Una vez comence la investigación llegue a estos dos documentos que me han sido muy utiles

Código: [Seleccionar]
http://www.sematopia.com/?p=61 Backup en PHP y la envai por correo con el mismo php, requiere unas librerias de PEAR activas.

Código: [Seleccionar]
http://www.oscarm.org/news/phpdevel/543.php Respaldo de base de datos y envio por correo en BASH , requiere mutt o algun cliente de linea de comandos para enviar correos , yo opte por instalar mutt

Muy bien yo estoy de acuerdo con el autor del segundo documento en donde comenta que cree que para que poner a trabajar el PHP en algo que se puede hacer por consola y se deja de un lado el PHP.

Asi es que tome el script del segundo articulo y lo modifique a mi gusto para que hiciera pedazos de 8M y los enviara por correo , lo cual fue un exito :D , aqui se los dejo.

Código: [Seleccionar]
#!/bin/bash

#Backup your MySQL database and have it mailed to you
#requires mutt or another command line email client

if [ -z "$1" ]
then
    echo "Database name expected as the first parameter"
    exit
fi

if [ -z "$2" ]
then
    echo "Recipient expected as second parameter"
    exit;
fi

if [ -z "$3" ]
then
        echo "Usuario esperado como tercer parametro"
        exit;
fi

if [ -z "$4" ]
then
        echo "Contrasenia esperada como cuarto parametro"
        exit;
fi

# config
tmp="/tmp"
db_user=$3
db_pw=$4
db_name=$1
db_host="localhost"
recp=$2
today=`date +%Y-%m-%d`
mysqldump_opts="--add-drop-table -acQq"
# email settings
subject="DB Backup for $1"
#sql_file=$tmp/$db_name.$today.sql
sql_file=$db_name.$today.sql
#gzip_file=$tmp/$db_name.$today.sql.gz
gzip_file=$db_name.$today.sql.gz
filepiece=dbbackup
# create the backup
mysqldump $mysqldump_opts -u $db_user -h $db_host -p$db_pw $db_name > $sql_file

#create the gzip'd attachment
gzip $sql_file

#split the gzip into 8M size files
split -b 8m $gzip_file $filepiece

#send the mail
#we could also scp it offsite instead (better)
for file in $filepiece*; do
echo "Automated database backup" | mutt -a $file -s "$subject" $recp
done

#delete temp file
rm $gzip_file

#Eliminar las partes
for file in $filepiece*; do
rm $file
done

Espero le sirva a mas de alguno de uds  :thumbsup:

REcuerden que este script solo sirve en maquinas con linux !!  :yahoo:
« Última Modificación: agosto 26, 2006, 12:49:13 pm por rdoggsv »