En todo proyecto e instalación software es realmente vital disponer de backups o copias de seguridad que te permitan restaurar tu instalación ante un cambio erróneo que puede deberse a:
- cambios no deseados (infecciones)
- cambios en la programación con efectos no contemplados
- errores humanos
- errores en el servidor
- y un larguísimo etcétera
Por todo ello, presentamos una solución para hacer backup de instalaciones WordPress en servidores Linux y restaurarlas.
Esta solución de copia de seguridad es extensible para otros gestores de contenidos como Joomla, Dropal, Prestashop etc, CMS’s todos ellos basados en ficheros y bases de datos, como tantos otros programas.
Creación de backup
Aunque es indiferente el orden, comenzamos con el backup de los ficheros y seguimos con el de la base de datos de la instalación:
Backup de ficheros
Para hacer el backup de los ficheros de la instalación de WordPress, empaquetamos y comprimimos todos los ficheros en un .tar.gz. Por si no es suficientemente claro, los nombres en mayúsculas representan variables propias del servidor o instalación a sustituir en un caso concreto como el que se muestra más a bajo a modo de ejemplo.
1 |
tar -czvf RUTA_A_NUESTROS_BACKUPS/backup-PROYECTO-files-FECHA_O_IDENTIFICADOR.tar.gz RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/ |
Backup de base de datos
Para hacer el backup de la base de datos, necesitamos saber el nombre de la base de datos, que podemos verlo en el fichero wp-config.php. Suponiendo un gestor de base de datos MySQL, podemos hacer un dump de la base de datos con el código:
1 |
mysqldump -u USUARIO_BASE_DE_DATOS -pCONTRASEÑA --databases NOMBRE_BASE_DE_DATOS --extended-insert=FALSE --default-character-set=utf8 > RUTA_A_NUESTROS_BACKUPS/backup-PROYECTO-db-FECHA_O_IDENTIFICADOR.sql |
Restaurar backup
Para recuperar una instalación anterior a través de nuestro backup hecho previamente y sobreescribir por tanto nuestra instalación actual, seguiremos unos pasos de manera análoga.
Restauración de ficheros
Para recuperar los ficheros accederemos a la ruta del proyecto, borraremos los archivos actuales y descomprimiremos allí los ficheros del backup.
1 2 3 4 5 6 7 |
cd RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/ rm -rf RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/* cp RUTA_A_NUESTROS_BACKUPS/backup-PROYECTO-files-FECHA_O_IDENTIFICADOR.tar.gz RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/ tar -xvf RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/backup-PROYECTO-files-FECHA_O_IDENTIFICADOR.tar.gz rm -f RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/backup-PROYECTO-files-FECHA_O_IDENTIFICADOR.tar.gz mv RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTORUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/* RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/ rm -rf RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS |
Restauración de base de datos
Para la correcta restauración de la base de datos eliminaremos la actual, crearemos una nueva con el mismo nombre e insertaremos allí los datos del backup.
1 2 3 4 5 |
mysql -u USUARIO_BASE_DE_DATOS -pCONTRASEÑA drop database NOMBRE_BASE_DE_DATOS; create database NOMBRE_BASE_DE_DATOS; quit; mysql -u USUARIO_BASE_DE_DATOS -pCONTRASEÑA NOMBRE_BASE_DE_DATOS < RUTA_A_NUESTROS_BACKUPS/backup-PROYECTO-db-FECHA_O_IDENTIFICADOR.sql |
Ejemplo concreto
Podemos ver un ejemplo concreto de una instalación en donde:
- RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS: /var/www
- RUTA_A_NUESTROS_BACKUPS: será la ruta /var/backups
- USUARIO_BASE_DE_DATOS: root
- CONTRASEÑA: passwdinventado
- PROYECTO: cleventyweb
- NOMBRE_BASE_DE_DATOS: cleventybd
- FECHA_O_IDENTIFICADOR: 2015-01-13
En este caso, para hacer la copia de seguridad ejecutaremos el código:
1 2 |
tar -czvf /var/backups/backup-cleventyweb-files-2015-01-13.tar.gz /var/www/cleventyweb/ mysqldump -u root -ppasswdinventado --databases cleventybd --extended-insert=FALSE --default-character-set=utf8 > /var/backups/backup-cleventyweb-db-2015-01-13.sql |
Y para recuperar el contenido del backup:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
cd /var/www/cleventyweb/ rm -rf /var/www/cleventyweb/* cp /var/backups/backup-cleventyweb-files-2015-01-13.tar.gz /var/www/cleventyweb/ tar -xvf /var/www/cleventyweb/backup-cleventyweb-files-2015-01-13.tar.gz rm -f /var/www/cleventyweb/backup-cleventyweb-files-2015-01-13.tar.gz mv /var/www/cleventyweb/var/www/cleventyweb/* /var/www/cleventyweb/ rm -rf /var/www/cleventyweb/var/www mysql -u root -ppasswdinventado drop database cleventybd; create database cleventybd; quit; mysql -u root -ppasswdinventado cleventybd < /var/backups/backup-cleventyweb-db-2015-01-13.sql |
Automatizando los backups por medio de scripts
Si queremos hacer los backups de manera más cómoda, automatizada (por ejemplo mediante tareas cron), o queremos hacer backups de múltiples instalaciones, podemos hacerlo a través de un script. Por ejemplo, podremos guardar el siguiente código en el fichero backups.sh, otorgarle los permisos adecuados de ejecución y lanzarlo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
backupsFolder=RUTA_A_NUESTROS_BACKUPS maxDaysInLocal=4 nowYYYYMMDD=$(date +"%Y-%m-%d") idFile=$(date +"%Y-%m-%d") if [[ -n "$1" ]] then idFile=$idFile-$1 fi # backupsWP 1-DATE_IN_YYYY_MM_DD_FORMAT 2-ID_FILE function backupsWP { echo "backups WP" backup PROYECTO $1 $2 NOMBRE_BASE_DE_DATOS RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO/ backup PROYECTO-2 $1 $2 NOMBRE_BASE_DE_DATOS-2 RUTA_A_NUESTRAS_INSTALACIONES_WORDPRESS/PROYECTO-2/ } # backup 1-PROJECT_NAME 2-DATE_IN_YYYY_MM_DD_FORMAT 3-ID_FILES 4-DATA_BASE_NAME 5-PATH_COMPLETE function backup { echo "backup " $1 fileTar=$backupsFolder/backup-$1-files-$3.tar.gz fileDB=$backupsFolder/backup-$1-db-$3.sql tar -czf $fileTar $5 if [ $4 != 'null' ] then mysqldump -u USER -pCONTRASEÑA --databases $4 --extended-insert=FALSE --default-character-set=utf8 > $fileDB fi } # deleteOldLocalFiles 1-MAX_DAYS_FILES_CAN_STAY_IN_LOCAL function deleteOldLocalFiles { echo "deleteOldLocalFiles" find $backupsFolder/backup* -mtime +$1 -type f -delete } deleteOldLocalFiles $maxDaysInLocal backupsWP $nowYYYYMMDD $idFile |
Como vemos, este script también se encarga de borrar los backups antiguos para no llenar nuestro servidor de copias de seguridad y mantener sólo los backups de más de 4 días.
Automatización por medio de cron
Además, si queremos automatizar su ejecución por medio de tareas cron y ejecutar el lanzamiento de backups diariamente a las (por ejemplo) 4 de la madrugada, insertaremos una tarea cron como esta:
1 |
0 4 * * * RUTA_AL_SCRIPT_DE_BACKUPS/backups.sh |
a través del comando
1 |
crontab -e
|
¡Y recuerda siempre la importancia de los backups como medida de seguridad como desarrollador y usuario!
Fuente de la Imagen: aquí
« Presentación de Cleventy como candidata al XV Premio Joven Empresario de A Coruña Subvención para el sector de la artesanía y el comercio al por menor »