Jueves, 14 de septiembre de 2006
Mantener una copia de seguridad periódica de tu blog / base de datos
Hoy en este blog sobre Palm nos centraremos más en la parte ‘blog’ que en la parte ‘Palm’. Creo que lo que viene a continuación puede ser interesante para bastante gente, incluso aquellos que no tienen un blog sino otro tipo de servicio o sitio web que use bases de datos, ya sean portales, foros, etc.
Hace unos días como sabéis actualicé la versión de WordPress (software CMS con el que funciona este blog) a la versión 2.0.4, que está resultando estable y para nada problemática. Sin embargo, sí que ha surgido un problema. Vayamos por partes.
WordPress trae por defecto un plugin para hacer copias de seguridad periódicas de la base de datos, a partir de las cuales se pueden recuperar todos los posts, comentarios, y demás información tras un desastre, o clonar el blog completo en un nuevo servidor. Su nombre es wp-db-backup y hace un trabajo genial, con la posibilidad de guardar la copia de seguridad en nuestro servidor, o mandárnosla por email, y lo más importante, combinado con el plugin wp-cron, podíamos programar una copia de seguridad diaria, y que nos llegase por email.
El plugin es excelente, y de hecho lo he usado sin problemas durante meses. Pero desgraciadamente su desarrollo se detuvo hace un año, y en la versión 2.0.4 de WordPress ha dejado de funcionar la capacidad para programar las copias de seguridad. El autor mismo nos informa en este comentario que ha dejado de trabajar en él, y no lo ha probado con esta última versión. Así que a no ser que otro desarrollador tome el relevo y corrija el plugin, no volverá a funcionar en ésta y las siguientes versiones de WordPress.
Desde luego no quería tener que ejecutar a mano todos los días el plugin, porque sabía que antes o después (más bien antes) iba a olvidarme. Así que buscando por la red, y probando varias alternativas, he acabado escribiendo un sencillo script en Bash que realiza una copia de seguridad diaria de la base de datos y la guarda en el servidor, manteniendo las N últimas versiones y borrando las anteriores. También se le podría añadir la opción de mandar el archivo por email, pero en mi servidor no tengo posibilidad de hacerlo. No sería más que añadir una línea de código:
/bin/mail -s “asunto” “dirección” < archivo
Para que este script funcione, el servidor en el que tenéis alojado el blog debe utilizar Linux, usar MySQL como software de base de datos, y daros la posibilidad de crear trabajos periódicos en Cron. El script es el siguiente:
mysqldump --add-drop-table --user "nombre_usuario" --password="contraseña" "base_de_datos" | gzip -9 > /home/"usuario_cpanel"/"directorio_backup"/"base_de_datos".`date --iso-8601`.gz
ls -t /home/"usuario_cpanel"/"directorio_backup"/"base_de_datos".* | tail +"número_copias_más_1" | xargs rm -f
Visto así parece horrible (en realidad son sólo dos líneas, en este formato estrecho de columna se cortan), pero un poco después os daré un enlace para descargarlo directamente y configurarlo. Todo lo que va entre comillas son datos que vosotros deberéis sustituir por los valores correspondientes (sin las comillas). Veamos su explicación uno a uno:
- “nombre_usuario”: el nombre del usuario que tiene acceso a la base de datos. Es el que tuvísteis que escribir en el archivo wp-config.php durante la instalación.
- “contraseña”: la contraseña para acceder a la base de datos. Es la que tuvísteis que escribir en el archivo wp-config.php durante la instalación.
- “base_de_datos”: el nombre de la base de datos. Igualmente lo tuvísteis que escribir en el archivo wp-config.php durante la instalación.
- “usuario_cpanel”: es vuestro nombre de usuario en el servidor de hosting. Seguramente es el que usáis para acceder al panel de control.
- “directorio_backup”: el directorio en el que se guardarán las copias de seguridad. Debéis crearlo vosotros por ejemplo entrando por FTP en vuestra cuenta. Recomiendo hacerlo en el directorio raíz, el que aparece nada más acceder. Tendréis que darle permisos de escritura para que el script pueda usarlo (esto se hace mediante los atributos del directorio que acabáis de crear, cualquier programa de FTP decente os dejará cambiarlos). Por ejemplo probad con 777 (permiso de lectura y escritura para todos).Si ese directorio está fuera del directorio donde se guarda el contenido de vuestra instalación de WordPress (típicamente public_html), nadie podrá acceder vía web a él.
- “número_copias_más_1″: simplemente eso. Si queréis guardar las tres últimas copias, poned un 4.
Para entender mejor el script, veamos como sería con datos concretos:
mysqldump --add-drop-table --user paco --password=paquito pacodb | gzip -9 > /home/paco_server/mysql_backups/pacodb.`date --iso-8601`.gz
ls -t /home/paco_server/mysql_backups/pacodb.* | tail +3 | xargs rm -f
Podéis descargar el código directamente en un archivo de texto. Lo llamáis por ejemplo db_backup.sh, cambiais las variables anteriores de ejemplo por las vuestras, y lo subís por FTP al directorio raíz de vuestro servidor. En los atributos del archivo, tenéis que dar permiso de ejecución para usuario y grupo, por ejemplo poned 754. Ya está listo para usar.

Ejemplo de un panel cPanel, donde configurar el Cron
Ahora tenemos que crear el trabajo en Cron para que lo ejecute periódicamente. Eso se hace desde el panel de control de vuestra cuenta en el servidor. Por ejemplo, el servidor que aloja este blog que leéis, utiliza el software cPanel como panel de control, y seguramente será el caso de muchos otros, dada su popularidad. En mi caso la opción se llama Cron jobs. Entramos y elegimos crear uno nuevo. Como comando a ejecutar, introducimos la ruta a nuestro script, por ejemplo:
/home/pepe/backup.sh
Y como periodicidad, por ejemplo cada seis horas, de todos los días, meses y años. En formato Cron de Unix quedaría así la línea a añadir:
0 */6 * * * /home/pepe/backup.sh
Guardamos los cambios, y ya está programada la ejecución de nuestro script cada seis horas. Es decir, cuatro veces al día se hará una copia de nuestra base de datos en este directorio. Se acumularán los archivos diarios durante los día que digamos, y cuando sean más antiguos que eso, se borrarán. Con este sistema, si algún día metemos la pata al cambiar algo en el blog, podemos volver a un estado anterior fácilmente, siguiendo estas instrucciones.
Espero que el proceso haya quedado medianamente claro, aunque si nunca habéis cacharreado con trabajos Cron o bases de datos, será mejor que alguien más acostumbrado a trabajar con servidores os eche una mano. A cambio, tendréis una copia de seguridad de vuestro blog que, creedme, llegado el momento vale su peso en oro.
Por: Marcos González Troyas en Trucos Palm
RSS comentarios | Trackback |
Imprimir este post





































Cachis, te has adelantado a mi propósito. “Te plagiaré”.
Para mí es importante poder enviar un comprimido de la base de datos a una cuenta GMail específica, no vaya a ser que se pierda la del servidor (crackeo, rotura del disco duro,… ).
cPanel no lo implementa por defecto. Hace dos semanas, alguien que yo me sé, les envió mi sugerencia para que la implemente en la próxima versión.
- Un saludo en esta mi primera intervención -
PD: es la anotación más útil que he leído últimamente. Sin embargo, ni un comentario ni meneo. País de…
No es la solución más elegante del mundo, pero funciona, así que decidí compartirla. Esa opción en cPanel que comentas sería genial. No cuesta nada añadirla, pueden limitar la frecuencia con que se manda el email, para evitar sobrecarga en el servidor.
Un saludo y que encuentres más cosas interesantes en el blog
Maty creo que no debes hablar asi alguien podria ofenderse si no han posteado es que talvez no han podido,o no lo han leido pero habemos muchos que seguimos desde hace años a Marcos y por supuesto a La Pda de Tungsteno el sabe que si no posteamos aun asi se le agradece pues lo que para algunos es una necesidad para otros eso,te pido disculpas si te ofendo pues no es mi intencion saludos.
@ José Cedano
Es un fenómeno generalizado en la blogosfera hispana. Y cuanto más interesante es la anotación, menor el número de comentarios. Y salvo en algunos sitios, la mayoría de los comentarios apenas enriquecen la anotación.
Lo que nadie puede negar, leyendo los trackbacks, es que intento que mis conocidos sepan de este método.
Una entrada muy interesante. Recuerdo que uno de los problemillas del plugin que mencionas al principio para backups era este.
Mejor con bash que con un plugin en php, que podría contener errores y / ó vulnerabilidades (de esas tan frecuentes en PHP). Con bash y cron no necesitarás depender de WordPress
Me apunto tu receta, Marcos!!
torrie wilson in playboy
http://myblog.es/torrie-wilson
Veo este entrada muy interesante ya que como dice AlucardX es mucho mas seguro que un script en php. Pero a eso tengo que decir que quizá no todos podamos permitirnos un alojamiento de pago en el que nos permitan realizar tareas cron. Para los que aun estamos atados a los servidores de pago tenemos que ir a morir a plugins ya que nuestras libertades son limitadas.
Con todo, dejar claro que considero este metodo la mejor opción cuando el servidor te la permita.
¿como puedorealizar una copia de seguridad del directorio home a un fichero?¿cuales son los comandos tar necesarios para crear copias de seguridad comprimidas, como cheaquearlas y como desconprimirlas?