Respaldar instalación de WordPress periódicamente en Google Drive

WordPress es un popular CMS que usan muchísimos sitios en internet, ya sea para sitios de noticias, blogs, tiendas, etcétera.

Este CMS se compone de archivos para funcionar, además de los archivos que el usuario sube, plugins, temas y finalmente una base de datos en donde están los artículos, páginas y configuraciones del sitio.

En este post voy a mostrarte cómo respaldar toda la instalación de WordPress junto con su base de datos en un archivo que será subido a Google Drive.

Como extra, te mostraré cómo hacer que estos respaldos sean automáticos usando cron.

Requisitos y recomendaciones

Para este post necesitamos las credenciales de acceso de MySQL de WordPress; pues vamos a exportar la base de datos.

También se necesita haber accedido a la cuenta de Google Drive desde Linux, por favor, sigue este sencillo tutorial.

Este post está basado en otros posts:

  1. Respaldar carpeta de Linux
  2. Hacer backup base de datos de MySQL en Linux
  3. Crear respaldo periódico de carpeta de Linux en Google Drive

Recomiendo leerlos, pues lo explicado ahí (en detalle) no será explicado aquí, aunque si no los lees no pasa nada.

Proceso de respaldo de WordPress

Vamos a crear un archivo .tar.gz con toda la instalación de WordPress. A ese archivo le vamos a agregar un export de la base de datos de MySQL.

Después vamos a subir ese respaldo a nuestra cuenta de Google Drive y una vez subido haremos que se elimine de nuestro sistema.

Finalmente vamos a hacer que el script se ejecute cada cierto tiempo con cron.

Hablar es de mal gusto, muéstrame el código

Veamos el script y abajo explico su funcionamiento. Es muy fácil de usar y modificar:

#!/bin/bash
# Script para respaldar instalación y base
# de datos de WordPress
# en Google Drive desde Linux
# By: parzibyte
# Visita: https://parzibyte.me/blog
# Variables de archivos
FECHA_Y_HORA=$(date "+%d-%m-%y_%H-%M-%S")
RUTA_HOME="/home/parzibyte"
# BD. No olvides que este archivo debe existir en la ruta especificada
# más info en: https://parzibyte.me/blog/2019/02/06/script-respaldar-base-de-datos-mysql-mariadb-linux-mysqldump/
ARCHIVO_CNF_MYSQL="$RUTA_HOME/my.cnf"
if [ ! -f "$ARCHIVO_CNF_MYSQL" ]; then
    echo "No existe el archivo my.cnf en $ARCHIVO_CNF_MYSQL"
    exit 1
fi
# Solo necesitamos el nombre de la base de datos de WordPress
BD_MYSQL="base_de_datos_wordpress"
# El ejecutable de gdrive. Más información
# en: https://parzibyte.me/blog/2019/07/01/administrar-google-drive-linux-gdrive-comandos/
EJECUTABLE_DRIVE="$RUTA_HOME/software/gdrive"
# El archivo de salida
NOMBRE_ARCHIVO="respaldo_wordpress_$FECHA_Y_HORA.tar.gz"
# El archivo de la base de datos
NOMBRE_DUMP_BD="$BD_MYSQL.$FECHA_Y_HORA.sql"
# Carpeta en donde serán guardados
CARPETA_DESTINO="$RUTA_HOME/respaldos"
# Simples concatenaciones
RUTA_ABSOLUTA_ARCHIVO="$CARPETA_DESTINO/$NOMBRE_ARCHIVO"
RUTA_ABSOLUTA_RESPALDO_BD="$CARPETA_DESTINO/$NOMBRE_DUMP_BD"
# Ubicación de la instalación de WordPress
CARPETA_RESPALDAR="/var/www/html/"
# Comandos
echo "Respaldando $BD_MYSQL en $RUTA_ABSOLUTA_RESPALDO_BD usando archivo $ARCHIVO_CNF_MYSQL..."
# Exportar base de datos con MySQLDump
mysqldump --defaults-file=$ARCHIVO_CNF_MYSQL $BD_MYSQL >$RUTA_ABSOLUTA_RESPALDO_BD
if [ ! -f "$RUTA_ABSOLUTA_RESPALDO_BD" ]; then
    echo "No existe el respaldo"
    exit 1
fi
# Creamos el directorio para los respaldos por si no existe
mkdir -p "$CARPETA_DESTINO"
echo "Creando archivo de respaldo..."
# Crear archivo tar.gz de instalación de WP
tar --ignore-failed-read --create --gzip --file="$RUTA_ABSOLUTA_ARCHIVO" "$CARPETA_RESPALDAR" "$RUTA_ABSOLUTA_RESPALDO_BD"
if [ -f "$RUTA_ABSOLUTA_ARCHIVO" ]; then
    echo "Subiendo archivo usando binario de $EJECUTABLE_DRIVE"
    # Subir archivo
    $EJECUTABLE_DRIVE upload $RUTA_ABSOLUTA_ARCHIVO
    echo "Eliminando archivos después de ser subidos"
    # Eliminar tar.gz y respaldo de base de datos
    rm $RUTA_ABSOLUTA_ARCHIVO
    rm $RUTA_ABSOLUTA_RESPALDO_BD
    # Mensaje para sentirnos como juanquers
    echo "¡OK!"
fi

Comenzando con MySQL, debemos tener un archivo llamado my.cnf en la ruta que se indica. El mío luce así:

[mysqldump]
host=localhost
user=parzibyte
password="hunter2"

Antes de ejecutar el script recomiendo que pruebes iniciar sesión con las credenciales de MySQL que pusiste; o bueno, si tu instalación de WordPress funciona con esas credenciales puedes omitir este paso.

Recuerda poner correcta la ruta del ejecutable de la herramienta de Google Drive y haber puesto tus credenciales anteriormente.

También cambia el nombre de la base de datos de WordPress (pues el usuario, la contraseña y el host estarán en my.cnf)

Finalmente cambia la ruta absoluta de la instalación de WordPress, es decir, la dirección en donde está la carpeta de wp-content, el archivo wp-config.php, etcétera.

Cuando hayas configurado todo, dale permisos de ejecución al script:

chmod +x script.sh

Y después ejecútalo:

./script.sh

Es importante notar que dependiendo de tu servidor y cantidad de archivos, así como la conexión a internet, el proceso tardará un poco más o un poco menos.

Ejecutando el script

Aquí puedes ver una ejecución del script en mi computadora:

Respaldar instalación de WordPress con Base de datos y subirla a Google Drive

Como te lo dije, puedes modificar el archivo a tu gusto.

Agregar archivo a cron

Para que los respaldos sean automáticos hay que editar el crontab con nuestro editor favorito:

crontab -e

Después, agregar algo como lo siguiente:

0 7 * * 1,3,5 bash -c /home/parzibyte/scripts/respaldar_blog.sh

En este caso los respaldos se harán los lunes, miércoles y viernes a las 7 de la mañana; puedes modificar los períodos a tu gusto.

Cuando me pierdo, utilizo esta web para saber los tiempos de cron.

Bonus: enviar correo electrónico cuando se haga un respaldo

Si tenemos sendmail configurado en nuestro entorno, podemos enviar un correo electrónico con los mensajes.

Para ello hay que direccionar la salida y pasarla a través de una tubería hacia sendmail:

0 7 * * 1,3,5 bash -c /home/parzibyte/scripts/respaldar_blog.sh | grep /usr/sbin/sendmail tu_correo@dominio.com

En mi caso mi cron queda así:

Configurar cron para respaldos automáticos

Y al probarlo:

Correo electrónico de respaldo de WordPress

Así, cada vez que se haga un respaldo, un correo será enviado.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

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