WordPress script en Bash para hacer copia de seguridad

Cuando deseamos crear un Backup en WordPress solemos tomar el camino fácil, buscando un plugin famoso que automatice la tarea: error. Debes tener cuidado ya que algunos de ellos crean una extensión propia, que no podremos utilizar sin el plugin, o trae limitaciones artificiales para obligarnos a pagar la licencia (ocurre mucho con los multisitios o cuando conectas con servicios en nube). Por suerte disponemos de Bash y todo el poder del terminal. Sin instalar absolutamente nada podremos realizar todas las copias de seguridad que deseemos: Más rápido, gratuito y sin limitaciones de ningún tipo.

Base de datos

Crea un archivo, con el nombre que quieras (por ejemplo backup.sh) en la raíz de tu página. En el mismo lugar donde te encontrarás el archivo wp-config.php, wp-admin, etc. Añade el siguiente contenido.

#!/bin/bash
DB_HOST=$(cat wp-config.php | grep DB_HOST | cut -d \' -f 4)
DB_USER=$(cat wp-config.php | grep DB_USER | cut -d \' -f 4)
DB_PASS=$(cat wp-config.php | grep DB_PASSWORD | cut -d \' -f 4)
DB_NAME=$(cat wp-config.php | grep DB_NAME | cut -d \' -f 4)
BACKUP_DATABASE_NAME="database.sql"

mysqldump -h $DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DATABASE_NAME

Básicamente se encarga de obtener todas las variables importantes para lanzar mysqldump. El software que crea copias de seguridad de MySQL/MariaDB.

Ahora ya puedes ejecutalo.

bash backup.sh

Te creará el archivo database.sql con toda la base de datos.

Archivos

Esta tarea es la más sencilla, con tan solo crear un zip de la carpeta wp-content estará todo: plugins, tema, imágenes, traducciones…

Añade al final las siguientes líneas.

NOW=$(date +"%Y-%m-%d-%H%M")
zip -r $NOW.zip wp-content

Creará un archivo zip con la fecha de hoy (2020-08-02-1234.zip).

Todo unido

#!/bin/bash

# Variables
DB_HOST=$(cat wp-config.php | grep DB_HOST | cut -d \' -f 4)
DB_USER=$(cat wp-config.php | grep DB_USER | cut -d \' -f 4)
DB_PASS=$(cat wp-config.php | grep DB_PASSWORD | cut -d \' -f 4)
DB_NAME=$(cat wp-config.php | grep DB_NAME | cut -d \' -f 4)
NOW=$(date +"%Y-%m-%d-%H%M")
BACKUP_DATABASE_NAME="database.sql"

# Base de datos
mysqldump -h $DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME > $BACKUP_DATABASE_NAME

# Archivos
zip -r $NOW.zip wp-content

Ampliando posibilidades

Si quieres más posibilidades como:

Y otras funcionalidades, puedes utilizar el script que comparto en Github. Lo uso de manera habitual para mis clientes o para despliegues automáticos.

Versión escritorio