En esta noticia os vamos a explicar cómo hacer copias de seguridad de vuestras instalaciones Drupal o de cualquier sitio web con un sencillo script de bash.

Para ello deberemos tener acceso al shell de nuestro servidor como es lógico.

#!/bin/bash
Comprobamos que nos pasan los parámetros adecuados, nombre del directorio donde está el proyecto, servidor MySQL, usuario MySQL, password MySQL y nombre de la base de datos MySQL.
if [ $# -ne 5 ]; then
  echo “Es necesario introducir 5 parámetros: $0 PROJECT MYSQL_SERVER MYSQL_USER MYSQL_PASS MYSQL_DATABASE”
  exit -1
fi

Escribimos por pantalla que empieza el script y hacemos asignaciones a las variables. Aquí deberemos rellenar las variables que no se pasan por parámetro ($x).

echo “Backuping $1…”
PROJECT=$1
FTP_USER=”usuario_ftp”
FTP_PASS=”contraseña_ftp”
FTP_DIR=”ruta/ftp”
FTP_HOST=”ftp.dominio.com”
BACKUP_SRC=”/directorio/base/web/$PROJECT”
BACKUP_DST=”backups”
MYSQL_SERVER=$2
MYSQL_USER=$3
MYSQL_PASS=$4
MYSQL_DATABASE=$5
Asignamos como nombre del tar donde empaquetaremos el backup a el nombre del proyecto, guión, fecha de hoy (año.mes.día) y como destino el especificado arriba en la variable $BACKUP_DST.
# Stop editing here.
NOW=$(date +”%Y.%m.%d”)
DESTFILE=”$BACKUP_DST/$PROJECT-$NOW.tgz”
Hacemos el volcado de la base de datos en el fichero $BACKUP_DST/$NOW-Databases.sql .
echo “mysqldump $MYSQL_DATABASE…”
mysqldump -p –user=$MYSQL_USER –host=$MYSQL_SERVER –password=$MYSQL_PASS –add-drop-table $MYSQL_DATABASE > “$BACKUP_DST/$NOW-Databases.sql”
Empaquetamos todo (directorio del proyecto y volcado de la base de datos) en un tar cuyo nombre y destino habíamos especificado antes.
echo “tar $PROJECT…”
tar cfz “$DESTFILE” $BACKUP_SRC “$BACKUP_DST/$NOW-Databases.sql”
Subimos el tar al FTP con los parámetros que habíamos asignado en la asignación de parámetros.
echo “Uploading by FTP…”
ftp -n $FTP_HOST <<End-Of-Session
# -n option disables auto-logon
user &#8220;$FTP_USER&#8221; &#8220;$FTP_PASS&#8221;
binary
cd $FTP_DIR
put &#8220;$DESTFILE&#8221; &#8220;$PROJECT-$NOW.tgz&#8221;
bye
End-Of-Session
Borramos el archivo de volcado de la base de datos porque ya lo tenemos dentro del tar.
echo &#8220;Removing temporary files&#8230;&#8221;
rm -f &#8220;$BACKUP_DST/$NOW-Databases.sql&#8221;

Bueno, como veis es un script muy sencillito (para los que dominien el BASH scripting) pero que nos automatizará la tarea de realizar las copias de seguridad en local y en el FTP.

Drupal script

Como último os podéis hacer otro script que llame a este añadiendo en cada línea un proyecto diferente, así cuando tengáis un proyecto nuevo, para hacer copia de seguridad de este, sólo tendréis que añadir una linea al script que llama al script de copias:

#!/bin/bash

backup_ftp.sh proyecto1 servidor.base_de_datos.1.com usuario1 contraseña1 base_de_datos1
backup_ftp.sh proyecto2 servidor.base_de_datos.2.com usuario2 contraseña2 base_de_datos2
backup_ftp.sh proyecto3 servidor.base_de_datos.3.com usuario3 contraseña3 base_de_datos3

Esperamos que os haya sido de utilidad este script a los Drupaleros y programadores web en general.

BASH Rulez!

Raül Torralba Adsuara

Software developer, organizer at @betabeersCAS, vim lover and artansoft's blogger.

rtorralba raul_torralba


Published