我的Laravel 9应用程序有几个docker容器(Nginx,PHP,MySQL,PHPMyAdmin等)。我使用spatie package备份我的数据库。我不知道如何设置mysqldump文件的路径,因为它在docker容器中!我尝试了许多不同的路径在互联网上提到(例如'var/lib/mysql','mysql/bin','usr/bin'等),但他们都不工作!
幸运的是,当我在服务器上运行以下命令时,成功生成了备份文件,因此我认为mysqldump文件位于'\usr\lib'中:
docker exec我的容器名称/usr/bin/mysqldump -u root用户密码=我的密码数据库名称〉存储/应用程序/备份/备份测试. sql
下面是我的docker-compose.yml文件中的MySQL服务定义:
mysql:
image: mysql:8.0
container_name: mysql
restart: unless-stopped
tty: true
volumes:
- ./mysql:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: {{root-passowrd}}
SERVICE_NAME: mysql
networks:
- laravel
下面是config/database.php中的MySQL设置:
'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', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4',
'collation' => 'utf8mb4_unicode_ci',
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'dump' => [
'dump_binary_path' => '/usr/bin',
'use_single_transaction',
'timeout' => 60 * 5,
],
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
],
如果有人能帮我解决这个问题,那就太好了!
下面是我运行时得到的错误
docker编写执行php php工匠备份:运行
备份失败,因为转储进程失败,退出代码为“无成功”。退出代码======== 127:未找到命令
输出======
错误输出============ sh:1:/usr/文件夹/mysqldump:页面没有找到。#0 /var/www/vendor/spatie/db-dumper/src/DbDumper.php(178):空间\数据库转储程序\异常\转储失败::processDidNotEndSuccessfully(对象(Symfony\组件\进程\进程))#1 /var/www/供应商/空间/数据库转储程序/src/数据库/MySql.php(143):空间\数据库转储\数据库转储-〉检查是否转储成功(对象(Symfony\组件\进程\进程),'/var/www/storag...')#2 /var/www/供应商/空间/laravel-backup/src/任务/备份/备份作业.php(274):空间\数据库转储器\数据库\MySql-〉转储到文件('/var/www/storag...')#3 [内部函数]:空间\备份\任务\备份\备份作业-〉空间\备份\任务\备份{闭包}(对象(空间\DbDumper\数据库\MySql),'mysql')#4 /var/www/供应商/laravel/框架/src/照明/集合/Arr.php(560):数组Map(对象(闭包),数组,数组)#5 /var/www/供应商/laravel/framework/src/照明/集合/集合.php(739):说明\支持\Arr::map(数组,对象(闭包))#6 /var/www/供应商/空间/laravel-backup/src/任务/备份/备份作业.php(277):说明\支持\集合-〉Map(对象(闭包))#7 /var/www/供应商/空间/laravel-backup/src/任务/备份/备份作业.php(188):空间\备份\任务\备份\备份作业-〉转储数据库()#8 /var/www/供应商/空间/laravel-backup/src/任务/备份/备份作业.php(160):空间\备份\任务\备份\备份作业-〉创建备份清单()#9 /var/www/供应商/空间/laravel-backup/src/命令/备份命令.php(58):空间\备份\任务\备份\备份作业-〉运行()#10 /var/www/供应商/laravel/框架/src/照明/容器/绑定方法.php(36):空间\备份\命令\备份命令-〉句柄()#11 /var/www/供应商/laravel/框架/src/照明/容器/实用程序.php(41):照明\容器\绑定方法::照明\容器{封闭}()#12 /var/www/供应商/laravel/framework/src/照明/容器/绑定方法.php(93):照明\容器\实用程序::unwrappIfClosure(对象(封闭))#13 /var/www/供应商/laravel/framework/src/照明/容器/绑定方法.php(37):调用绑定方法(对象(照明\基础\应用),数组,对象(闭包))#14 /var/www/vendor/laravel/framework/src/照明/容器/容器.php(651):调用(对象(照明\基础\应用程序),数组,数组,空)#15 /var/www/vendor/laravel/framework/src/照明/控制台/命令.php(182):调用(数组)#16 /var/www/供应商/symfony/控制台/命令/命令.php(312):照明\控制台\命令-〉执行(对象(Symfony\组件\控制台\输入\参数输入),对象(照明\控制台\输出样式))#17 /var/www/vendor/laravel/framework/src/照明/控制台/命令.php(152):Symfony\组件\控制台\命令\命令-〉运行(对象(Symfony\组件\控制台\输入\参数输入),对象(照明\控制台\输出样式))#18 /var/www/供应商/空间/laravel-backup/src/命令/基本命令.php(28):照明\控制台\命令-〉运行(对象(Symfony\组件\控制台\输入\参数输入),对象(Symfony\组件\控制台\输出\控制台输出))#19 /var/www/供应商/symfony/console/应用程序.php(1020):空间\备份\命令\基本命令-〉运行(对象(Symfony\组件\控制台\输入\参数输入),对象(Symfony\组件\控制台\输出\控制台输出))#20 /var/www/供应商/symfony/控制台/应用程序.php(312):Symfony\组件\控制台\应用程序-〉doRunCommand(对象(空间\备份\命令\备份命令),对象(Symfony\组件\控制台\输入\参数输入),对象(symfony\组件\控制台\输出\控制台输出))#21 /var/www/供应商/symfony/控制台/应用程序.php(168):运行(对象(Symfony\组件\控制台\输入\参数输入),对象(Symfony\组件\控制台\输出\控制台输出))#22 /var/www/vendor/laravel/framework/src/照明/控制台/应用程序.php(102):Symfony\组件\控制台\应用程序-〉运行(对象(Symfony\组件\控制台\输入\参数输入),对象(Symfony\组件\控制台\输出\控制台输出))#23 /var/www/vendor/laravel/framework/src/Illuminate/基础/控制台/内核.php(155):照明\控制台\应用程序-〉运行(对象(Symfony\组件\控制台\输入\参数输入),对象(Symfony\组件\控制台\输出\控制台输出))#24 /var/www/artisan(37):Illuminate\Foundation\Console\Kernel-〉句柄(对象(Symfony\组件\Console\输入\ArgvInput),对象(Symfony\组件\Console\输出\控制台输出))#25 {main}发送通知失败备份失败,原因是:转储进程失败,返回无成功退出代码。退出代码======== 127:未找到命令
输出======
1条答案
按热度按时间7lrncoxx1#
我设法以不同的方式解决了这个问题!我通过Dockerfile在我的PHP容器中安装了MySQL客户端,如下所示:
停靠文件:
然后,我使用下面的命令(在我的控制器中)来生成备份。您可以通过cron作业触发此命令来定期生成备份:
在我的例子中,我在UI中放置了一个按钮,以便管理员在需要时生成和下载备份。因此,当单击该按钮时,将触发一个 AJAX 调用,以便在PHP容器的shell中运行该命令。我在控制器中使用的命令如下所示:
我的控制者:
最后,我把我的docker-compose.yml文件,以防它可以帮助别人!