Jueves, 14 de septiembre de 2006

Trucos PalmMantener 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
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.

si te ha gustado este post.



18 comentarios sobre “Mantener una copia de seguridad periódica de tu blog / base de datos”


Deja un comentario


Etiquetas válidas:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Akismet ha protegido ya este blog de miles de comentarios fraudulentos. Pero si por error filtra tu comentario por favor avísame mediante el email de contacto de la derecha.