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:
- Restauración: el script original no hacía restauraciones.
- Parámetros: en el script original, los datos de usuario estaban incrustados. En el mío, se pasan por parámetro en la línea de comandos.
- Reducción de ficheros intermedios: gracias al uso de pipes, he acortado de tres a uno el número de ficheros intermedios durante el backup.
- Gestión de caracteres especiales: el script usa de la opción –transform de tar, que trabaja con Expresiones Regulares Básicas. Es necesario escapar los caracteres
*.^$[\
.
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.