mysql - 升级到 Laravel 7 后无法再使用 mysqldump
问题描述
今天我决定将我的 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();
}
}
解决方案
我使用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);
}
}
推荐阅读
- jquery - 在使用 POSTMAN 时,AJAX POST 请求不起作用
- rust - 函数输出类型随输入变化
- python - 如何在 csv python 中交换行/列
- android - 使用 Delphi 在 Android 服务中显示表单
- javascript - setInterval 作为计数器不适用于赛普拉斯
- jwt - Symfony 5.3:使用 JWT 将用户分配给对象
- javascript - 无限滚动工作但没有做应有的事情
- emscripten - 从 Emscripten 获取 HTML5 设备运动和振动
- python - 在 Python 中计算共现矩阵的任何替代方法?
- html - Mat Select 多组选定值