laravel 备份数据库 求指教
想备份数据 导出包含结构和数据的xxx.sql文件
目前试了spatie/laravel-backup
但是我的环境是docker-compose
......
php:
build:
context: ./services/php
args:
PHP_VERSION: php:${PHP_VERSION}-fpm-alpine
CONTAINER_PACKAGE_URL: ${CONTAINER_PACKAGE_URL}
PHP_EXTENSIONS: ${PHP_EXTENSIONS}
TZ: "$TZ"
container_name: php
expose:
- 9501
ports:
- "${PHP_SUPERVISOR_HOST_PORT_C}:9001"
extra_hosts:
- "www.site1.com:172.17.0.1"
volumes:
- ${SOURCE_DIR}:/www/:rw
- ${PHP_PHP_CONF_FILE}:/usr/local/etc/php/php.ini:ro
- ${PHP_FPM_CONF_FILE}:/usr/local/etc/php-fpm.d/www.conf:rw
- ${PHP_LOG_DIR}:/var/log/php
- ${DATA_DIR}/composer:/tmp/composer
- ${PHP_SUPERVISOR_LOG}:/var/log/supervisor/:rw
- ${PHP_SUPERVISOR_CONFIG}:/etc/supervisor/conf.d/:rw
- ${PHP_SUPERVISOR_CONF_FILE}:/etc/supervisor/supervisord.conf:ro
restart: always
command:
- /bin/sh
- -c
- |
supervisord -n -c /etc/supervisor/supervisord.conf
cap_add:
- SYS_PTRACE
networks:
default:
ipv4_address: 10.0.0.11
mysql:
image: mysql/mysql-server:${MYSQL_VERSION}
container_name: mysql
ports:
- "${MYSQL_HOST_PORT}:3306"
volumes:
- ${MYSQL_CONF_FILE}:/etc/mysql/conf.d/mysql.cnf:ro
- ${DATA_DIR}/mysql:/var/lib/mysql/:rw
- ${MYSQL_LOG_DIR}:/var/log/mysql/:rw
restart: always
networks:
default:
ipv4_address: 10.0.0.12
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_ROOT_HOST: "${MYSQL_ROOT_HOST}"
TZ: "$TZ"
......
在php容器执行
php artisan backup:run
报错如下
Backup failed because The dump process failed with exitcode 127 : Command not found : sh: mysqldump: not found
.
#0 /www/project/vendor/spatie/db-dumper/src/DbDumper.php(263): Spatie\DbDumper\Exceptions\DumpFailed::processDidNotEndSuccessfully(Object(Symfony\Component\Process\Process))
#1 /www/project/vendor/spatie/db-dumper/src/Databases/MySql.php(203): Spatie\DbDumper\DbDumper->checkIfDumpWasSuccessFul(Object(Symfony\Component\Process\Process), '/www/herui-area...')
#2 /www/project/vendor/spatie/laravel-backup/src/Tasks/Backup/BackupJob.php(246): Spatie\DbDumper\Databases\MySql->dumpToFile('/www/herui-area...')
#3 [internal function]: Spatie\Backup\Tasks\Backup\BackupJob->Spatie\Backup\Tasks\Backup\{closure}(Object(Spatie\DbDumper\Databases\MySql), 'mysql')
#4 /www/project/vendor/laravel/framework/src/Illuminate/Support/Collection.php(1120): array_map(Object(Closure), Array, Array)
#5 /www/project/vendor/spatie/laravel-backup/src/Tasks/Backup/BackupJob.php(249): Illuminate\Support\Collection->map(Object(Closure))
#6 /www/project/vendor/spatie/laravel-backup/src/Tasks/Backup/BackupJob.php(166): Spatie\Backup\Tasks\Backup\BackupJob->dumpDatabases()
#7 /www/project/vendor/spatie/laravel-backup/src/Tasks/Backup/BackupJob.php(142): Spatie\Backup\Tasks\Backup\BackupJob->createBackupManifest()
#8 /www/project/vendor/spatie/laravel-backup/src/Commands/BackupCommand.php(52): Spatie\Backup\Tasks\Backup\BackupJob->run()
#9 [internal function]: Spatie\Backup\Commands\BackupCommand->handle()
#10 /www/project/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(32): call_user_func_array(Array, Array)
#11 /www/project/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(90): Illuminate\Container\BoundMethod::Illuminate\Container\{closure}()
#12 /www/project/vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php(34): Illuminate\Container\BoundMethod::callBoundMethod(Object(Illuminate\Foundation\Application), Array, Object(Closure))
#13 /www/project/vendor/laravel/framework/src/Illuminate/Container/Container.php(576): Illuminate\Container\BoundMethod::call(Object(Illuminate\Foundation\Application), Array, Array, NULL)
#14 /www/project/vendor/laravel/framework/src/Illuminate/Console/Command.php(183): Illuminate\Container\Container->call(Array)
#15 /www/project/vendor/symfony/console/Command/Command.php(255): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#16 /www/project/vendor/laravel/framework/src/Illuminate/Console/Command.php(170): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Illuminate\Console\OutputStyle))
#17 /www/project/vendor/spatie/laravel-backup/src/Commands/BaseCommand.php(16): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 /www/project/vendor/symfony/console/Application.php(1021): Spatie\Backup\Commands\BaseCommand->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 /www/project/vendor/symfony/console/Application.php(275): Symfony\Component\Console\Application->doRunCommand(Object(Spatie\Backup\Commands\BackupCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 /www/project/vendor/symfony/console/Application.php(149): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 /www/project/vendor/laravel/framework/src/Illuminate/Console/Application.php(90): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 /www/project/vendor/laravel/framework/src/Illuminate/Foundation/Console/Kernel.php(133): Illuminate\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 /www/project/artisan(37): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 {main}
Backup failed because: The dump process failed with exitcode 127 : Command not found : sh: mysqldump: not found
大概知道是docker-compose环境 php容器内无法访问mysq容器报错没有该命令
求助求助 这个包支持这种环境吗
或是其他备份方法请大家指点指点 谢谢~
这个问题其实很简单,因为你是在PHP容器中操作的备份命令,这个备份命令其实执行了mysql的导出备份命令,但是你PHP的容器内是没有装mysql的,因为你的mysql是以另一个容器单独部署的,只不过两个容器部署到了同一个network下面,所以你会误解为你在PHP容器可以执行备份,但实际你在PHP容器内部执行mysql的客户端命令就会发现问题所在。要想解决这个问题,可以在你的PHP容器内装一个mysql客户端,客户端默认指向mysql容器的链接即可,具体你可以参考laradock的workspace容器的dockerfile文件处理。
github.com/laradock/laradock/blob/...
上面是参考部分