Copias de seguridad de archivos y bases de datos en Laravel 5

Para empezar, desde que escribí el post con recursos para Laravel todavía no había encontrado una forma simple de hacer copias de seguridad backups en Laravel 5. Tampoco en las bases de datos en mis aplicaciones creadas con Laravel.

Efectivamente, hay varias opciones disponibles. Una de ellas era, efectivamente, la de ejecutar un Crontab puro y duro que clone el sistema de archivos y haga un volcado de las bases de datos. En mi caso, MySQL. esta opción no es algo descabellado, pero si se quiere era la forma más engorrosa de hacerlo. Sobre todo porque tenia que definir que carpetas guardar, donde hacerlo, cada cuanto y luego el problema de donde guardar los volcados de la bases de datos.

Algo genial de Laravel es su comunidad, la misma siempre se encarga de solucionar los problemas comunes elaborando soluciones que se depuran por medio del trabajo en conjunto. Pues bien, una de estas soluciones fue el paquete Laravel 5 Backup.

Copias de seguridad backups en Laravel 5

Laravel 5 Backup es, en general, un paquete que se instala en segundos y se configura en apenas unos minutos. Además, permite la realización de copias de seguridad de cualquier aplicación basada en Laravel 5. A continuación, podrán seguir paso a paso un tutorial de cómo realizar copias de seguridad en Laravel 5.

Copias de seguridad (backups) en Laravel 5

En primera instancia, para que entiendan lo sencillo que es utilizar este paquete les dejo la linea que inicia y completa una nueva copia de seguridad

php artisan backup:run

Los requisitos

En primer término, para crear el volcado de la base de datos necesitamos tener instalado una dependencia, mysqldump (en general, se encuentra instalado en el 99% de los alojamientos). Si no lo tienen incorporado pueden hacerlo mediante la terminal y shh instalando mysql-client.

Instalación

Esto es lo más sencillo, se instala de igual manera que cualquier paquete utilizando composer:

composer require spatie/laravel-backup

Luego agregamos una linea a nuestro archivo config/app.php

'providers' => [
...
'Spatie\Backup\BackupServiceProvider',
...
];

A continuación, creamos el archivo de configuración de este magnífico paquete:

php artisan vendor:publish —provider="Spatie\Backup\BackupServiceProvider"

Si todo salió bien vamos a encontrar el archivo de configuración en app/config/laravel-backup.php.

Una vez hecho esto, en el archivo vamos a configurar todos los aspectos importantes de este paquete:

Configuración

return [

'source' => [

'files' => [

/*
* Primero la lista de directorios que deben ser parte del backup. You can
* Puedes especificar archivos individuales también.
*/
'include' => [
base_path(),
],

/*
* Del mismo modo estos directorios serán excluídos del backup.
* Puedes especificar archivos individuales también.
*/
'exclude' => [
storage_path(),
base_path('vendor'),
],
],

/*
* La base de datos debería ser parte del backup.
*/
'backup-db' => true,
],

'destination' => [

/*
* Así pues el filesystem(s) te dirá en cuales de los backups serán guardados. Elige uno o más
* de los filesystems que configuraste en app/config/filesystems.php
*/
'filesystem' => ['local'],

/*
* La ruta en donde los backups serán salvados. Esta ruta
* es relativa al root que has configurado en tu elegido
* filesystem(s).
*
* Si estás usando el filesystem local un archivo .gitignore será
* colocado automáticamente en este directorio para que tu no
* comprometas accidentalmente estos backups.
*/
'path' => 'backups',

/*
* Por defecto los backups serán guardados como un archivo zip con una
* etiqueta de tiempo como nombre de archivo. En seguida con estas opciones tu puedes
* especificar un prefijo y un sufijo para el nombre de archivo.
*/
'prefix' => '',
'suffix' => '',
],

'clean' => [
/*
* Hasta aquí el comando clean removerá todos los backups en todos los filesystems configurados
* que son más viejos que esta cantidad de días.
*/
'maxAgeInDays' => 90,
],

'mysql' => [
/*
* Así pues la ruta al mysqldump binary. Puedes dejar esto vacío
* siempre y cuando el binario esté instalado en el sitio por defecto.
*/
'dump_command_path' => '',

/*
* Hasta aquí si tu servidor lo soporta puedes volverte en un insert extendido.
* De tal modo esto resultará en un vuelco más pequeño y acelerará el proceso de backup.
*
* Aquí puedes ver: https://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_extended-insert
*/
'useExtendedInsert' => false,

/*
* Concluyendo si el vuelco de memoria de la db toma más segundos que el valor especificado,
* desde luego esto abortará el backup.
*/
'timeoutInSeconds' => 60,
],
];

Modo de empleo

Por último y ahora viene lo mejor, cómo utilizar este proyecto.

Primero, al iniciar una nueva copia:

php artisan backup:run

Luego, para iniciar una copia de solo las bases de datos:

php artisan backup:run —only-db

Asimismo, iniciar una copia de solo los archivos

php artisan backup:run –only-files

Cuando requieran iniciar una copia de seguridad seleccionando el prefijo /sufijo del nombre de archivo resultante:

php artisan backup:run --prefix="backup-" —suffix=“-manual".

Para continuar, limpiar las copias de seguridad más antiguas:

php artisan backup:clean

Ya está, eso es todo. ¿No es al fin y al cabo un paquete genial?

Ahora sí, ya no hay excusas para tener copias de seguridad actualizadas en nuestras aplicaciones basadas en Laravel 5.

Categorizado en: