Copias de seguridad automáticas de bases de datos en servidores Linux
AutoMySQLBackup al ejecutarse nos creará o sobreescribirá una copia de seguridad diaria, semanal o mensual de las bases de datos. Después configuraremos en nuestro servidor un Cron para que ejecute el script de forma periódica y automática.
Viernes, 9 Enero 2009 | por Luis A. Serrano | Categoría: Herramientas
Toda página Web dinámica requiere la conexión a una o varias bases de datos y es importante hacer copias de seguridad periódicas. Tenemos herramientas que nos facilitan esta tarea de forma manual aunque lo interesante sería que el propio servidor ejecute un script cada cierto tiempo de forma automática.
De esta forma completaríamos este trabajo e incluso podríamos recibir por correo electrónico la información del proceso y las copias de las bases de datos.
Para ejecutar y automatizar este trabajo vamos a emplear un script de código libre llamado AutoMySQLBackup que al ejecutarse nos creará o sobreescribirá una copia de seguridad diaria, semanal o mensual de las bases de datos que le indiquemos. Después configuraremos en nuestro servidor un Cron (Unix)W para que ejecute el script de forma automática y cuando queramos.
¿Cómo estructura las copias de seguridad?
Cada día se ejecutará AutoMySQLBackup (si se ha instalado en /etc/cron.daily) y usando mysqldump y gzip hará un volcado de las bases de datos especificadas al directorio /backups/daily, cada semana rotará las copias de seguridad diarias así que no deberías tener más de 7 copias de seguridad aquí.
Cada sábado AutoMySQLBackup hará de nuevo una copia de seguridad de las base de datos que hayas elegido pero estas se guardarán en /backups/weekly, y serán rotadas cada 5 semanas, por lo que aquí nunca debería haber más de 5 copias de seguridad.
El primer día de cada mes AutoMySQLBackup creará una copia de seguridad de todas las bases de datos y la pondrá en /backups/monthly. Estas nunca serán rotadas por lo que tú serás el responsable de mantener este directorio en orden. Te sugiero realizar una copia de esta carpeta a tu disco duro local cada mes para que puedas restaurar tus bases de datos si tienes algún fallo en el disco duro del servidor (aunque quizás te interese descargar la carpeta semanal o diaria, depende de la frecuencia de actualización de tu web).
Copia base de datos
Para comenzar descargamos el script Auto MySQLBackup y configuramos los parámetros obligatorios:
# 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 (enviar sólo los logs)
# – files : send log file and sql files as attachments (see docs) (enviar logs y copias de seguridad .sql)
# – 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“
Tenemos otro bloque que podemos configurar de forma opcional:
# 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)
Información tomada de la Web: Kei No Blog
Guardamos el archivo con extensión .sh. Ya podemos subir el script por Ftp a nuestro sitio. Es importante subirlo fuera del espacio www del servidor
Con este script puedes hacer copias de varias bases de datos que estén en un mismo host y con el mismo nombre de usuario, de lo contrario tendrías que subir un script para cada base de datos.
Creamos el Cron
En paneles del control como CPanel o Plesk podemos crear el cron directamente indicándole la ruta del archivo y la periodicidad con la que se ejecutará. La ruta del archivo podría quedar como sigue:
/home/usuariol/public_html/backups/sqlbackup.sh
Si no tenemos una aplicación en nuestro panel de hosting que nos ayude en esta tarea podemos llamar al administrador del hosting para que nos ayude o bien podemos hacerlo nosotros vía consola para lo cual necesitarás tener conocimientos de Shell de UNIXW
Aviso: Para crear el Cron por consola tienes que estar familiarizado con este entorno, de lo contrario es preferible contactar con el administrador del servidor.
Para poder programar estas tareas, lo que debes hacer es iniciar una sesión ssh con tu dominio. Puedes utilizar programas como Putty.
Tienes que introducir esa tarea en un fichero, lo cual puedes hacer mediante el comando vi nombrefichero. Con esa instrucción se abrirá un editor de texto (el editor vi, en este caso) abriendo automáticamente ese fichero predefinido para el usuario.
Las tareas en el Cron se insertan por líneas, de forma que si quieres insertar 4 tareas, tendrás que poner 4 lineas en el fichero. Cada una de esas líneas sigue unos parámetros que le indican al crond cada cuanto tiempo tiene que ejecutarse esa tarea, los días que tiene que ejecutarse, etc…
Una línea del crond tiene el siguiente formato:
minuto hora dia_mes mes dia_semana comando
de forma que estableces el minuto/hora del día a la que quieres que ejecute el comando, el día del mes, el mes del año e incluso el día de la semana. Por ejemplo, si quisieras ejecutar un comando llamado ls (que sirve para listar directorios) todos los días a las 10:30 de la mañana, pondrías esta línea en el crond: 30 10 * * * /bin/ls
Observa que para los parámetros que no tienen opción, se introduce un “*”, que simboliza que no le vamos a dar un valor específico a ese parámetro, por lo que lo ejecutara para todos los posibles valores de ese parametro. En este caso todos los días del mes, todos los meses del año y todos los días de la semana. Para ejecutarlo cada hora, a las medias (0:30, 1:30,…), el día 24 de cada mes, la línea sería la siguiente: 30 * 24 * * /bin/ls
Ahora si que podemos dormir tranquilos sabiendo que siempre podemos restaurar una copia de seguridad reciente de nuestros datos.
También puede interesarte ...
En este video tutorial explicamos brevemente como instalar la aplicación de comercio electrónico ...
Secure Socket Layer es un sistema de protocolos de carácter general que está basado en la aplica ...
Por desgracia todavía queda un largo camino que unifique criterios legislativos respecto al come ...
Ya sabíamos que Google estaba trabajando en el asunto pero ahora nos enteramos según uno de los ...
La seguridad en las transacciones por Internet son el caballo de batalla de muchas empresas que ...

Deja una copia de seguridad diaria. La sobreescribe día a dia. Cuando pasan 7 días crea o sobreescribe una copia de seguridad semanal y cuando cumple el mes crea o sobreescribe una copia mensual.
Hola.
Está genial el manual, poro me quedan algunas dudas.
¿No hay que añadir ningún comando para el cron delante de la ruta del archivo en cpanel?
y otra cosa, al principio decías que:
“AutoMySQLBackup al ejecutarse nos creará o sobreescribirá una copia de seguridad diaria, semanal o mensual de las bases de datos. ”
¿Como se haría para que sobreescriba una base de datos cada día?
Gracias y un saludo, este artículo me puede ser de gran utilidad.