From 43e1ec0244df3c9eda06fa2b2a6da7703327b2cf Mon Sep 17 00:00:00 2001 From: ssongliu <73214554+ssongliu@users.noreply.github.com> Date: Thu, 3 Aug 2023 18:40:23 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3=E5=BA=94=E7=94=A8?= =?UTF-8?q?=E5=A4=87=E4=BB=BD=E5=A4=B1=E8=B4=A5=E7=9A=84=E9=97=AE=E9=A2=98?= =?UTF-8?q?=20(#1828)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/app/service/backup_app.go | 81 ++++++++++++++++--------------- 1 file changed, 43 insertions(+), 38 deletions(-) diff --git a/backend/app/service/backup_app.go b/backend/app/service/backup_app.go index debdaa8ea..ec00836d3 100644 --- a/backend/app/service/backup_app.go +++ b/backend/app/service/backup_app.go @@ -104,14 +104,16 @@ func handleAppBackup(install *model.AppInstall, backupDir, fileName string) erro return err } - resource, _ := appInstallResourceRepo.GetFirst(appInstallResourceRepo.WithAppInstallId(install.ID)) - if resource.ID != 0 && resource.ResourceId != 0 { - db, err := mysqlRepo.Get(commonRepo.WithByID(resource.ResourceId)) - if err != nil { - return err - } - if err := handleMysqlBackup(db.MysqlName, db.Name, tmpDir, fmt.Sprintf("%s.sql.gz", install.Name)); err != nil { - return err + resources, _ := appInstallResourceRepo.GetBy(appInstallResourceRepo.WithAppInstallId(install.ID)) + for _, resource := range resources { + if resource.Key == "mysql" { + db, err := mysqlRepo.Get(commonRepo.WithByID(resource.ResourceId)) + if err != nil { + return err + } + if err := handleMysqlBackup(db.MysqlName, db.Name, tmpDir, fmt.Sprintf("%s.sql.gz", install.Name)); err != nil { + return err + } } } @@ -169,38 +171,40 @@ func handleAppRecover(install *model.AppInstall, recoverFile string, isRollback } newEnvFile := "" - resource, _ := appInstallResourceRepo.GetFirst(appInstallResourceRepo.WithAppInstallId(install.ID)) - if resource.ID != 0 && install.App.Key != "mysql" { - mysqlInfo, err := appInstallRepo.LoadBaseInfo(resource.Key, "") - if err != nil { - return err - } - db, err := mysqlRepo.Get(commonRepo.WithByID(resource.ResourceId)) - if err != nil { - return err - } + resources, _ := appInstallResourceRepo.GetBy(appInstallResourceRepo.WithAppInstallId(install.ID)) + for _, resource := range resources { + if resource.Key == "mysql" { + mysqlInfo, err := appInstallRepo.LoadBaseInfo(resource.Key, "") + if err != nil { + return err + } + db, err := mysqlRepo.Get(commonRepo.WithByID(resource.ResourceId)) + if err != nil { + return err + } - newDB, envMap, err := reCreateDB(db.ID, oldInstall.Env) - if err != nil { - return err - } - oldHost := fmt.Sprintf("\"PANEL_DB_HOST\":\"%v\"", envMap["PANEL_DB_HOST"].(string)) - newHost := fmt.Sprintf("\"PANEL_DB_HOST\":\"%v\"", mysqlInfo.ServiceName) - oldInstall.Env = strings.ReplaceAll(oldInstall.Env, oldHost, newHost) - envMap["PANEL_DB_HOST"] = mysqlInfo.ServiceName - newEnvFile, err = coverEnvJsonToStr(oldInstall.Env) - if err != nil { - return err - } - _ = appInstallResourceRepo.BatchUpdateBy(map[string]interface{}{"resource_id": newDB.ID}, commonRepo.WithByID(resource.ID)) + newDB, envMap, err := reCreateDB(db.ID, oldInstall.Env) + if err != nil { + return err + } + oldHost := fmt.Sprintf("\"PANEL_DB_HOST\":\"%v\"", envMap["PANEL_DB_HOST"].(string)) + newHost := fmt.Sprintf("\"PANEL_DB_HOST\":\"%v\"", mysqlInfo.ServiceName) + oldInstall.Env = strings.ReplaceAll(oldInstall.Env, oldHost, newHost) + envMap["PANEL_DB_HOST"] = mysqlInfo.ServiceName + newEnvFile, err = coverEnvJsonToStr(oldInstall.Env) + if err != nil { + return err + } + _ = appInstallResourceRepo.BatchUpdateBy(map[string]interface{}{"resource_id": newDB.ID}, commonRepo.WithByID(resource.ID)) - if err := handleMysqlRecover(dto.CommonRecover{ - Name: newDB.MysqlName, - DetailName: newDB.Name, - File: tmpPath + "/" + fmt.Sprintf("%s/%s.sql.gz", tmpPath, install.Name), - }, true); err != nil { - global.LOG.Errorf("handle recover from sql.gz failed, err: %v", err) - return err + if err := handleMysqlRecover(dto.CommonRecover{ + Name: newDB.MysqlName, + DetailName: newDB.Name, + File: fmt.Sprintf("%s/%s.sql.gz", tmpPath, install.Name), + }, true); err != nil { + global.LOG.Errorf("handle recover from sql.gz failed, err: %v", err) + return err + } } } @@ -246,6 +250,7 @@ func reCreateDB(dbID uint, oldEnv string) (*model.DatabaseMysql, map[string]inte oldPassword, _ := envMap["PANEL_DB_USER_PASSWORD"].(string) createDB, err := mysqlService.Create(context.Background(), dto.MysqlDBCreate{ Name: oldName, + From: "local", Format: "utf8mb4", Username: oldUser, Password: oldPassword,