@Djonson86
Нечем похвастаться.

Как правильно сформиромать запрос на восстановление базы данных из бекапа для new Process от симфони?

Есть метод, который восстанавливает бд с бекапа. Выглядит примерно так:
private function restoreSnapShot()
	{
		$snapshot = $this->option('snapshot');
		if (!$snapshot) {
			$this->error("Snapshot option is required.");
		}

		try {
			$storage = Storage::disk('local');
			$found = $storage->get('/backups/' . $snapshot . '.sql');
			$tempLocation = '/tmp/' . config('database.connections.mysql.database') . '_' . date("Y-m-d_Hi") . '.sql';

			// create a temp file
			$bytes_written = File::put($tempLocation, $found);
			if ($bytes_written === false) {
				$this->info("Error writing to file: " . $tempLocation);
			}

			// run the cli job
			 $this->process = new Process([
				'mysql',
				'--host=' . config('database.connections.mysql.host'),
				'--user=' . config('database.connections.mysql.username'),
				'--password=' . config('database.connections.mysql.password'),
				config('database.connections.mysql.database'),
				$tempLocation
			]);
			$this->process->mustRun();


			if ($this->process->isSuccessful()) {
				$this->info("Restored snapshot: " . $snapshot);
			}
		} catch (\Exception $e) {
			$this->info('File Not Found: ' . $e->getMessage());
		}
	}

Вся беда как я понял в запросе. Вылетает в ексепшн. Пробовал указывать явно
$this->process = new Process([" mysql -u user -pPassword < mydatabase.sql"])
, тоже не работает.
Что здесь может быть не так, как исправить?
  • Вопрос задан
  • 54 просмотра
Решения вопроса 1
lifestar
@lifestar
Wallet карты, Видео-продакшн
$this->process = Process::fromShellCommandline( 'mysql -u $username -p"$password" $database < $file' );
$this->process->run( null, [
	'username' => $username,
	'password' => $password,
	'database' => $database,
	'file'     => $file,
] );
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы