首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel数据库备份计划

Laravel数据库备份计划
EN

Stack Overflow用户
提问于 2022-06-07 11:55:18
回答 2查看 179关注 0票数 0

我正在尝试设置一个调度程序,用于每周在laravel备份数据库。我创建了一个命令,并填写了一些数据,如命令本身和描述,并将其注册到控制台内核中。问题是文件从未被创建和/或存储在.中。

这是代码的一部分,其中包含命令:

代码语言:javascript
复制
public function handle()
{
    Log::info('Database backup completed.');

    $filename = 'mysite' . Carbon::now()->format('Y-m-d') . ".gz";
    $command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . "  | gzip > " . storage_path() . "/app/backup/" . $filename;
    $returnVar = NULL;
    $output = NULL;

    exec($command, $output, $returnVar);
}

这是核心部分:

代码语言:javascript
复制
/**
 * The Artisan commands provided by your application.
 *
 * @var array
 */
protected $commands = [
    OtherCron::class,
    DatabaseBackupCron::class,
];

/**
 * Define the application's command schedule.
 *
 * @param Schedule $schedule
 * @return void
 */
protected function schedule(Schedule $schedule)
{
     $schedule->command('othercron')->dailyAt('00:00');
     $schedule->command('database-backup:cron')->everyFiveMinutes();
}

注意事项:我使用"->everyFiveMinutes()“只是为了测试目的:)

EN

回答 2

Stack Overflow用户

发布于 2022-09-11 06:40:36

我试过你的代码,它对我有用,唯一的区别是内核,我这样写。

代码语言:javascript
复制
    protected $commands = [
        'App\Console\Commands\DatabaseBackUp'
    ];

    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
      //some other commands
        $schedule->command('database:backup')->weekly();
    }

现在,当我运行php artisan database:backup文件时,在存储文件夹中创建扩展名为.zp的文件。

票数 0
EN

Stack Overflow用户

发布于 2022-06-07 12:06:01

代码语言:javascript
复制
php artisan make:command DatabaseBackUp

使用此命令使数据库备份文件。

代码语言:javascript
复制
app/Console/Commands/DatabaseBackUp.php
<?php
  
namespace App\Console\Commands;
  
use Illuminate\Console\Command;
use Carbon\Carbon;
   
class DatabaseBackUp extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'database:backup';
  
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';
  
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
  
    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        $filename = "backup-" . Carbon::now()->format('Y-m-d') . ".gz";
  
        $command = "mysqldump --user=" . env('DB_USERNAME') ." --password=" . env('DB_PASSWORD') . " --host=" . env('DB_HOST') . " " . env('DB_DATABASE') . "  | gzip > " . storage_path() . "/app/backup/" . $filename;
  
        $returnVar = NULL;
        $output  = NULL;
  
        exec($command, $output, $returnVar);
    }
}

在这个步骤中,我们需要在您的存储文件夹中创建“备份”文件夹。您必须在以下路径上创建“备份”:

代码语言:javascript
复制
storage/app/backup

现在,在这个步骤中,我们需要安排我们创建的命令。因此,让我们按照如下所示更新内核文件:

代码语言:javascript
复制
app/Console/Kernel.php
<?php
  
namespace App\Console;
  
use Illuminate\Console\Scheduling\Schedule;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
  
class Kernel extends ConsoleKernel
{
    /**
     * The Artisan commands provided by your application.
     *
     * @var array
     */
    protected $commands = [
        'App\Console\Commands\DatabaseBackUp'
    ];
  
    /**
     * Define the application's command schedule.
     *
     * @param  \Illuminate\Console\Scheduling\Schedule  $schedule
     * @return void
     */
    protected function schedule(Schedule $schedule)
    {
        $schedule->command('database:backup')->daily();
    }
  
    /**
     * Register the commands for the application.
     *
     * @return void
     */
    protected function commands()
    {
        $this->load(__DIR__.'/Commands');
  
        require base_path('routes/console.php');
    }
}

您可以检查以下命令,以便使用此命令获得数据库备份:

代码语言:javascript
复制
php artisan database:backup

T将在备份文件夹上创建一个备份文件。你可以去那里看看。

现在,我们已经准备好在服务器上安装cron了。

最后,您可以在调度任务时管理此命令,您必须在服务器的crontab文件中添加一个条目:

运行以下命令:

代码语言:javascript
复制
crontab -e
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72530789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档