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
Suscríbete al blog o sólo a lo relacionado con Palm o Windows Mobile














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?