Больше не могу mysqldump после обновления до Laravel 7 - PullRequest
0 голосов
/ 12 марта 2020

Сегодня я решил обновить свой laravel проект до версии 7.0. С этого момента я не могу 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 ]

1 голос
/ 21 марта 2020

У меня тоже была такая же проблема, и я нашел решение, с 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
    ]);
1 голос
/ 12 марта 2020

Я решил использовать exe c () 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);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...