46 lines
1.2 KiB
PHP
46 lines
1.2 KiB
PHP
<?php
|
|
|
|
namespace App\Console\Commands;
|
|
|
|
use Illuminate\Console\Command;
|
|
|
|
class BackupCron extends Command
|
|
{
|
|
|
|
protected $signature = 'backup:cron';
|
|
protected $description = 'Respaldo automático de la base de datos';
|
|
|
|
/**
|
|
* Ejecutar comando
|
|
*/
|
|
public function handle()
|
|
{
|
|
$filename = 'backup-' . date('Y-m-d_H-i-s') . '.sql';
|
|
$containerPath = '/tmp/' . $filename;
|
|
$hostPath = storage_path('app/backup/' . $filename);
|
|
|
|
// Crear backup dentro del contenedor MySQL
|
|
$dumpCommand = sprintf(
|
|
'docker exec repuve-backend-v1-mysql-1 sh -c "mysqldump --no-tablespaces -u%s -p%s %s > %s"',
|
|
env('DB_USERNAME'),
|
|
env('DB_PASSWORD'),
|
|
env('DB_DATABASE'),
|
|
$containerPath
|
|
);
|
|
exec($dumpCommand, $output, $returnCode);
|
|
|
|
// Copiar del contenedor al host
|
|
$copyCommand = sprintf(
|
|
'docker cp repuve-backend-v1-mysql-1:%s %s',
|
|
$containerPath,
|
|
$hostPath
|
|
);
|
|
exec($copyCommand);
|
|
|
|
// Limpiar archivo temporal del contenedor
|
|
exec("docker exec repuve-backend-v1-mysql-1 rm " . $containerPath);
|
|
|
|
$this->info('Backup creado: ' . $filename);
|
|
}
|
|
}
|