Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Laravel / Command: La Vía Rápida para Automatizar Backups (mysqldump)

Command: La Vía Rápida para Automatizar Backups (mysqldump)

Por jc mouse viernes, noviembre 7, 2025

Los comandos (Command) en Laravel son scripts PHP que se ejecutan a través de la interfaz de línea de comandos Artisan para realizar tareas específicas como la generación de código, migraciones o la automatización de procesos.

Se puede ejecutar comandos predefinidos como «php artisan list» para ver todas las opciones disponibles, o crear comandos propios. Y eso es lo que haremos en este post para implementar un comando que nos genera una Copia de Seguridad de nuestro proyecto.

Lo primero que debemos hacer es crear el Command mediante la instrucción:

php artisan make:command DatabaseBackup

Esto crea el archivo «DatabaseBackup.php» en el directorio «App/Console/Commands/» y su contenido por defecto es:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;

class DatabaseBackup extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'app:database-backup';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        //
    }
}

Muy bien, modificaremos el archivo «DatabaseBackup.php» de la siguiente manera:

<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use Illuminate\Support\Facades\File;

class DatabaseBackup extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'db:backup';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Genera un backup completo de la base de datos';

    /**
     * Execute the console command.
     */
    public function handle()
    {
        $databaseName = config('database.connections.mysql.database');
        $username = config('database.connections.mysql.username');
        $password = config('database.connections.mysql.password');
        $host = config('database.connections.mysql.host');

        $backupFile = storage_path('app/backups/db-backup_' . now()->format('Y-m-d_H-i-s') . '.sql');

         // Crea el directorio de backups si no existe
        if (!File::isDirectory(storage_path('app/backups'))) {
            File::makeDirectory(storage_path('app/backups'), 0777, true);
        }

         // Genera el comando de mysqldump
        $command = "mysqldump --no-defaults --user={$username} --password={$password} --host={$host} {$databaseName} > \"{$backupFile}\"";        

        // Ejecuta el comando en el sistema
        $exitCode = 0;
        exec($command, $output, $exitCode);

        if ($exitCode === 0) {
            $this->info("¡Backup creado con éxito en: {$backupFile}");
        } else {
            $this->error('¡Fallo en la creación del backup!');
            $this->error(implode("\n", $output));
        }
    }
}

Cuando se crea el Command, se crea con $signature=’app:database-backup’ por defecto, podemos dejar tal cual esta, o podemos cambiarlo, lo que se prefiera, en este ejemplo lo cambiamos a «db:backup».

El resto del codigo se escribe en el handle, basicamente extrae las credenciales de nuestro proyecto laravel, crea un directorio donde almacenar los backup «app/backups», y finalmente genera el comando para el mysqldump para posteriormente ejecutarlo.

En nuestra consola escribimos el comando >php artisan db:backup y presionamos ENTER.

La copia de seguridad se crea en el directorio app/backups/ de nuestro storage/.

Tambien observamos un mensaje de alerta «mysqldump: [Warning] Using a password on the command line interface can be insecure.». No es un error de código que detenga la ejecución del comando, sino una advertencia de seguridad emitida por el propio mysqldump.

El comando se está ejecutando correctamente, pero la advertencia nos avisa que incluir la contraseña directamente en el comando de la terminal es inseguro porque:

  • La contraseña queda visible en el historial de comandos de la shell.
  • La contraseña podría ser leída por otros usuarios o procesos en el sistema mientras se ejecuta (vía ps -ef).

Si eres el unico que utiliza el sistema no hay problema de seguridad, pero si el sistema es compartido y deseas ejecutar mysqldump de forma segura sin incluir la contraseña en la línea de comandos, debes usar la opción -p sin escribir la contraseña inmediatamente después, mysqldump te la solicitará de forma interactiva. De esta manera, la contraseña no se almacena en el historial de comandos ni es visible.

Modificamos la linea $command de la siguiente manera:

$command = "mysqldump --no-defaults --user={$username} -p --host={$host} {$databaseName} > \"{$backupFile}\"";

Asi cuando se escriba el comando, se nos solicitara ingresar la contraseña y claro el mensaje «warning» desaparece:

Enjoy!!!

Tags

Artículos similares

Impresión de Interfaz Gráfica de Usuario

En este post veremos como imprimir secciones de un formulario en java implementando la Interface Printable. La clase que[...]

ANSI: Colorear consola de salida de Netbeans

Cuando realizamos proyectos java desde Netbeans, usamos System.out.println para imprimir datos en consola (para dep[...]

Conoce App Denuncia: La aplicación boliviana para frenar la corrupción policial

La Policía Boliviana lanza su propia aplicación móvil que está destinada para denunciar hechos de corrupción dentro de l[...]

Estilos condicionales en iReport

iReport nos da la posibilidad de dar un formato condicional a los diferentes registros resultado de nuestras consultas S[...]

Realiza pruebas Unitarias en Java

Una Prueba Unitaria, es una forma de comprobar que nuestro código, hace lo que se supone debe hacer; es decir, se asegur[...]

Mapeo del Ecosistema de Tecnología Digital en Bolivia 2020

Crecen las startups en Bolivia: La mayoría está en Santa Cruz, Cochabamba y La Paz Según el «Mapeo del Ecosistema de Tec[...]