Copias de seguridad de WordPress en Linux

Copias de seguridad de WordPress en Linux

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í

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *

« »