升级到Laravel 7后无法mysqldump

时间:2020-03-12 14:21:48

标签: mysql laravel command

今天,我决定将laravel项目升级到7.0版。从那时起,我无法通过artisan命令mysqldump我的数据库。有什么建议吗?

php artisan backup:run

   Symfony\Component\Process\Exception\ProcessFailedException 

  The command "'mysqldump --user=***** --password=****** ****** > /home2/****/subdomains/intranet/storage/app/backups/backup-2020-03-12_15:15:18.sql'" failed.

Exit Code: 127(Command not found)

在Laravel 6中工作的代码:

class BackupRun extends Command
{
 protected $signature = 'backup:run';
 protected $description = 'Run Backup';

 protected $process;
 protected $filename;


 public function __construct()
 {
     parent::__construct();

     $this->filename = 'backup-' . strftime('%Y-%m-%d_%H:%M:%S') . '.sql';

     $this->process = new Process([sprintf(
         'mysqldump --user=%s --password=%s %s > %s',
         config('database.connections.mysql.username'),
         config('database.connections.mysql.password'),
         config('database.connections.mysql.database'),
         storage_path("app/backups/{$this->filename}")
     )]);
 }

 public function handle()
 {
     $this->process->mustRun();
 }
}

2 个答案:

答案 0 :(得分:1)

我使用 exec() php函数而不是 Symphony Process Class 解决了问题。太糟糕了。

此外,使用2>&1可以避免出现诸如“在命令行界面上使用密码可能不安全”之类的警告。

您可以用ENV变量替换配置数据。

干杯!

class BackupRun extends Command
{
    protected $signature = 'backup:run';
    protected $description = 'Run Backup';

    protected $filename;
    protected $process;


    public function __construct()
    {
        parent::__construct();

        $this->filename = 'backup-' . now() . '.sql';

        $this->process = sprintf(
            '(mysqldump %s --user=%s --password=%s > %s) 2>&1',
            config('database.connections.mysql.database'),
            config('database.connections.mysql.username'),
            config('database.connections.mysql.password'),
            storage_path("app/backups/{$this->filename}")
        );
    }

    public function handle()
    {
        exec($this->process);
    }
}

答案 1 :(得分:1)

我也遇到了同样的问题,并找到了解决方案,对于laravel 7,您不能使用符号“>”,请使用参数--result-file =

    $this->process = new Process([
        'mysqldump',
        '--user=' . config('database.connections.mysql.username'),
        '--password=' . config('database.connections.mysql.password'),
        config('database.connections.mysql.database'),
        '--result-file=' . $file
    ]);