Laravel Команда резервного копирования не выполняется с контроллера - PullRequest
0 голосов
/ 09 марта 2020

Я создал команду резервного копирования, которая работает из cmd без каких-либо проблем. Ниже приведен исходный код команды:

use Illuminate\Console\Command;

class BackupDBCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'mysql:backup';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Backup the database';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
        $username = env('DB_USERNAME','root');
        $password = env('DB_PASSWORD','');
        $dbname = env('DB_DATABASE','dbname');
        $filename ='public/backups/'. $dbname.'-' . \Carbon\Carbon::now()->toDateString() . '.sql';

        exec('C:/xampp/mysql/bin/'.'mysqldump -u'.$username.' '.$dbname. ' > ' . $filename);
        $this->info('Your backup is being saved to the root directory ' . $filename);
    }
}

Но когда я хочу выполнить эту команду из контроллера, она не работает для меня. Файл журнала и сообщение показывают результат вывода, который гласит: «Ваша резервная копия сохраняется в каталоге root public / backups / dbname-2020-03-09. sql». Исходный код контроллера:

public function create()
    {
        try {
            // start the backup process
            Artisan::call('mysql:backup');
            $output = Artisan::output();
            // log the results
            Log::info("Backpack\BackupManager -- new backup started from admin interface \r\n" . $output);
            //dump($output);
            // return the results as a response to the ajax call
            //Alert::success('New backup created');
            return redirect()->back();
        } catch (Exception $e) {
            //Flash::error($e->getMessage());
            return redirect()->back()->with(["error"=>$e->getMessage()]);;
        }
    }

Почему не создан файл резервной копии?

1 Ответ

0 голосов
/ 09 марта 2020

Попробуйте использовать laravel -backup: https://github.com/spatie/laravel-backup вместо того, чтобы делать это вручную:

function backupdb($database = null){
    \Spatie\DbDumper\Databases\MySql::create()
        ->setDbName($database??env('DB_DATABASE', 'db'))
        //->setDumpBinaryPath('/opt/lampp/bin')
        ->setDumpBinaryPath('C:\xampp73\mysql\bin')
        ->setUserName(env('DB_USERNAME', 'username'))
        ->setPassword(env('DB_PASSWORD', 'pass'))
        ->dumpToFile('storage/app/backups/db-' . date('d-m-Y') . '.sql');
}
...