我有一个Laravel命令,每天备份MySQL数据库。
这是命令:
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
$this->process = new Process([sprintf(
"mysqldump -u%s -p'%s' %s > %s",
config('database.connections.mysql.username'),
config('database.connections.mysql.password'),
config('database.connections.mysql.database'),
storage_path('app/public/backups/backup.sql')
)]);
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
try {
$this->process->mustRun();
$this->info('The database has been backed up successfully.');
} catch (ProcessFailedException $exception) {
logger()->debug($exception->getMessage());
$this->error('The backup process has failed.');
}
}当我检查哪个命令实际运行时,我会看到以下内容:
/Users/jovan/path_to_project/mysqldump -uuser -p'passpass' project > /Users/jovan/path_to_project/storage/app/public/backups/backup.sql由于某些原因,它无法工作,因为它为mysqldump命令(/Users/jovan/path_to_project/mysqldump)创建了一个绝对路径。
当我将命令更改为以下命令并手动运行它时,它可以正常工作:
mysqldump -uuser -p'passpass' project > /Users/jovan/path_to_project/storage/app/public/backups/backup.sql我怎么才能解决这个问题?
发布于 2022-03-10 11:56:13
您使用的不是可执行的mysqldump路径。
首先,尝试通过执行:mysqldump来定位which mysqldump可执行文件,然后将输出(绝对路径)添加到CLI命令内容中。
$this->process = new Process([sprintf(
"mysqldump -u%s -p'%s' %s > %s",
config('database.connections.mysql.username'),
config('database.connections.mysql.password'),
config('database.connections.mysql.database'),
storage_path('app/public/backups/backup.sql')
)]);转到
$this->process = new Process([sprintf(
"/absolute/path/to/mysqldump -u%s -p'%s' %s > %s",
config('database.connections.mysql.username'),
config('database.connections.mysql.password'),
config('database.connections.mysql.database'),
storage_path('app/public/backups/backup.sql')
)]);https://stackoverflow.com/questions/71423585
复制相似问题