在laravel 11中使用路由备份mysql数据库出现问题

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

我想使用路由备份 Laravel 11 中的 mysql 数据库。我尝试了一些方法,但都有问题:

  1. 使用 Spatie/db-dumper:

    protected $signature = 'backup:database';
    public function handle()
    {
        $filename = config('app.DB_DATABASE') . '.sql';
        $path = storage_path("app/database/backup/");
        $fnStorage = $path . $filename;
        File::put($fnStorage, '');
        MySql::create()
            ->setDbName(config('app.DB_DATABASE'))
            ->setUserName(config('app.DB_USERNAME'))
            ->setPassword(config('app.DB_PASSWORD'))
            ->setHost(config('app.DB_HOST'))
            ->setPort(config('app.DB_PORT'))
            ->dumpToFile($fnStorage);
    }
    

在终端中调用它可以正常工作:

php artisan backup:database
。但是使用路线(在控制器中:
Artisan::call('backup:database');
它会抛出以下错误:

“mysqldump”不被识别为内部或外部命令、可操作程序或批处理文件。

注意:我将以下代码添加到 config/database.php 但错误仍然存在!

'mysql' => [
        'driver' => 'mysql',
        'dump' => [
           'dump_binary_path' => 'D:/xampp/mysql/bin/',
           'dump_command_path' => 'D:/xampp/mysql/bin/',
           'use_single_transaction',
           'timeout' => 60 * 5, // 5 minute timeout
        ],
        ...
 ],
  1. 使用 Spatie/laravel-backup:

在终端中调用它就可以正常工作:

php artisan backup:run --only-db
。但是使用路线(在控制器中:
Artisan::call('backup:run', ['--only-db'=> true]);
它会抛出以下错误:

mysqldump:出现错误:2004:尝试连接时无法创建 TCP/IP 套接字 (10106)。

3.直接使用

mysqldump
命令:

$command1 = 'mysqldump --user=' . $dbUser . ' --password=' . $dbPassword . ' --host=' . $dbHost . ' ' . $dbName . ' > "' . $fnStorage . '"';

该命令在终端中运行良好。使用路线(

exec($command1, $output, $returnVar);
当我在 VSCode 中处于设计模式时它也可以正常工作。但是在生产中(使用 xampp),它会抛出以下错误:

“mysqldump”不被识别为内部或外部命令、可操作程序或批处理文件。

当我将此命令传递给 powershell 命令时:

$command1 = 'mysqldump --user=' . $dbUser . ' --password=' . $dbPassword . ' --host=' . $dbHost . ' ' . $dbName . ' > \'' . $fnStorage . '\'';
$command1 = 'powershell -Command "' . $command1 . '"';

将其称为

exec($command1, $output, $returnVar);
,什么也不会发生!

那么,我该怎么做才能应对这份工作呢?

backup database-backups laravel-11
1个回答
0
投票

谢谢大家。我找到了答案并分享给其他人。

在第三种方式中,我输入了mysqldump的绝对路径:

$command1 = 'D:/xampp/mysql/bin/mysqldump --user=' . $dbUser . ' --password=' . $dbPassword . ' --host=' . $dbHost . ' ' . $dbName . ' > "' . $fnStorage . '"';
exec($command1, $output, $returnVar);

现在,它适用于设计(VSCode)和生产环境:)

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.