执行工匠备份:运行时未找到Laradock mysqldumpSpatie Laravel备份

问题描述

我已经在Laradock上部署了Laravel应用程序。

我想指出的是数据库连接工作正常(用户可以注册,登录等)。

为了备份应用程序,我已经安装了Spatie's Laravel Backup package

我相应地设置了所有配置变量,如下所示:

config / backup.php

<?php

return [

    'backup' => [

        /*
         * The name of this application. You can use this name to monitor
         * the backups.
         */
        'name' => env('APP_NAME','laravel-backup'),'source' => [

            /*......*/

            /*
             * The names of the connections to the databases that should be backed up
             * MySQL,PostgreSQL,SQLite and Mongo databases are supported.
             *
             * The content of the database dump may be customized for each connection
             * by adding a 'dump' key to the connection settings in config/database.php.
             * E.g.
             * 'mysql' => [
             *       ...
             *      'dump' => [
             *           'excludeTables' => [
             *                'table_to_exclude_from_backup',*                'another_table_to_exclude'
             *            ]
             *       ],* ],*
             * If you are using only InnoDB tables on a MySQL server,you can
             * also supply the useSingleTransaction option to avoid table locking.
             *
             * E.g.
             * 'mysql' => [
             *       ...
             *      'dump' => [
             *           'useSingleTransaction' => true,*       ],*
             * For a complete list of available customization options,see https://github.com/spatie/db-dumper
             */
            'databases' => [
                'mysql',],/*
         * The database dump can be compressed to decrease diskspace usage.
         *
         * Out of the box Laravel-backup supplies
         * Spatie\DbDumper\Compressors\GzipCompressor::class.
         *
         * You can also create custom compressor. More info on that here:
         * https://github.com/spatie/db-dumper#using-compression
         *
         * If you do not want any compressor at all,set it to null.
         */
        'database_dump_compressor' => null,/*....*/
        ],];

在Laravel Homestead中,备份工作正常。

$ php artisan backup:run

根据to this package's docs,我们需要如下指定mysqldump二进制文件的路径:

config / database.php

//config/database.php
'connections' => [
    'mysql' => [
        'driver'    => 'mysql'
        ...,'dump' => [
           'dump_binary_path' => '/path/to/the/binary',// only the path,so without `mysqldump` or `pg_dump`
           'use_single_transaction','timeout' => 60 * 5,// 5 minute timeout
           'exclude_tables' => ['table1','table2'],'add_extra_option' => '--optionname=optionvalue',]  
    ],

这是我默认情况下在同一文件中得到的:

            'mysql' => [
                'driver' => 'mysql','url' => env('DATABASE_URL'),'host' => env('DB_HOST','127.0.0.1'),'port' => env('DB_PORT','3306'),'database' => env('DB_DATABASE','forge'),'username' => env('DB_USERNAME','password' => env('DB_PASSWORD',''),'unix_socket' => env('DB_SOCKET','charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','prefix' => '','prefix_indexes' => true,'strict' => true,'engine' => null,'options' => extension_loaded('pdo_mysql') ? array_filter([
                    PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),]) : [],'dump'=>[
                   'dump_binary_path' => env('DB_DUMP_PATH'),so without `mysqldump` or `pg_dump`
                   'use_single_transaction',// 5 minute timeout
                   //'exclude_tables' => ['table1',//'add_extra_option' => '--optionname=optionvalue','add_extra_option'  => '--host='.env('DB_HOST'),]
            ],

在我的 .env 文件中:

DB_CONNECTION=mysql
DB_HOST=mysql
DB_PORT=3306
DB_DUMP_PATH='/usr/bin/'

如果我在MySQL容器中执行mysqldump,它将起作用:

Usage: mysqldump [OPTIONS] database [tables]
OR     mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR     mysqldump [OPTIONS] --all-databases [OPTIONS]
For more options,use mysqldump --help

但是,如果我在工作区容器中运行backup命令,

artisan backup:run

我得到了错误:

备份失败,因为:转储过程失败,退出代码为127: 找不到命令:sh:1:mysqldump:找不到

那我如何告诉Laradock mysqldump二进制路径在哪里?

有解决方法吗?也许要建立一个将WorkspaceMySQL容器连接起来的新容器?

还有其他方法吗?

在Adrien的帮助下解决 我确实在.env文件中发现以下变量设置为false:

### WORKSPACE #############################################
####
# ...
WORKSPACE_INSTALL_MYSQL_CLIENT=false
# ...

所以我将其更改为true:

### WORKSPACE #############################################
####
# ...
WORKSPACE_INSTALL_MYSQL_CLIENT=true
# ...

我保存并退出。

这也意味着我不必在docker-compose.custom.yml文件中进行任何更改

要应用该更改,我执行了(无需停止任何容器)

$ docker-compose build workspace

$ docker-compose -f docker-compose.custom.yml up -d workspace

然后我进入了容器

$ docker exec -it my_workspace bash

一旦我在里面寻找mysqldump:

# which mysqldump
/usr/bin/mysqldump

最后,我可以执行Spatie的Laravel Backup软件包:

# artisan backup:run
Starting backup...
Dumping database xyz...
Determining files to backup...
Zipping x files and directories...
Created zip containing x files and directories. Size is x.x MB
Copying zip to disk named backMeUp...
Successfully copied zip to disk named backMeUp.
Backup completed!

那就成功了!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)