From 265842e7bf67af55b78366e6711950e3ba627478 Mon Sep 17 00:00:00 2001 From: xboard Date: Thu, 23 Nov 2023 17:55:58 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=A4=87=E4=BB=BDcommand=20=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E5=A4=87=E4=BB=BD=E5=90=8E=E8=87=AA?= =?UTF-8?q?=E5=8A=A8=E5=8E=8B=E7=BC=A9=E4=B8=BA.gz=E8=8A=82=E7=9C=81?= =?UTF-8?q?=E7=A9=BA=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- app/Console/Commands/BackupDatabase.php | 34 ++++++++++++++++++++----- 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 40f0d7e..707b08b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,7 +4,7 @@ COPY --from=mlocati/php-extension-installer /usr/bin/install-php-extensions /usr RUN install-php-extensions pcntl -RUN apk --no-cache add shadow supervisor nginx sqlite nginx-mod-http-brotli +RUN apk --no-cache add shadow supervisor nginx sqlite nginx-mod-http-brotli mysql-client #复制项目文件以及配置文件 WORKDIR /www diff --git a/app/Console/Commands/BackupDatabase.php b/app/Console/Commands/BackupDatabase.php index 4bb4803..aa621d8 100644 --- a/app/Console/Commands/BackupDatabase.php +++ b/app/Console/Commands/BackupDatabase.php @@ -4,6 +4,7 @@ namespace App\Console\Commands; use Illuminate\Console\Command; use Google\Cloud\Storage\StorageClient; +use Symfony\Component\Process\Process; class BackupDatabase extends Command { @@ -30,6 +31,8 @@ class BackupDatabase extends Command if (config('database.default') === 'mysql'){ $this->info("1️⃣:开始备份Mysql"); \Spatie\DbDumper\Databases\MySql::create() + ->setHost(config('database.connections.mysql.host')) + ->setPort(config('database.connections.mysql.port')) ->setDbName(config('database.connections.mysql.database')) ->setUserName(config('database.connections.mysql.username')) ->setPassword(config('database.connections.mysql.password')) @@ -42,31 +45,50 @@ class BackupDatabase extends Command ->dumpToFile($databaseBackupPath); $this->info("2️⃣:Sqlite备份完成"); } + $this->info('3️⃣:开始压缩备份文件'); + // 使用 gzip 压缩备份文件 + $compressedBackupPath = $databaseBackupPath . '.gz'; + $gzipCommand = new Process(["gzip", "-c", $databaseBackupPath]); + $gzipCommand->run(); + + // 检查压缩是否成功 + if ($gzipCommand->isSuccessful()) { + // 压缩成功,你可以删除原始备份文件 + file_put_contents($compressedBackupPath, $gzipCommand->getOutput()); + $this->info('4️⃣:文件压缩成功'); + unlink($databaseBackupPath); + } else { + // 压缩失败,处理错误 + echo $gzipCommand->getErrorOutput(); + $this->error('😔:文件压缩失败'); + unlink($databaseBackupPath); + return; + } if (!$isUpload){ - $this->info("🎉:数据库成功备份到:$databaseBackupPath"); + $this->info("🎉:数据库成功备份到:$compressedBackupPath"); }else{ // 传到云盘 - $this->info("3️⃣:开始将备份上传到Google Cloud"); + $this->info("5️⃣:开始将备份上传到Google Cloud"); // Google Cloud Storage 配置 $storage = new StorageClient([ 'keyFilePath' => config('cloud_storage.google_cloud.key_file'), ]); $bucket = $storage->bucket(config('cloud_storage.google_cloud.storage_bucket')); - $objectName = 'backup/' . now()->format('Y-m-d_H-i-s') . '_database_backup.sql'; + $objectName = 'backup/' . now()->format('Y-m-d_H-i-s') . '_database_backup.sql.gz'; // 上传文件 - $bucket->upload(fopen($databaseBackupPath, 'r'), [ + $bucket->upload(fopen($compressedBackupPath, 'r'), [ 'name' => $objectName, ]); // 输出文件链接 \Log::channel('backup')->info("🎉:数据库备份已上传到 Google Cloud Storage: $objectName"); $this->info("🎉:数据库备份已上传到 Google Cloud Storage: $objectName"); - \File::delete($databaseBackupPath); + \File::delete($compressedBackupPath); } }catch(\Exception $e){ \Log::channel('backup')->error("😔:数据库备份失败 \n" . $e); $this->error("😔:数据库备份失败\n" . $e); - \File::delete($databaseBackupPath); + \File::delete($compressedBackupPath); } } }