Автоматизация резервного копирования баз данных c Laravel
Настройка команды резервного копирования
Сначала необходимо создать команду Artisan для процесса резервного копирования:
php artisan make:command DatabaseBackup
В только что созданном файле команды:
namespace App\Console\Commands;
use Illuminate\Console\Command;
use Illuminate\Support\Facades\Storage;
class DatabaseBackup extends Command
{
protected $signature = 'db:backup';
protected $description = 'Backup the database to cloud storage';
public function handle()
{
$filename = "backup-" . now()->format('Y-m-d') . ".sql";
$path = storage_path("app/backup/{$filename}");
// Создание резервной копии
$command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD')
. " --host=" . env('DB_HOST') . " " . env('DB_DATABASE')
. " > " . $path;
exec($command);
// Загрузка в облачное хранилище (например, AWS S3).
Storage::disk('s3')->put("backups/{$filename}", file_get_contents($path));
unlink($path); // Удаление локальной копии
$this->info('Database backup uploaded to S3.');
}
}
Планирование резервного копирования
Добавим выполнение резервного копирования в файле app/Console/Kernel.php
:
protected function schedule(Schedule $schedule)
{
$schedule->command('db:backup')->daily()->at('01:00');
}
Это запланирует ежедневное выполнение резервного копирования в 1:00 утра.
Настройка облачного хранилища
Убедитесь, что облачное хранилище сконфигурировано в config/filesystems.php
:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
'endpoint' => env('AWS_ENDPOINT'),
],
Не забудьте установить соответствующие переменные среды в .env
файле.
Реализовав такую настройку, вы получите регулярное резервное копирование базы данных и её безопасное хранение в облаке. Этот подход обеспечивает дополнительный уровень защиты данных и делает аварийное восстановление более управляемым.
Не забывайте тщательно тестировать процесс резервного копирования и периодически проверять целостность резервных копий, чтобы убедиться, что они действительны и могут быть восстановлены в случае необходимости.