mysqldump 我服务器上的数据库返回 2

问题描述 投票:0回答:1

在我尝试了许多解决方案后,这个问题不断出现。我正在尝试

mysqldump
我的数据库并使用 PHP/Laravel 中的单个命令使用 gzip 对其进行压缩,这是我尝试的最新命令:

$filename = "backup-" . Carbon::now()->format('Y-m-d') . ".gz";
$command = "mysqldump -u " . env('DB_USERNAME') . " -p'" . env('DB_PASSWORD') . "' " . env('DB_DATABASE') . "  --no-tablespaces -C | gzip > " . public_path("DBbackup\/") . $filename;
$returnVar = NULL;
$output  = NULL;

exec($command, $output, $returnVar);

它返回

2
而不是
0
意味着命令失败,并且输出什么也没有。

然后我尝试返回命令来检查像

env(..)
这样的每个变量是否正确等等,但一切都很好,所以我自己尝试了该命令,它起作用并创建了
.gz
文件。我不明白为什么使用 PHP 不起作用?

php laravel command exec
1个回答
0
投票

我没有足够的声誉来发表评论,但有一件事很可能导致您遇到的问题。

您无法在生产环境中加载配置文件之外的环境变量。您实际上应该对这些变量进行硬编码,创建引用它们的配置文件或使用现有的配置文件database.php

配置文档中没有明确提及,但它确实这么说:

.env 文件中列出的所有变量都将加载到 当您的应用程序收到请求时,$_ENV PHP 超级全局。 但是,您可以使用 env 函数从这些中检索值 配置文件中的变量。

我认为这个措辞暗示了这个安全功能,因为它说你可以在配置文件中使用 env 函数,而不是在应用程序中的任何地方。可能在某个地方明确说过,但由于某种原因我找不到它。

© www.soinside.com 2019 - 2024. All rights reserved.