Trabajos

Backup de WordPress

Backup y restauración de WordPress

Este programa lo componen dos scripts de bash que copian y restauran WordPress. Están basados en este post de Konstantin Kovshenin, al que he añadido las siguientes características:

Ejemplos de ejecución

Backup:

hosting-user@paas_13128:~/web/vhosts/www.okaeri.re/Backups/wp_br/scripts$ bash wp_backup --dbuser wordpress --dbpassword contraseña www.okaeri.re wordpress /srv/data/web/vhosts/www.okaeri.re/htdocs/ /srv/data/web/vhosts/www.okaeri.re/Backups/

Copiando base de datos "wordpress" ...

Copiando archivos de WordPress ...

tar: Removing leading `/' from member names

Backup creado satisfactoriamente en:
/srv/data/web/vhosts/www.okaeri.re/Backups/wp_backup.www.okaeri.re.2013-11-10-17.49.tar.gz

Restauración del backup:

hosting-user@paas_13128:~/web/vhosts/www.okaeri.re/Backups/wp_br/scripts$ bash wp_restore --dbuser wordpress --dbpassword contraseña /srv/data/web/vhosts/www.okaeri.re/htdocs/ /srv/data/web/vhosts/www.okaeri.re/Backups/wp_backup.www.okaeri.re.2013-11-10-17.49.tar.gz 

Recuperando base de datos "wordpress" ...

Recuperando archivos de WordPress ...

Restauración satisfactoria.

Si ha cambiado el dominio o la URL, necesitará una fase adicional de "search and replace", ver:
 http://codex.wordpress.org/Moving_WordPress#When_Your_Domain_Name_or_URLs_Change
Si ha cambiado de hosting, necesitará recrear el usuario original de WordPress (con la misma contraseña), así como concederle los privilegios adecuados sobre la base de datos. Ver: http://codex.wordpress.org/Installing_WordPress#Step_2:_Create_the_Database_and_a_User

Las rutas pueden ser relativas y contener caracteres especiales.

Puede ver una ayuda de las opciones y argumentos ejecutando wp_backup y wp_restore sin parámetros.

Ficheros de configuración MySQL

Es posible omitir las opciones --dbuser y --dbpassword empleando un fichero de configuración MySQL my.cnf (my.ini en Windows). Puede consultarse su localización a través de mysql --help:

[usuario@localhost ~]$ mysql --help
[...]
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
[...]

Por ejemplo: creamos un fichero ~/.my.cnf y rellenamos lo siguiente:

[client]
user=wordpress
password='contraseña'

Los ficheros de configuración son más seguros que poner la contraseña en la línea de comandos.

Ejecución del script en alojamiento compartido

El principal inconveniente de utilizar un script es la necesidad de acceso a un shell. Normalmente, se proporciona a través de SSH, disponible tanto en servidores físicos dedicados como en VPS, donde no hay prácticamente restricciones. Se puede acceder a superusuario e instalar software, por ejemplo. Hasta hace relativamente poco, SSH no existía en alojamiento compartido (shared hosting), pero cada vez hay más proveedores que lo ofrecen. Sin embargo, adolece de grandes limitaciones: no tenemos privilegios de superusuario, los comandos disponibles están acotados, o no se permite la ejecución de programas. Me quería detener en este punto. En los ejemplos anteriores, ejecuto los scripts mediante bash wp_backup o bash wp_restore. Esto puede parecer raro, ya que lo normal sería utilizar el punto barra seguido de comando, es decir, ./wp_backup y ./wp_restore. Desafortunadamente, mi servidor no lo aceptaba:

hosting-user@paas_13128:~/web/vhosts/www.okaeri.re/Backups/wp_br/scripts$ ./wp_backup --help
bash: ./wp_backup: /bin/bash: bad interpreter: Permission denied

Investigando en Internet, comprobé, viendo /proc/mounts, que este error se debía al montaje de particiones sin la opción exec. Esto nos impediría ejecutar ficheros binarios. Afortunadamente, este programa es un script de bash, y como se ha comentado anteriormente, podemos llamarlo mediante bash fichero.

Formato del backup

El backup es un tarball comprimido (.tar.gz) con esta estructura:

backup.tar.gz
  |
  |- database
  |    |- nombre_base_datos.sql
  |
  |- www
       |- wp-admin
       |- wp-content
       |- wp-includes
       |- .htaccess
       |- index.php
       |- [...]

Descargas

El fichero anterior incluye además una cuidada documentación elaborada con Sphinx (navegar a wp_br.zip\wp_br\docs\build\html\index.html). En ella se detalla lo comentado en esta página más algún detalle menor. Para mayor comodidad, también puede consultarla en este link.