Cómo hacer un backup automático de las bases de datos

Publicado por 4kstore, Enero 25, 2009, 02:04:19

Tema anterior - Siguiente tema

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

4kstore

Cómo hacer un backup automático de las bases de datos


Cuando nuestras webs o blogs comienzan a tener una cierta importancia para nosotros y nos dejamos horas y horas en crear contenido para los mismos llega un momento en el que tememos que todo el trabajo guardado a lo largo de varios meses se pierda por un error en el hardware del servidor.

Los hostings suelen hacer copias de seguridad regulares de todos sus clientes, pero ya me ha ocurrido un par de veces que debido a un error de hardware las copias de seguridad que había guardadas eran de varios días atrás, con lo que todo el trabajo realizado desde ese día en concreto se pierde sin remedio alguno.

Así que cansado de tener que escribir todo el contenido de nuevo decidí buscar una solución que me permitiese generar respaldos de las bases de datos de mis blogs o webs todos los días y qué se además de guardarse en el propio server me enviaran via email una copia de esas bases de datos.

Hice varias pruebas con distintos scripts hasta que encontré AutoMySqlBackup, sencillo de configurar y con un par de opciones muy interesantes.

Aparte de realizar las copias de seguridad y enviarlas en un archivo comprimido via email es capaz de rotar las copias de seguridad para que sólo se almacenen en el servidor las copias de seguridad con una antiguedad de 7 días.

Es decir, genera backups todos los días de de la semana de todas las bases de datos y cuando vuelve a empezar la semana lo que hace es borrar la copia de seguridad del lunes anterior y generar una nueva. Con ésto evitamos que el server se nos llene de copias de seguridad antiguas que además se nos han enviado via email.

Por otro lado el script hace copias de seguridad semanales y mensuales que también rota cuando se cumple el ciclo.

Vamos a ver que tenemos que cambiar del fichero de AutoMySqlBackup; comentar que el formato del fichero debe tener extensión .sh por lo que hay que eliminar la extensión sobrante con la que lo descargamos.

Citar# Username to access the MySQL server e.g. dbuser
    USERNAME=usuario (aqui ponemos el usuario con el que tenemos acceso al server del hosting)

    # Username to access the MySQL server e.g. password
    PASSWORD=contraseña (contraseña del usuario con el accedemos al hosting)

    # Host name (or IP address) of MySQL server e.g localhost
    DBHOST=localhost (en la mayoría de los casos no se cambia)

    # List of DBNAMES for Daily/Weekly Backup e.g. "DB1 DB2 DB3″
    DBNAMES="base_datos1 base_datos2" (aqui ponemos los nombres de las bases de datos para hacer el backup)

    # Backup directory location e.g /backups
    BACKUPDIR="/home/usuario/public_html/backups" (aqui va la ruta donde se guardarán las copias de seguridad)

    # Mail setup
    # What would you like to be mailed to you?
    # - log : send only log file
    # - files : send log file and sql files as attachments (see docs)
    # - stdout : will simply output the log to the screen if run manually.
    # - quiet : Only send logs if an error occurs to the MAILADDR.
    MAILCONTENT="files" (si ponemos "files" le indicamos que queremos que nos envie por mail todos las archivos generados)

    # Set the maximum allowed email size in k. (4000 = approx 5MB email [see docs])
    MAXATTSIZE="14000" (aqui ponemos el tamaño máximo de adjuntos que admite nuestra cuenta de email)

    # Email Address to send mail to? (user@domain.com)
    MAILADDR="usuario@correo.com"

Del resto de opciones a modificar comentaré las más importantes:

Citar# List of DBBNAMES for Monthly Backups.
    MDBNAMES="all" (indicamos que queremos un backup mensual de TODAS las bases de datos.

    # List of DBNAMES to EXLUCDE if DBNAMES are set to all (must be in " quotes)
    DBEXCLUDE="" (si quisiéramos excluir alguna BD la pondríamos aqui)

    # Include CREATE DATABASE in backup?
    CREATE_DATABASE=yes (Ponemos YES por si en un futuro tenemos que restaurar la BD)

    # Separate backup directory and file for each DB? (yes or no)
    SEPDIR=yes (Si queremos separar en carpetas cada una de las BD que tenemos ponemos un YES)

    # Which day do you want weekly backups? (1 to 7 where 1 is Monday)
    DOWEEKLY=6 (Ponemos que día de la semana queremos que se hagan los backups semanales)

    # Choose Compression type. (gzip or bzip2)
    COMP=gzip (Tipo de compresión para los ficheros generados por el script)

Una vez editado el fichero (ojo, evitar editores del tipo Bloc de Notas o Wordpad) lo subimos al servidor. Recomendado crear una carpeta específica para alojar el script y subcarpeta para los backups.

Ahora nos queda programar el Cronjob desde CPanel (o el panel de control de nuestro hosting). Lo explicaré tal y cómo se hace en CPanel, en otros paneles de control como Plesk es muy similar.



Vamos al link que dice "Cronjobs" hacemos click en él y nos pide que seleccionemos una vista: estandard o avanzada (Tipo Unix). Vamos a la estandard y vemos una vista similar a la de la imagen:

Ahí marcaremos las condiciones en las que se ejecutará el script. En mi caso tengo marcado que el cronjob se ejecutará cada mes, todos los días de la semana, cada día, a las 2 AM y en el minuto 15.

Solo nos queda poner la ruta del script:
/home/usuariol/public_html/backups/sqlbackup.sh

Salvamos el cronjob y listo.

Si queremos probar si funciona el script podemos programarlo la primera vez para que se ejecute cada minuto o cada dos minutos. Si nos llegan los emails con los ficheros de las bases de datos podemos cambiarlo y programarlo cuando queramos.

Si nos llegan los emails con errores habrá que revisar la configuración del fichero y el error que nos devuelve para saber qué hemos hecho mal.


Fuente: http://dogwall.mareinfinitum.net/2008/06/como-hacer-un-backup-automatico-de-las-bases-de-datos/



focojoaco

yo te hago una pregunta, o dos.
1) El script de shell funciona solamente para hosting corriendo linux no?
2) "el Cronjob desde CPanel", supones que el hosting tiene Cpanel y Cronjob
si no los tenes estas frito?

elrosti

Cita de: focojoaco en Enero 29, 2009, 18:51:52
yo te hago una pregunta, o dos.
1) El script de shell funciona solamente para hosting corriendo linux no?
2) "el Cronjob desde CPanel", supones que el hosting tiene Cpanel y Cronjob
si no los tenes estas frito?

1) Si, shell script es solo para servidores Linux.

2) Es correcto.

Saludos.
Yo no lo quería creer..... pero ella me convenció.