Existen decenas de plugins para hacer backups de WordPress sin necesidad de complicarnos demasiado la existencia. Si tenéis acceso SSH a vuestro servidor para administrarlo podéis implementar vuestra propia solución de backup igualmente satisfactoria con sencillos scripts.
He creado un script en bash que realiza:
- Copia de respaldo de los ficheros de DocumentRoot de nuestro servidor (donde se encuentra toda la instalación de WordPress con los directorios wp-content, wp-uploads…). Definiremos el directorio donde tenemos nuestro WordPress con la variable wp_documentroot.
- Copia de respaldo de la BBDD de WordPress en MySQL.
- Ambos backups (base de datos y ficheros) se guardan en el directorio de destino que definamos, en un empaquetado TAR comprimido con gunzip. Los backups se irán guardando sucesivamente en ese directorio destino de la siguiente manera:
... 20150606.tar.gz 20150607.tar.gz 20150608.tar.gz 20150609.tar.gz 20150610.tar.gz ...
- Se van eliminando los backups con más de 15 días de antigüedad por defecto.
- Está pensado para ejecutarse una vez al día (podemos programarlo con un cron por ejemplo). Por ejemplo, para ejecutarlo a las 22:45 todos los días podríamos poner el crontab de nuestro usuario:
45 22 * * * /home/myuser/wp_backup.sh
- Por último, manda un email informando de que el backup ha sido correctamente realizado. NOTA: deberás tener configurado previamente el sistema para que pueda enviar correos a un mailhub externo. Una opción sencilla es configurar SSMTP tal y como explicaba aquí.
En cada caso se podrá personalizar como es obvio el nombre de la BBDD, usuario, pass, directorio DocumentRoot…
Vamos a llamar al script wp_backup.sh
:
#!/bin/bash # # Title :wp_backup.sh # Author :Julio Sanz # Website :www.elarraydejota.com # Data :20150717 # Description :Useful script to backup a WordPress Blog. It backups both WordPress files (contents, core files...) and WordPress database # Usage :bash wp_backup.sh # License :GPLv3 # ######################################################################################################## # VARIABLES # Date variable for everyday. It will have the format 20150507 -> year 2015, month 05, day 07 v_date=`date +%F | tr -s "-" " " | tr -d " "` # WordPress database user wpdb_user="your_wordpress_database_user" # WordPress database password wpdb_pass="your_wordpress_database_pass" # WordPress database name wpdb_dbname="your_wordpress_database_name" # Email to send a notification when a backup is done wp_email="youremail@domain.com" # WordPress installation location (without final slash!) e.g.:/var/www/sites/mysite.com wp_documentroot="your_wordpress_documentroot" # WordPress backup destination directory e.g.: /usr/local/backups/wordpress (without final slash!) wp_backup_dir="your_wordpress_backup_destination_directory" # MAIN SCRIPT # Create backup directories mkdir -p $wp_backup_dir/$v_date/files mkdir -p $wp_backup_dir/$v_date/database # Backup files and MySQL WordPress Database cp -R $wp_documentroot/* $wp_backup_dir/$v_date/files/ mysqldump -u$wpdb_user -p$wpdb_pass -h localhost $wpdb_dbname > $wp_backup_dir/$v_date/database/wpdatabase.sql # Create TAR file and compress with GZIP cd $wp_backup_dir tar -zcvf $v_date.tar.gz $v_date/ --remove-files # Delete old backups created mtime days ago (15 by default) find $wp_backup_dir -maxdepth 1 -mtime +15 -exec rm -rf "{}" ";" > /dev/null # Send mail to confirm that everything has gone as expected echo 'Backup for your site has been completed' | mail -s "Wordpress backup successfully completed" $wp_email
Podéis personalizarlo como mejor os venga 😉